Revision 56f9134b src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java
b/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java | ||
---|---|---|
37 | 37 |
|
38 | 38 |
import gr.grnet.pithos.web.client.FolderContextMenu; |
39 | 39 |
import gr.grnet.pithos.web.client.Pithos; |
40 |
import gr.grnet.pithos.web.client.foldertree.AccountResource; |
|
40 | 41 |
import gr.grnet.pithos.web.client.foldertree.File; |
41 | 42 |
import gr.grnet.pithos.web.client.foldertree.Folder; |
42 | 43 |
import gr.grnet.pithos.web.client.foldertree.FolderTreeView; |
... | ... | |
108 | 109 |
|
109 | 110 |
private Map<Folder, ListDataProvider<Folder>> dataProviderMap = new HashMap<Folder, ListDataProvider<Folder>>(); |
110 | 111 |
|
111 |
protected Set<File> sharedFiles = new HashSet<File>(); |
|
112 |
|
|
113 | 112 |
protected SingleSelectionModel<Folder> selectionModel; |
114 | 113 |
|
115 | 114 |
public MysharedTreeViewModel(Pithos _app, SingleSelectionModel<Folder> selectionModel) { |
... | ... | |
122 | 121 |
if (value == null) { |
123 | 122 |
ListDataProvider<String> rootDataProvider = new ListDataProvider<String>(); |
124 | 123 |
rootDataProvider.getList().add("Shared by me"); |
125 |
final SingleSelectionModel<String> selectionModel2 = new SingleSelectionModel<String>(); |
|
126 |
selectionModel2.addSelectionChangeHandler(new Handler() { |
|
127 |
|
|
128 |
@Override |
|
129 |
public void onSelectionChange(SelectionChangeEvent event) { |
|
130 |
if (selectionModel2.getSelectedObject() != null) { |
|
131 |
app.deselectOthers(app.getMySharedTreeView(), selectionModel2); |
|
132 |
app.applyPermissions(null); |
|
133 |
fetchSharedFiles(true); |
|
134 |
app.showRelevantToolbarButtons(); |
|
135 |
} |
|
136 |
else { |
|
137 |
if (app.getSelectedTree().equals(app.getMySharedTreeView()) && app.getMySharedTreeView().getSelection() == null) |
|
138 |
app.setSelectedTree(null); |
|
139 |
if (app.getSelectedTree() == null) |
|
140 |
app.showRelevantToolbarButtons(); |
|
141 |
} |
|
142 |
} |
|
143 |
}); |
|
144 |
app.addSelectionModel(selectionModel2); |
|
145 | 124 |
return new DefaultNodeInfo<String>(rootDataProvider, new TextCell(new SafeHtmlRenderer<String>() { |
146 | 125 |
@Override |
147 | 126 |
public SafeHtml render(String object) { |
... | ... | |
156 | 135 |
builder.appendHtmlConstant(html).appendHtmlConstant(" "); |
157 | 136 |
builder.append(MysharedTreeView.Templates.INSTANCE.nameSpan(object)); |
158 | 137 |
} |
159 |
}), selectionModel2, null);
|
|
138 |
}), null, null);
|
|
160 | 139 |
} |
161 | 140 |
else if (value instanceof String) { |
162 | 141 |
fetchSharedContainers(null); |
... | ... | |
173 | 152 |
} |
174 | 153 |
} |
175 | 154 |
|
176 |
protected void fetchSharedFiles(final boolean showFiles) { |
|
177 |
sharedFiles.clear(); |
|
178 |
final List<Folder> containers = app.getAccount().getContainers(); |
|
179 |
final ListDataProvider<Folder> tempProvider = new ListDataProvider<Folder>(); |
|
180 |
Iterator<Folder> iter = containers.iterator(); |
|
181 |
fetchFolder(iter, tempProvider, new Command() { |
|
182 |
|
|
183 |
@Override |
|
184 |
public void execute() { |
|
185 |
firstLevelDataProvider.getList().clear(); |
|
186 |
firstLevelDataProvider.getList().addAll(tempProvider.getList()); |
|
187 |
if (showFiles) |
|
188 |
app.showFiles(sharedFiles); |
|
189 |
} |
|
190 |
}); |
|
191 |
} |
|
192 |
|
|
193 | 155 |
private void fetchSharedContainers(final Command callback) { |
194 |
final List<Folder> containers = app.getAccount().getContainers(); |
|
195 |
final ListDataProvider<Folder> tempProvider = new ListDataProvider<Folder>(); |
|
196 |
Iterator<Folder> iter = containers.listIterator(); |
|
197 |
fetchFolder(iter, tempProvider, new Command() { |
|
198 |
|
|
156 |
String path = "?format=json&shared="; |
|
157 |
GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(AccountResource.class, app.getApiPath(), app.getUsername(), path) { |
|
158 |
@Override |
|
159 |
public void onSuccess(final AccountResource _result) { |
|
160 |
Iterator<Folder> iter = _result.getContainers().listIterator(); |
|
161 |
fetchFolder(iter, new Command() { |
|
162 |
|
|
163 |
@Override |
|
164 |
public void execute() { |
|
165 |
firstLevelDataProvider.getList().clear(); |
|
166 |
Folder t = null; |
|
167 |
for (Folder c : _result.getContainers()) { |
|
168 |
if (c.isHome()) |
|
169 |
firstLevelDataProvider.getList().add(0, c); //Pithos is always first |
|
170 |
else if (!c.isTrash()) |
|
171 |
firstLevelDataProvider.getList().add(c); |
|
172 |
} |
|
173 |
if (callback != null) |
|
174 |
callback.execute(); |
|
175 |
} |
|
176 |
}); |
|
177 |
} |
|
178 |
|
|
179 |
@Override |
|
180 |
public void onError(Throwable t) { |
|
181 |
GWT.log("Error getting account", t); |
|
182 |
app.setError(t); |
|
183 |
if (t instanceof RestException) |
|
184 |
app.displayError("Error getting account: " + ((RestException) t).getHttpStatusText()); |
|
185 |
else |
|
186 |
app.displayError("System error fetching user data: " + t.getMessage()); |
|
187 |
} |
|
188 |
|
|
199 | 189 |
@Override |
200 |
public void execute() { |
|
201 |
firstLevelDataProvider.getList().clear(); |
|
202 |
firstLevelDataProvider.getList().addAll(tempProvider.getList()); |
|
203 |
if (callback != null) |
|
204 |
callback.execute(); |
|
190 |
protected void onUnauthorized(Response response) { |
|
191 |
app.sessionExpired(); |
|
205 | 192 |
} |
206 |
}); |
|
193 |
}; |
|
194 |
getAccount.setHeader("X-Auth-Token", app.getToken()); |
|
195 |
Scheduler.get().scheduleDeferred(getAccount); |
|
207 | 196 |
} |
208 | 197 |
|
209 | 198 |
@Override |
... | ... | |
223 | 212 |
$wnd.console.log(msg); |
224 | 213 |
}-*/; |
225 | 214 |
|
226 |
protected void fetchFolder(final Iterator<Folder> iter, final ListDataProvider<Folder> dataProvider, final Command callback) {
|
|
215 |
protected void fetchFolder(final Iterator<Folder> iter, final Command callback) { |
|
227 | 216 |
if (iter.hasNext()) { |
228 | 217 |
final Folder f = iter.next(); |
229 | 218 |
|
230 |
String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); |
|
219 |
String path = "/" + f.getContainer() + "?format=json&shared=&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
|
|
231 | 220 |
GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) { |
232 | 221 |
@Override |
233 | 222 |
public void onSuccess(Folder _result) { |
234 |
if (!_result.isShared()) { |
|
235 |
for (File file : _result.getFiles()) { |
|
236 |
if (file.isSharedOrPublished()) |
|
237 |
sharedFiles.add(file); |
|
238 |
} |
|
239 |
Iterator<Folder> iter2 = new ArrayList<Folder>(result.getSubfolders()).listIterator(); |
|
240 |
fetchFolder(iter2, dataProvider, new Command() { |
|
241 |
|
|
242 |
@Override |
|
243 |
public void execute() { |
|
244 |
fetchFolder(iter, dataProvider, callback); |
|
245 |
} |
|
246 |
}); |
|
247 |
} |
|
248 |
else { |
|
249 |
dataProvider.getList().add(_result); |
|
250 |
fetchFolder(iter, dataProvider, callback); |
|
251 |
} |
|
223 |
fetchFolder(iter, callback); |
|
252 | 224 |
} |
253 | 225 |
|
254 | 226 |
@Override |
... | ... | |
286 | 258 |
} |
287 | 259 |
|
288 | 260 |
public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles) { |
289 |
String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); |
|
261 |
String path = "/" + f.getContainer() + "?format=json&shared=&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
|
|
290 | 262 |
GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) { |
291 | 263 |
@Override |
292 | 264 |
public void onSuccess(final Folder _result) { |
293 | 265 |
if (showfiles) |
294 | 266 |
app.showFiles(_result); |
295 |
Iterator<Folder> iter = _result.getSubfolders().iterator();
|
|
296 |
fetchFolder(iter, dataProvider, new Command() {
|
|
267 |
Iterator<Folder> iter = new ArrayList<Folder>(_result.getSubfolders()).listIterator();
|
|
268 |
fetchFolder(iter, new Command() { |
|
297 | 269 |
@Override |
298 | 270 |
public void execute() { |
299 | 271 |
dataProvider.getList().clear(); |
Also available in: Unified diff