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

b/src/gr/grnet/pithos/web/client/grouptree/GroupTreeViewModel.java
35 35

  
36 36
package gr.grnet.pithos.web.client.grouptree;
37 37

  
38
import gr.grnet.pithos.web.client.Pithos;
39
import gr.grnet.pithos.web.client.commands.CreateGroupCommand;
40
import gr.grnet.pithos.web.client.foldertree.File;
41
import gr.grnet.pithos.web.client.grouptree.GroupTreeView.Templates;
42

  
43
import java.util.HashMap;
44
import java.util.HashSet;
45
import java.util.Map;
46

  
38 47
import com.google.gwt.cell.client.AbstractCell;
39 48
import com.google.gwt.cell.client.Cell;
40 49
import com.google.gwt.event.dom.client.ContextMenuEvent;
......
44 53
import com.google.gwt.view.client.SelectionChangeEvent;
45 54
import com.google.gwt.view.client.SingleSelectionModel;
46 55
import com.google.gwt.view.client.TreeViewModel;
47
import gr.grnet.pithos.web.client.Pithos;
48
import gr.grnet.pithos.web.client.commands.CreateGroupCommand;
49
import gr.grnet.pithos.web.client.foldertree.File;
50
import gr.grnet.pithos.web.client.grouptree.GroupTreeView.Templates;
51

  
52
import java.util.HashMap;
53
import java.util.HashSet;
54
import java.util.List;
55
import java.util.Map;
56 56

  
57 57
public class GroupTreeViewModel implements TreeViewModel {
58
    final Group CreateGroupPlaceholder = new Group("Create new group...");
59 58

  
60 59
    protected Pithos app;
61 60

  
62
    private Cell<Group> groupCell = new AbstractCell<Group>(ContextMenuEvent.getType().getName()) {
61
	private Cell<Group> groupCell = new AbstractCell<Group>(ContextMenuEvent.getType().getName()) {
63 62

  
64
        @Override
65
        public void render(Context context, Group group, SafeHtmlBuilder sb) {
63
		@Override
64
		public void render(Context context,	Group value, SafeHtmlBuilder sb) {
66 65
            String html = AbstractImagePrototype.create(GroupTreeView.images.group()).getHTML();
67 66
            sb.appendHtmlConstant(html).appendHtmlConstant("&nbsp;");
68
            sb.append(Templates.INSTANCE.nameSpan(group.getName()));
69
        }
70

  
67
            sb.append(Templates.INSTANCE.nameSpan(value.getName()));
68
		}
69
		
71 70
        @Override
72 71
        public void onBrowserEvent(Cell.Context context, com.google.gwt.dom.client.Element parent, Group group, com.google.gwt.dom.client.NativeEvent event, com.google.gwt.cell.client.ValueUpdater<Group> valueUpdater) {
73
            if(!group.equals(CreateGroupPlaceholder)) {
74
                GroupTreeViewModel.this.groupSelectionModel.setSelected(group, true);
75
                if(event.getType().equals(ContextMenuEvent.getType().getName())) {
76
                    GroupContextMenu menu = new GroupContextMenu(app, GroupTreeView.images, group);
77
                    menu.setPopupPosition(event.getClientX(), event.getClientY());
78
                    menu.show();
79
                }
80
            }
72
        	if (!group.equals(createGroup)) {
73
	            GroupTreeViewModel.this.groupSelectionModel.setSelected(group, true);
74
	            if (event.getType().equals(ContextMenuEvent.getType().getName())) {
75
	                GroupContextMenu menu = new GroupContextMenu(app, GroupTreeView.images, group);
76
	                menu.setPopupPosition(event.getClientX(), event.getClientY());
77
	                menu.show();
78
	            }
79
        	}
81 80
        }
82
    };
81
	};
83 82

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

  
86
        @Override
87
        public void render(Context context, User user, final SafeHtmlBuilder sb) {
85
		@Override
86
		public void render(Context context,	User value, SafeHtmlBuilder sb) {
88 87
            String html = AbstractImagePrototype.create(GroupTreeView.images.user()).getHTML();
89 88
            sb.appendHtmlConstant(html).appendHtmlConstant("&nbsp;");
90
            final String userDisplayName = user.getUserDisplayName();
91
            sb.append(Templates.INSTANCE.nameSpan(userDisplayName));
92
        }
89
            sb.append(Templates.INSTANCE.nameSpan(value.getName()));
90
		}
93 91

  
94 92
        @Override
95 93
        public void onBrowserEvent(Cell.Context context, com.google.gwt.dom.client.Element parent, User user, com.google.gwt.dom.client.NativeEvent event, com.google.gwt.cell.client.ValueUpdater<User> valueUpdater) {
96 94
            GroupTreeViewModel.this.userSelectionModel.setSelected(user, true);
97
            if(event.getType().equals(ContextMenuEvent.getType().getName())) {
95
            if (event.getType().equals(ContextMenuEvent.getType().getName())) {
98 96
                UserContextMenu menu = new UserContextMenu(app, GroupTreeView.images, user);
99 97
                menu.setPopupPosition(event.getClientX(), event.getClientY());
100 98
                menu.show();
......
105 103
    protected ListDataProvider<Group> groupsDataProvider = new ListDataProvider<Group>();
106 104

  
107 105
    protected Map<Group, ListDataProvider<User>> userDataProviderMap = new HashMap<Group, ListDataProvider<User>>();
108

  
106
    
109 107
    SingleSelectionModel<Group> groupSelectionModel;
110 108
    SingleSelectionModel<User> userSelectionModel;
109
    
110
    final Group createGroup = new Group("Create new group...");
111 111

  
112 112
    public GroupTreeViewModel(Pithos _app) {
113 113
        app = _app;
114 114

  
115
        groupSelectionModel = new SingleSelectionModel<Group>();
116
        app.addSelectionModel(groupSelectionModel);
117
        groupSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
118

  
119
            @Override
120
            public void onSelectionChange(SelectionChangeEvent event) {
121
                Group selected = groupSelectionModel.getSelectedObject();
122
                if(selected != null) {
123
                    app.deselectOthers(app.getGroupTreeView(), groupSelectionModel);
124
                    app.showFiles(new HashSet<File>());
125
                    app.disableUploadArea();
126
                    app.upload.setEnabled(false);
127
                    app.showRelevantToolbarButtons();
128
                    if(selected.equals(CreateGroupPlaceholder)) {
129
                        new CreateGroupCommand(app, null).execute();
130
                        groupSelectionModel.setSelected(CreateGroupPlaceholder, false);
131
                    }
132
                }
133
                else {
134
                    if(app.getSelectedTree().equals(app.getGroupTreeView())) {
135
                        app.setSelectedTree(null);
136
                    }
137
                    if(app.getSelectedTree() == null) {
138
                        app.showRelevantToolbarButtons();
139
                    }
140
                }
141
            }
142
        });
143

  
144
        userSelectionModel = new SingleSelectionModel<User>();
145
        app.addSelectionModel(userSelectionModel);
146
        userSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
147

  
148
            @Override
149
            public void onSelectionChange(SelectionChangeEvent event) {
150
                if(userSelectionModel.getSelectedObject() != null) {
151
                    app.deselectOthers(app.getGroupTreeView(), userSelectionModel);
152
                    app.showFiles(new HashSet<File>());
153
                    app.showRelevantToolbarButtons();
154
                }
155
                else {
156
                    if(app.getSelectedTree().equals(app.getGroupTreeView())) {
157
                        app.setSelectedTree(null);
158
                    }
159
                    if(app.getSelectedTree() == null) {
160
                        app.showRelevantToolbarButtons();
161
                    }
162
                }
163
            }
164
        });
165
    }
