Revision cd1a56d8 web_client/src/gr/grnet/pithos/web/client/grouptree/GroupTreeViewModel.java

b/web_client/src/gr/grnet/pithos/web/client/grouptree/GroupTreeViewModel.java
36 36
package gr.grnet.pithos.web.client.grouptree;
37 37

  
38 38
import gr.grnet.pithos.web.client.Pithos;
39
import gr.grnet.pithos.web.client.SharingUsers;
40
import gr.grnet.pithos.web.client.foldertree.AccountResource;
41 39
import gr.grnet.pithos.web.client.foldertree.File;
42
import gr.grnet.pithos.web.client.foldertree.Folder;
43
import gr.grnet.pithos.web.client.foldertree.Group;
44 40
import gr.grnet.pithos.web.client.grouptree.GroupTreeView.Templates;
45
import gr.grnet.pithos.web.client.rest.GetRequest;
46
import gr.grnet.pithos.web.client.rest.RestException;
47 41

  
48 42
import java.util.HashMap;
49
import java.util.HashSet;
50
import java.util.Iterator;
51 43
import java.util.Map;
52 44
import java.util.Set;
53 45

  
54 46
import com.google.gwt.cell.client.AbstractCell;
55 47
import com.google.gwt.cell.client.Cell;
56
import com.google.gwt.cell.client.TextCell;
57
import com.google.gwt.core.client.GWT;
58
import com.google.gwt.core.client.Scheduler;
59 48
import com.google.gwt.event.dom.client.ContextMenuEvent;
60
import com.google.gwt.safehtml.shared.SafeHtml;
61 49
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
62
import com.google.gwt.text.shared.SafeHtmlRenderer;
63
import com.google.gwt.user.client.Command;
64 50
import com.google.gwt.user.client.ui.AbstractImagePrototype;
65 51
import com.google.gwt.view.client.ListDataProvider;
66
import com.google.gwt.view.client.SingleSelectionModel;
67 52
import com.google.gwt.view.client.TreeViewModel;
68 53

  
69 54
public class GroupTreeViewModel implements TreeViewModel {
70 55

  
71 56
    protected Pithos app;
72 57

  
73
    private Cell<Group> groupCell = new AbstractCell<Group>(ContextMenuEvent.getType().getName()) {
58
    private ListDataProvider<String> rootDataProvider = new ListDataProvider<String>();
59
    
60
    private Cell<String> rootCell = new AbstractCell<String>(ContextMenuEvent.getType().getName()) {
61

  
62
		@Override
63
		public void render(@SuppressWarnings("unused") Context context,	String value, SafeHtmlBuilder sb) {
64
            String html = AbstractImagePrototype.create(GroupTreeView.images.groups()).getHTML();
65
            sb.appendHtmlConstant(html);
66
            sb.append(Templates.INSTANCE.nameSpan(value));
67
		}
68
		
69
        @Override
70
        public void onBrowserEvent(@SuppressWarnings("unused") Cell.Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, String s, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") com.google.gwt.cell.client.ValueUpdater<String> valueUpdater) {
71
            if (event.getType().equals(ContextMenuEvent.getType().getName())) {
72
                GroupContextMenu menu = new GroupContextMenu(app, GroupTreeView.images, null);
73
                menu.setPopupPosition(event.getClientX(), event.getClientY());
74
                menu.show();
75
            }
76
        }
77
	};
78

  
79
	private Cell<Group> groupCell = new AbstractCell<Group>(ContextMenuEvent.getType().getName()) {
74 80

  
75 81
		@Override
76
		public void render(Context context,	Group value, SafeHtmlBuilder sb) {
82
		public void render(@SuppressWarnings("unused") Context context,	Group value, SafeHtmlBuilder sb) {
77 83
            String html = AbstractImagePrototype.create(GroupTreeView.images.group()).getHTML();
78 84
            sb.appendHtmlConstant(html);
79 85
            sb.append(Templates.INSTANCE.nameSpan(value.getName()));
80 86
		}
87
		
88
        @Override
89
        public void onBrowserEvent(@SuppressWarnings("unused") Cell.Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, Group group, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") com.google.gwt.cell.client.ValueUpdater<Group> valueUpdater) {
90
            if (event.getType().equals(ContextMenuEvent.getType().getName())) {
91
                GroupContextMenu menu = new GroupContextMenu(app, GroupTreeView.images, group);
92
                menu.setPopupPosition(event.getClientX(), event.getClientY());
93
                menu.show();
94
            }
95
        }
81 96
	};
82 97

  
83
    private Cell<String> userCell = new AbstractCell<String>(ContextMenuEvent.getType().getName()) {
98
    private Cell<User> userCell = new AbstractCell<User>(ContextMenuEvent.getType().getName()) {
84 99

  
85 100
		@Override
86
		public void render(Context context,	String value, SafeHtmlBuilder sb) {
101
		public void render(@SuppressWarnings("unused") Context context,	User value, SafeHtmlBuilder sb) {
87 102
            String html = AbstractImagePrototype.create(GroupTreeView.images.user()).getHTML();
88 103
            sb.appendHtmlConstant(html);
89
            sb.append(Templates.INSTANCE.nameSpan(value));
104
            sb.append(Templates.INSTANCE.nameSpan(value.getName()));
90 105
		}
91
	};
92 106

  
93
	private ListDataProvider<String> rootDataProvider = new ListDataProvider<String>();
107
        @Override
108
        public void onBrowserEvent(@SuppressWarnings("unused") Cell.Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, User user, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") com.google.gwt.cell.client.ValueUpdater<User> valueUpdater) {
109
            if (event.getType().equals(ContextMenuEvent.getType().getName())) {
110
                UserContextMenu menu = new UserContextMenu(app, GroupTreeView.images, user);
111
                menu.setPopupPosition(event.getClientX(), event.getClientY());
112
                menu.show();
113
            }
114
        }
115
    };
116

  
94 117
    protected ListDataProvider<Group> groupsDataProvider = new ListDataProvider<Group>();
95 118

  
96
    protected Map<Group, ListDataProvider<String>> userDataProviderMap = new HashMap<Group, ListDataProvider<String>>();
119
    protected Map<Group, ListDataProvider<User>> userDataProviderMap = new HashMap<Group, ListDataProvider<User>>();
97 120
    
98 121
    protected Map<String, Set<File>> sharedFiles = new HashMap<String, Set<File>>();
99 122

  
100
    private SingleSelectionModel<String> selectionModel;
101

  
102
    public GroupTreeViewModel(Pithos _app, SingleSelectionModel<String> selectionModel) {
123
    public GroupTreeViewModel(Pithos _app) {
103 124
        app = _app;
104
        this.selectionModel = selectionModel;
105 125
    }
106 126

  
107 127
    @Override
108 128
    public <T> NodeInfo<?> getNodeInfo(T value) {
109 129
        if (value == null) {
110
            rootDataProvider.getList().add("Groups");
111
            return new DefaultNodeInfo<String>(rootDataProvider, new TextCell(new SafeHtmlRenderer<String>() {
112
                @Override
113
                public SafeHtml render(String object) {
114
                    SafeHtmlBuilder builder = new SafeHtmlBuilder();
115
                    render(object, builder);
116
                    return builder.toSafeHtml();
117
                }
118

  
119
                @Override
120
                public void render(String object, SafeHtmlBuilder builder) {
121
                    String html = AbstractImagePrototype.create(GroupTreeView.images.groups()).getHTML();
122
                    builder.appendHtmlConstant(html);
123
                    builder.append(GroupTreeView.Templates.INSTANCE.nameSpan(object));
124
                }
125
                
126
            }),  null, null);
130
        	rootDataProvider.getList().add("");
131
            return new DefaultNodeInfo<String>(rootDataProvider, rootCell,  null, null);
127 132
        }
128 133
        else if (value instanceof String) {
129 134
        	groupsDataProvider.getList().addAll(app.getAccount().getGroups());
......
132 137
        else { //Group
133 138
        	Group g = (Group) value;
134 139
			if (userDataProviderMap.get(g) == null) {
135
				userDataProviderMap.put(g, new ListDataProvider<String>());
140
				userDataProviderMap.put(g, new ListDataProvider<User>());
136 141
			}
137
			final ListDataProvider<String> dataProvider = userDataProviderMap.get(g);
138
        	return new DefaultNodeInfo(dataProvider, userCell, null, null);
142
			final ListDataProvider<User> dataProvider = userDataProviderMap.get(g);
143
			dataProvider.getList().clear();
144
			for (String u : g.getMembers())
145
				dataProvider.getList().add(new User(u, g));
146
        	return new DefaultNodeInfo<User>(dataProvider, userCell, null, null);
139 147
        }
140 148
    }
141 149

  
142 150
	@Override
143 151
    public boolean isLeaf(Object o) {
144
        if (o instanceof String && !o.equals("Groups"))
152
        if (o instanceof String) {
153
       		return ((String) o).length() == 0 || app.getAccount().getGroups().isEmpty();
154
        }
155
        else if (o instanceof Group)
156
        	return ((Group) o).getMembers().isEmpty();
157
        else
145 158
        	return true;
146
        return false;
147 159
    }
160
	
161
	public void initialize() {
162
    	rootDataProvider.getList().clear();
163
    	rootDataProvider.getList().add("Groups");
164
	}
148 165
}

Also available in: Unified diff