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