115
    	groupSelectionModel = new SingleSelectionModel<Group>();
116
    	app.addSelectionModel(groupSelectionModel);
117
    	groupSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
118
			
119
			@Override
120
			public void onSelectionChange(SelectionChangeEvent event) {
121
				Group selected = groupSelectionModel.getSelectedObject();
122
				if (selected != null) {
123
					app.deselectOthers(app.getGroupTreeView(), groupSelectionModel);
124
					app.showFiles(new HashSet<File>());
125
					app.disableUploadArea();
126
					app.upload.setEnabled(false);
127
					app.showRelevantToolbarButtons();
128
					if (selected.equals(createGroup)) {
129
						new CreateGroupCommand(app, null).execute();
130
						groupSelectionModel.setSelected(createGroup, false);
131
					}
132
				}
133
				else {
134
					if (app.getSelectedTree().equals(app.getGroupTreeView()))
135
						app.setSelectedTree(null);
136
					if (app.getSelectedTree() == null)
137
						app.showRelevantToolbarButtons();
138
				}
139
			}
140
		});
141

  
142
    	userSelectionModel = new SingleSelectionModel<User>();
143
    	app.addSelectionModel(userSelectionModel);
144
    	userSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
145
			
146
			@Override
147
			public void onSelectionChange(SelectionChangeEvent event) {
148
				if (userSelectionModel.getSelectedObject() != null) {
149
					app.deselectOthers(app.getGroupTreeView(), userSelectionModel);
150
					app.showFiles(new HashSet<File>());
151
					app.showRelevantToolbarButtons();
152
				}
153
				else {
154
					if (app.getSelectedTree().equals(app.getGroupTreeView()))
155
						app.setSelectedTree(null);
156
					if (app.getSelectedTree() == null)
157
						app.showRelevantToolbarButtons();
158
				}
159
			}
160
		});
161
}
166 162

  
167 163
    @Override
168 164
    public <T> NodeInfo<?> getNodeInfo(T value) {
169
        app.LOG("GroupTreeViewModel::getNodeInfo(), value = ", value);
170
        if(value == null) {
171
            groupsDataProvider.getList().clear();
172
            groupsDataProvider.getList().addAll(app.getAccount().getGroups());
173
            groupsDataProvider.getList().add(CreateGroupPlaceholder);
165
        if (value == null) {
166
        	groupsDataProvider.getList().clear();
167
       		groupsDataProvider.getList().addAll(app.getAccount().getGroups());
168
       		groupsDataProvider.getList().add(createGroup);
174 169
            return new DefaultNodeInfo<Group>(groupsDataProvider, groupCell, groupSelectionModel, null);
175 170
        }
176
        final Group group = (Group) value;
177
        if(userDataProviderMap.get(group) == null) {
178
            userDataProviderMap.put(group, new ListDataProvider<User>());
179
        }
180
        final ListDataProvider<User> dataProvider = userDataProviderMap.get(group);
181
        dataProvider.getList().clear();
182
        final List<User> users = group.getUsers();
183
        for(User user : users) {
184
            app.LOG("GroupTreeViewModel::getNodeInfo(), Add ", user);
185
            dataProvider.getList().add(user);
186
        }
187

  
188

  
189
        return new DefaultNodeInfo<User>(dataProvider, userCell, userSelectionModel, null);
171
    	Group g = (Group) value;
172
		if (userDataProviderMap.get(g) == null) {
173
			userDataProviderMap.put(g, new ListDataProvider<User>());
174
		}
175
		final ListDataProvider<User> dataProvider = userDataProviderMap.get(g);
176
		dataProvider.getList().clear();
177
		for (String u : g.getMembers())
178
			dataProvider.getList().add(new User(u, g.getName()));
179
    	return new DefaultNodeInfo<User>(dataProvider, userCell, userSelectionModel, null);
190 180
    }
191 181

  
192
    @Override
182
	@Override
193 183
    public boolean isLeaf(Object o) {
194
        if(o instanceof User) {
195
            return true;
196
        }
197
        else if(o instanceof Group) {
198
            return ((Group) o).getUsers().isEmpty();
184
        if (o instanceof User) {
185
       		return true;
199 186
        }
187
        else if (o instanceof Group)
188
        	return ((Group) o).getMembers().isEmpty();
200 189
        return false;
201 190
    }
202

  
203
    public void updateGroupNode(Group group) {
204
        if(group == null) {
205
            groupsDataProvider.getList().clear();
206
            groupsDataProvider.getList().addAll(app.getAccount().getGroups());
207
            groupsDataProvider.getList().add(CreateGroupPlaceholder);
208
        }
209
        else {
210
            if(userDataProviderMap.get(group) == null) {
211
                userDataProviderMap.put(group, new ListDataProvider<User>());
212
            }
213
            final ListDataProvider<User> dataProvider = userDataProviderMap.get(group);
214
            dataProvider.getList().clear();
215
            for(User user : group.getUsers()) {
216
                app.LOG("GroupTreeViewModel::updateGroupNode(), group = ", group, ". Add ", user);
217
                dataProvider.getList().add(user);
218
            }
219
        }
220
    }
221

  
222
    public Object getSelectedObject() {
223
        if(groupSelectionModel.getSelectedObject() != null) {
224
            return groupSelectionModel.getSelectedObject();
225
        }
226
        if(userSelectionModel.getSelectedObject() != null) {
227
            return userSelectionModel.getSelectedObject();
228
        }
229
        return null;
230
    }
191
	
192
	public void updateGroupNode(Group group) {
193
		if (group == null) {
194
			groupsDataProvider.getList().clear();
195
			groupsDataProvider.getList().addAll(app.getAccount().getGroups());
196
       		groupsDataProvider.getList().add(createGroup);
197
		}
198
		else {
199
			if (userDataProviderMap.get(group) == null) {
200
				userDataProviderMap.put(group, new ListDataProvider<User>());
201
			}
202
			final ListDataProvider<User> dataProvider = userDataProviderMap.get(group);
203
			dataProvider.getList().clear();
204
			for (String u : group.getMembers())
205
				dataProvider.getList().add(new User(u, group.getName()));
206
		}
207
	}
208

  
209
	public Object getSelectedObject() {
210
		if (groupSelectionModel.getSelectedObject() != null)
211
			return groupSelectionModel.getSelectedObject();
212
		if (userSelectionModel.getSelectedObject() != null)
213
			return userSelectionModel.getSelectedObject();
214
		return null;
215
	}
231 216
}

Also available in: Unified diff