root / web_client / src / gr / grnet / pithos / web / client / CellTreeViewModel.java @ fbff60ff
History | View | Annotate | Download (29.2 kB)
1 |
/*
|
---|---|
2 |
* Copyright (c) 2011 Greek Research and Technology Network
|
3 |
*/
|
4 |
package gr.grnet.pithos.web.client; |
5 |
|
6 |
import static com.google.gwt.query.client.GQuery.$; |
7 |
import gr.grnet.pithos.web.client.CellTreeView.Images; |
8 |
import gr.grnet.pithos.web.client.CellTreeView.RefreshHandler; |
9 |
import gr.grnet.pithos.web.client.rest.GetCommand; |
10 |
import gr.grnet.pithos.web.client.rest.MultipleGetCommand; |
11 |
import gr.grnet.pithos.web.client.rest.RestException; |
12 |
import gr.grnet.pithos.web.client.rest.resource.FileResource; |
13 |
import gr.grnet.pithos.web.client.rest.resource.FolderResource; |
14 |
import gr.grnet.pithos.web.client.rest.resource.MyFolderResource; |
15 |
import gr.grnet.pithos.web.client.rest.resource.OtherUserResource; |
16 |
import gr.grnet.pithos.web.client.rest.resource.OthersFolderResource; |
17 |
import gr.grnet.pithos.web.client.rest.resource.OthersResource; |
18 |
import gr.grnet.pithos.web.client.rest.resource.RestResource; |
19 |
import gr.grnet.pithos.web.client.rest.resource.RestResourceWrapper; |
20 |
import gr.grnet.pithos.web.client.rest.resource.SharedFolderResource; |
21 |
import gr.grnet.pithos.web.client.rest.resource.SharedResource; |
22 |
import gr.grnet.pithos.web.client.rest.resource.TrashFolderResource; |
23 |
import gr.grnet.pithos.web.client.rest.resource.TrashResource; |
24 |
import gwtquery.plugins.draggable.client.DragAndDropManager; |
25 |
import gwtquery.plugins.draggable.client.DraggableOptions; |
26 |
import gwtquery.plugins.draggable.client.StopDragException; |
27 |
import gwtquery.plugins.draggable.client.DraggableOptions.CursorAt; |
28 |
import gwtquery.plugins.draggable.client.DraggableOptions.DragFunction; |
29 |
import gwtquery.plugins.draggable.client.DraggableOptions.RevertOption; |
30 |
import gwtquery.plugins.draggable.client.events.DragContext; |
31 |
import gwtquery.plugins.droppable.client.DroppableOptions; |
32 |
import gwtquery.plugins.droppable.client.DroppableOptions.DroppableFunction; |
33 |
import gwtquery.plugins.droppable.client.events.DragAndDropContext; |
34 |
import gwtquery.plugins.droppable.client.gwt.DragAndDropNodeInfo; |
35 |
|
36 |
import java.util.ArrayList; |
37 |
import java.util.Arrays; |
38 |
import java.util.HashMap; |
39 |
import java.util.List; |
40 |
import java.util.Map; |
41 |
|
42 |
import com.google.gwt.cell.client.AbstractCell; |
43 |
import com.google.gwt.cell.client.Cell; |
44 |
import com.google.gwt.cell.client.ValueUpdater; |
45 |
import com.google.gwt.core.client.GWT; |
46 |
import com.google.gwt.dom.client.Style.Cursor; |
47 |
import com.google.gwt.safehtml.client.SafeHtmlTemplates; |
48 |
import com.google.gwt.safehtml.shared.SafeHtml; |
49 |
import com.google.gwt.safehtml.shared.SafeHtmlBuilder; |
50 |
import com.google.gwt.user.client.DeferredCommand; |
51 |
import com.google.gwt.user.client.ui.AbstractImagePrototype; |
52 |
import com.google.gwt.view.client.AsyncDataProvider; |
53 |
import com.google.gwt.view.client.HasData; |
54 |
import com.google.gwt.view.client.ListDataProvider; |
55 |
import com.google.gwt.view.client.ProvidesKey; |
56 |
import com.google.gwt.view.client.SingleSelectionModel; |
57 |
import com.google.gwt.view.client.TreeViewModel; |
58 |
|
59 |
|
60 |
|
61 |
public class CellTreeViewModel implements TreeViewModel{ |
62 |
|
63 |
private final ListDataProvider<RestResource> rootNodes = new ListDataProvider<RestResource>(); |
64 |
private Map<String,FolderResource> folderCache=new HashMap<String, FolderResource>(); |
65 |
final Images images;
|
66 |
SingleSelectionModel<RestResource> selectionModel;
|
67 |
Map<String, MyFolderDataProvider> mymap = new HashMap<String, MyFolderDataProvider>(); |
68 |
Map<String, MyFolderDataProvider> sharedmap = new HashMap<String, MyFolderDataProvider>(); |
69 |
Map<String, MyFolderDataProvider> othersmap = new HashMap<String, MyFolderDataProvider>(); |
70 |
static interface Templates extends SafeHtmlTemplates { |
71 |
Templates INSTANCE = GWT.create(Templates.class); |
72 |
|
73 |
@Template(" <div id='dragHelper' class='{0}'></div>") |
74 |
SafeHtml outerHelper(String cssClassName);
|
75 |
} |
76 |
|
77 |
void configureDragOperation(final DraggableOptions options) { |
78 |
|
79 |
// set a custom element as drag helper. The content of the helper will be
|
80 |
// set when the drag will start
|
81 |
options.setHelper($(Templates.INSTANCE.outerHelper( |
82 |
"drag").asString()));
|
83 |
// opacity of the drag helper
|
84 |
options.setOpacity((float) 0.9); |
85 |
// cursor during the drag operation
|
86 |
options.setCursor(Cursor.MOVE);
|
87 |
// the cell being greater than the helper, force the position of the
|
88 |
// helper on the mouse cursor.
|
89 |
options.setCursorAt(new CursorAt(10, 10, null, null)); |
90 |
// append the helper to the body element
|
91 |
options.setAppendTo("body");
|
92 |
options.setCancel("select");
|
93 |
// set the revert option
|
94 |
options.setRevert(RevertOption.ON_INVALID_DROP); |
95 |
|
96 |
options.setOnBeforeDragStart(new DragFunction() {
|
97 |
|
98 |
@Override
|
99 |
public void f(DragContext context) { |
100 |
RestResource value = context.getDraggableData(); |
101 |
if(!CellTreeViewModel.this.selectionModel.isSelected(value)){
|
102 |
throw new StopDragException(); |
103 |
} |
104 |
if(value instanceof TrashResource || value instanceof SharedResource || value instanceof OthersResource || value instanceof OtherUserResource){ |
105 |
throw new StopDragException(); |
106 |
} |
107 |
|
108 |
} |
109 |
}); |
110 |
// use a Function to fill the content of the helper
|
111 |
// we could also add a DragStartEventHandler on the DragAndDropTreeCell and
|
112 |
// DragAndDropCellList.
|
113 |
|
114 |
options.setOnDragStart(new DragFunction() {
|
115 |
public void f(DragContext context) { |
116 |
RestResourceWrapper memberInfo = context.getDraggableData(); |
117 |
context.getHelper().setInnerHTML(memberInfo.getName()); |
118 |
} |
119 |
}); |
120 |
|
121 |
} |
122 |
|
123 |
/**
|
124 |
*
|
125 |
*/
|
126 |
public CellTreeViewModel(final Images _images,SingleSelectionModel<RestResource> selectionModel ) { |
127 |
super();
|
128 |
images=_images; |
129 |
this.selectionModel=selectionModel;
|
130 |
} |
131 |
|
132 |
private final Cell<RestResource> departmentCell = new AbstractCell<RestResource>("contextmenu"){ |
133 |
|
134 |
@Override
|
135 |
public void render(com.google.gwt.cell.client.Cell.Context arg0, RestResource arg1, SafeHtmlBuilder arg2) { |
136 |
String id = null; |
137 |
String html = null; |
138 |
String name = null; |
139 |
if(arg1 instanceof TrashFolderResource){ |
140 |
html = AbstractImagePrototype.create(images.folderYellow()).getHTML(); |
141 |
FolderResource res = ((RestResourceWrapper)arg1).getResource(); |
142 |
name = res.getName(); |
143 |
id = res.getParentName() +"."+name;
|
144 |
} |
145 |
else if(arg1 instanceof RestResourceWrapper){ |
146 |
FolderResource res = ((RestResourceWrapper)arg1).getResource(); |
147 |
if(res.isShared())
|
148 |
html = AbstractImagePrototype.create(images.sharedFolder()).getHTML(); |
149 |
else if(res.getParentName()==null){ |
150 |
html = AbstractImagePrototype.create(images.home()).getHTML(); |
151 |
} |
152 |
else
|
153 |
html = AbstractImagePrototype.create(images.folderYellow()).getHTML(); |
154 |
name = res.getName(); |
155 |
if(res.getParentName() != null){ |
156 |
id = res.getParentName()+"."+name;
|
157 |
}else{
|
158 |
id = name; |
159 |
} |
160 |
|
161 |
} |
162 |
else if(arg1 instanceof TrashResource){ |
163 |
html = AbstractImagePrototype.create(images.trash()).getHTML(); |
164 |
name="Trash";
|
165 |
id = name; |
166 |
} |
167 |
|
168 |
else if(arg1 instanceof SharedResource){ |
169 |
html = AbstractImagePrototype.create(images.myShared()).getHTML(); |
170 |
name = "My Shared";
|
171 |
id = name; |
172 |
} |
173 |
else if(arg1 instanceof OthersResource){ |
174 |
html = AbstractImagePrototype.create(images.othersShared()).getHTML(); |
175 |
name = "Other's Shared";
|
176 |
id = "others";
|
177 |
} |
178 |
else if(arg1 instanceof OtherUserResource){ |
179 |
html = AbstractImagePrototype.create(images.permUser()).getHTML(); |
180 |
name = ((OtherUserResource)arg1).getName(); |
181 |
id = name; |
182 |
} |
183 |
arg2.appendHtmlConstant(html); |
184 |
arg2.append(FileList.Templates.INSTANCE.spanWithIdAndClass(id, "papala", name));
|
185 |
} |
186 |
|
187 |
public void onBrowserEvent(Cell.Context context, com.google.gwt.dom.client.Element parent, RestResource value, com.google.gwt.dom.client.NativeEvent event, com.google.gwt.cell.client.ValueUpdater<RestResource> valueUpdater) { |
188 |
if(event.getType().equals("contextmenu")){ |
189 |
selectionModel.setSelected(value, true);
|
190 |
GSS.get().setCurrentSelection(value); |
191 |
GSS.get().getTreeView().showPopup(event.getClientX(), event.getClientY()); |
192 |
} |
193 |
}; |
194 |
|
195 |
}; |
196 |
|
197 |
|
198 |
@Override
|
199 |
public <T> NodeInfo<?> getNodeInfo(final T value) { |
200 |
|
201 |
if(value==null){ |
202 |
DragAndDropNodeInfo n = new DragAndDropNodeInfo<RestResource>(getRootNodes(), departmentCell,
|
203 |
selectionModel, null);
|
204 |
configureFolderDrop(n); |
205 |
configureDragOperation(n.getDraggableOptions()); |
206 |
return n;
|
207 |
} |
208 |
else if (value instanceof MyFolderResource) { |
209 |
// Second level.
|
210 |
MyFolderDataProvider dataProvider = new MyFolderDataProvider(
|
211 |
((MyFolderResource) value),MyFolderResource.class); |
212 |
DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
|
213 |
selectionModel, new ResourceValueUpdater());
|
214 |
mymap.put(((MyFolderResource) value).getUri(), dataProvider); |
215 |
|
216 |
// permission cell are not draggable
|
217 |
//n.setCellDroppableOnly();
|
218 |
configureFolderDrop(n); |
219 |
configureDragOperation(n.getDraggableOptions()); |
220 |
|
221 |
return n;
|
222 |
} |
223 |
else if (value instanceof SharedResource) { |
224 |
// Second level.
|
225 |
MyFolderDataProvider dataProvider = new MyFolderDataProvider(
|
226 |
((SharedResource) value), SharedFolderResource.class); |
227 |
sharedmap.put(((SharedResource) value).getUri(), dataProvider); |
228 |
DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
|
229 |
selectionModel, new ResourceValueUpdater());
|
230 |
configureFolderDrop(n); |
231 |
configureDragOperation(n.getDraggableOptions()); |
232 |
return n;
|
233 |
} |
234 |
else if (value instanceof TrashResource) { |
235 |
// Second level.
|
236 |
ListDataProvider<RestResource> trashProvider = new ListDataProvider<RestResource>();
|
237 |
List<RestResource> r = new ArrayList<RestResource>(); |
238 |
for(FolderResource f : GSS.get().getTreeView().getTrash().getFolders()){
|
239 |
r.add(new TrashFolderResource(f));
|
240 |
} |
241 |
trashProvider.setList(r); |
242 |
DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(trashProvider, departmentCell,
|
243 |
selectionModel, new ResourceValueUpdater());
|
244 |
configureFolderDrop(n); |
245 |
configureDragOperation(n.getDraggableOptions()); |
246 |
return n;
|
247 |
} |
248 |
else if (value instanceof OthersResource) { |
249 |
// Second level.
|
250 |
OthersDataProvider dataProvider = new OthersDataProvider(
|
251 |
((OthersResource) value), SharedFolderResource.class); |
252 |
DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
|
253 |
selectionModel, null);
|
254 |
configureFolderDrop(n); |
255 |
configureDragOperation(n.getDraggableOptions()); |
256 |
return n;
|
257 |
} |
258 |
else if (value instanceof SharedFolderResource) { |
259 |
// Second level.
|
260 |
MyFolderDataProvider dataProvider = new MyFolderDataProvider(
|
261 |
((SharedFolderResource) value),SharedFolderResource.class); |
262 |
DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
|
263 |
selectionModel, new ResourceValueUpdater());
|
264 |
sharedmap.put(((SharedFolderResource) value).getUri(), dataProvider); |
265 |
configureFolderDrop(n); |
266 |
configureDragOperation(n.getDraggableOptions()); |
267 |
return n;
|
268 |
} |
269 |
else if (value instanceof OthersFolderResource) { |
270 |
// Second level.
|
271 |
MyFolderDataProvider dataProvider = new MyFolderDataProvider(
|
272 |
((OthersFolderResource) value),OthersFolderResource.class); |
273 |
DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
|
274 |
selectionModel, new ResourceValueUpdater());
|
275 |
//nodeInfos.put(((OthersFolderResource) value).getUri(), n);
|
276 |
othersmap.put(((OthersFolderResource) value).getUri(), dataProvider); |
277 |
configureFolderDrop(n); |
278 |
configureDragOperation(n.getDraggableOptions()); |
279 |
return n;
|
280 |
} |
281 |
else if (value instanceof OtherUserResource) { |
282 |
// Second level.
|
283 |
MyFolderDataProvider dataProvider = new MyFolderDataProvider(
|
284 |
((OtherUserResource) value),OthersFolderResource.class); |
285 |
DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
|
286 |
selectionModel, new ResourceValueUpdater());
|
287 |
configureFolderDrop(n); |
288 |
configureDragOperation(n.getDraggableOptions()); |
289 |
return n;
|
290 |
} |
291 |
// TODO Auto-generated method stub
|
292 |
return null; |
293 |
} |
294 |
|
295 |
private void configureFolderDrop(DragAndDropNodeInfo<RestResource> n){ |
296 |
DroppableOptions options = n.getDroppableOptions(); |
297 |
options.setDroppableHoverClass("droppableHover");
|
298 |
// use a DroppableFunction here. We can also add a DropHandler in the tree
|
299 |
// itself
|
300 |
options.setOnOver(new DroppableFunction() {
|
301 |
|
302 |
@Override
|
303 |
public void f(final DragAndDropContext context) { |
304 |
if(context.getDroppableData()!=null && context.getDroppableData() instanceof RestResource){ |
305 |
|
306 |
GSS.get().getTreeView().getUtils().openNodeContainingResource((RestResource) context.getDroppableData(), new RefreshHandler() {
|
307 |
|
308 |
@Override
|
309 |
public void onRefresh() { |
310 |
|
311 |
DragAndDropManager.getInstance().update(context);//initialize(context, GQueryUi.Event.create(com.google.gwt.user.client.Event.getCurrentEvent()));
|
312 |
|
313 |
} |
314 |
}); |
315 |
|
316 |
} |
317 |
} |
318 |
}); |
319 |
options.setOnDrop(new DroppableFunction() {
|
320 |
|
321 |
public void f(DragAndDropContext context) { |
322 |
|
323 |
DnDFolderPopupMenu popup ; |
324 |
if(context.getDraggableData() instanceof FileResource){ |
325 |
// if(context.getDroppableData() instanceof RestResourceWrapper)
|
326 |
// popup = new DnDFolderPopupMenu(images, ((RestResourceWrapper) context.getDroppableData()).getResource(), Arrays.asList(context.getDraggableData()));
|
327 |
// else
|
328 |
// popup = new DnDFolderPopupMenu(images, null, Arrays.asList(context.getDraggableData()));
|
329 |
} |
330 |
|
331 |
else{
|
332 |
// if(context.getDroppableData() instanceof RestResourceWrapper)
|
333 |
// popup = new DnDFolderPopupMenu(images, ((RestResourceWrapper) context.getDroppableData()).getResource(), context.getDraggableData());
|
334 |
// else
|
335 |
// popup = new DnDFolderPopupMenu(images, null, context.getDraggableData());
|
336 |
} |
337 |
|
338 |
int left = context.getDroppable().getAbsoluteLeft() + 40; |
339 |
int top = context.getDroppable().getAbsoluteTop() + 20; |
340 |
// popup.setPopupPosition(left, top);
|
341 |
|
342 |
// popup.show();
|
343 |
} |
344 |
}); |
345 |
} |
346 |
|
347 |
@Override
|
348 |
public boolean isLeaf(Object value) { |
349 |
if(value instanceof RestResourceWrapper) |
350 |
return ((RestResourceWrapper)value).getResource().getFolders().size()==0; |
351 |
else if(value instanceof TrashResource) |
352 |
return ((TrashResource)value).getFolders().size()==0; |
353 |
else if(value instanceof SharedResource) |
354 |
return ((SharedResource)value).getFolders().size()==0; |
355 |
else if(value instanceof OthersResource) |
356 |
return ((OthersResource)value).getOtherUsers().size()==0; |
357 |
else if(value instanceof OtherUserResource) |
358 |
return ((OtherUserResource)value).getFolders().size()==0; |
359 |
return false; |
360 |
} |
361 |
|
362 |
/**
|
363 |
* Retrieve the selectionModel.
|
364 |
*
|
365 |
* @return the selectionModel
|
366 |
*/
|
367 |
public SingleSelectionModel<RestResource> getSelectionModel() { |
368 |
return selectionModel;
|
369 |
} |
370 |
static interface ClearSelection{ |
371 |
public void setClearSelection(boolean clearSelection); |
372 |
} |
373 |
class ResourceValueUpdater implements ValueUpdater<RestResource>,ClearSelection{ |
374 |
boolean clearSelection=true; |
375 |
|
376 |
|
377 |
/**
|
378 |
* Modify the clearSelection.
|
379 |
*
|
380 |
* @param clearSelection the clearSelection to set
|
381 |
*/
|
382 |
public void setClearSelection(boolean clearSelection) { |
383 |
this.clearSelection = clearSelection;
|
384 |
} |
385 |
@Override
|
386 |
public void update(final RestResource value) { |
387 |
if(value instanceof MyFolderResource){ |
388 |
GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, value.getUri(), null) { |
389 |
|
390 |
@Override
|
391 |
public void onComplete() { |
392 |
FolderResource rootResource = getResult(); |
393 |
//((MyFolderResource)value).getResource().setFiles(rootResource.getFiles());
|
394 |
((MyFolderResource)value).setResource(rootResource); |
395 |
if(GSS.get().getTreeView().getSelection().getUri().equals(value.getUri()))
|
396 |
selectionModel.setSelected(value, true);
|
397 |
GSS.get().onResourceUpdate(value,clearSelection); |
398 |
|
399 |
} |
400 |
|
401 |
@Override
|
402 |
public void onError(Throwable t) { |
403 |
GWT.log("Error fetching root folder", t);
|
404 |
GSS.get().displayError("Unable to fetch root folder");
|
405 |
} |
406 |
|
407 |
}; |
408 |
DeferredCommand.addCommand(gf); |
409 |
} |
410 |
else if(value instanceof TrashResource){ |
411 |
DeferredCommand.addCommand(new GetCommand<TrashResource>(TrashResource.class, GSS.get().getCurrentUserResource().getTrashPath(), null) { |
412 |
@Override
|
413 |
public void onComplete() { |
414 |
//trash = getResult();
|
415 |
((TrashResource)value).setFolders(getResult().getFolders()); |
416 |
((TrashResource)value).setFiles(getResult().getFiles()); |
417 |
for(RestResource r : getRootNodes().getList()){
|
418 |
if(r instanceof TrashResource) |
419 |
getRootNodes().getList().set(getRootNodes().getList().indexOf(r),GSS.get().getTreeView().getTrash()); |
420 |
} |
421 |
GSS.get().getTreeView().updateNodeChildren(GSS.get().getTreeView().getTrash()); |
422 |
//GSS.get().showFileList(true);
|
423 |
GSS.get().onResourceUpdate(value,clearSelection); |
424 |
} |
425 |
|
426 |
@Override
|
427 |
public void onError(Throwable t) { |
428 |
if(t instanceof RestException){ |
429 |
int statusCode = ((RestException)t).getHttpStatusCode();
|
430 |
// On IE status code 1223 may be returned instead of 204.
|
431 |
if(statusCode == 204 || statusCode == 1223){ |
432 |
((TrashResource)value).setFolders(new ArrayList<FolderResource>()); |
433 |
((TrashResource)value).setFiles(new ArrayList<FileResource>()); |
434 |
} |
435 |
else{
|
436 |
GWT.log("", t);
|
437 |
GSS.get().displayError("Unable to fetch trash folder:"+t.getMessage());
|
438 |
//GSS.get().getTreeView().getTrash() = new TrashResource(GSS.get().getCurrentUserResource().getTrashPath());
|
439 |
} |
440 |
} |
441 |
} |
442 |
}); |
443 |
} |
444 |
else if(value instanceof OthersFolderResource){ |
445 |
GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, value.getUri(), null) { |
446 |
|
447 |
@Override
|
448 |
public void onComplete() { |
449 |
FolderResource rootResource = getResult(); |
450 |
//((MyFolderResource)value).getResource().setFiles(rootResource.getFiles());
|
451 |
((OthersFolderResource)value).setResource(rootResource); |
452 |
if(GSS.get().getTreeView().getSelection().getUri().equals(value.getUri()))
|
453 |
selectionModel.setSelected(value, true);
|
454 |
GSS.get().onResourceUpdate(value,clearSelection); |
455 |
|
456 |
} |
457 |
|
458 |
@Override
|
459 |
public void onError(Throwable t) { |
460 |
GWT.log("Error fetching root folder", t);
|
461 |
GSS.get().displayError("Unable to fetch root folder");
|
462 |
} |
463 |
|
464 |
}; |
465 |
DeferredCommand.addCommand(gf); |
466 |
} |
467 |
else if(value instanceof SharedFolderResource){ |
468 |
GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, value.getUri(), null) { |
469 |
|
470 |
@Override
|
471 |
public void onComplete() { |
472 |
FolderResource rootResource = getResult(); |
473 |
//((MyFolderResource)value).getResource().setFiles(rootResource.getFiles());
|
474 |
((SharedFolderResource)value).setResource(rootResource); |
475 |
if(GSS.get().getTreeView().getSelection().getUri().equals(value.getUri()))
|
476 |
selectionModel.setSelected(value, true);
|
477 |
GSS.get().onResourceUpdate(value,clearSelection); |
478 |
|
479 |
} |
480 |
|
481 |
@Override
|
482 |
public void onError(Throwable t) { |
483 |
GWT.log("Error fetching root folder", t);
|
484 |
GSS.get().displayError("Unable to fetch root folder");
|
485 |
} |
486 |
|
487 |
}; |
488 |
DeferredCommand.addCommand(gf); |
489 |
} |
490 |
else if(value instanceof SharedResource){ |
491 |
GetCommand<SharedResource> gf = new GetCommand<SharedResource>(SharedResource.class, value.getUri(), null) { |
492 |
|
493 |
@Override
|
494 |
public void onComplete() { |
495 |
SharedResource rootResource = getResult(); |
496 |
((SharedResource)value).setFolders(getResult().getFolders()); |
497 |
((SharedResource)value).setFiles(getResult().getFiles()); |
498 |
|
499 |
if(GSS.get().getTreeView().getSelection().getUri().equals(value.getUri()))
|
500 |
selectionModel.setSelected(value, true);
|
501 |
GSS.get().onResourceUpdate(value,clearSelection); |
502 |
|
503 |
} |
504 |
|
505 |
@Override
|
506 |
public void onError(Throwable t) { |
507 |
GWT.log("Error fetching root folder", t);
|
508 |
GSS.get().displayError("Unable to fetch root folder");
|
509 |
} |
510 |
|
511 |
}; |
512 |
DeferredCommand.addCommand(gf); |
513 |
} |
514 |
else if(value instanceof OtherUserResource){ |
515 |
GetCommand<OtherUserResource> gf = new GetCommand<OtherUserResource>(OtherUserResource.class, value.getUri(), null) { |
516 |
|
517 |
@Override
|
518 |
public void onComplete() { |
519 |
OtherUserResource rootResource = getResult(); |
520 |
((OtherUserResource)value).setFolders(getResult().getFolders()); |
521 |
((OtherUserResource)value).setFiles(getResult().getFiles()); |
522 |
|
523 |
if(GSS.get().getTreeView().getSelection().getUri().equals(value.getUri()))
|
524 |
selectionModel.setSelected(value, true);
|
525 |
GSS.get().onResourceUpdate(value,clearSelection); |
526 |
|
527 |
} |
528 |
|
529 |
@Override
|
530 |
public void onError(Throwable t) { |
531 |
GWT.log("Error fetching root folder", t);
|
532 |
GSS.get().displayError("Unable to fetch root folder");
|
533 |
} |
534 |
|
535 |
}; |
536 |
DeferredCommand.addCommand(gf); |
537 |
} |
538 |
|
539 |
} |
540 |
|
541 |
} |
542 |
class MyFolderDataProvider extends AsyncDataProvider<RestResource>{ |
543 |
private RestResource restResource;
|
544 |
private Class resourceClass; |
545 |
public MyFolderDataProvider(RestResource department, Class resourceClass) { |
546 |
super(new ProvidesKey<RestResource>() { |
547 |
|
548 |
@Override
|
549 |
public Object getKey(RestResource item) { |
550 |
return item.getUri();
|
551 |
}}); |
552 |
this.restResource = department;
|
553 |
this.resourceClass=resourceClass;
|
554 |
} |
555 |
|
556 |
@Override
|
557 |
protected void onRangeChanged(final HasData<RestResource> view) { |
558 |
refresh(null);
|
559 |
} |
560 |
|
561 |
/**
|
562 |
* Retrieve the restResource.
|
563 |
*
|
564 |
* @return the restResource
|
565 |
*/
|
566 |
public RestResource getRestResource() {
|
567 |
return restResource;
|
568 |
} |
569 |
|
570 |
|
571 |
/**
|
572 |
* Modify the restResource.
|
573 |
*
|
574 |
* @param restResource the restResource to set
|
575 |
*/
|
576 |
public void setRestResource(RestResource restResource) { |
577 |
this.restResource = restResource;
|
578 |
} |
579 |
List<RestResource> res =null; |
580 |
public void refresh(final RefreshHandler refresh){ |
581 |
FolderResource cache = null;
|
582 |
if(restResource instanceof RestResourceWrapper && !((RestResourceWrapper)restResource).getResource().isNeedsExpanding()) |
583 |
cache = ((RestResourceWrapper)restResource).getResource(); |
584 |
GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, restResource.getUri(),cache ) {
|
585 |
|
586 |
@Override
|
587 |
public void onComplete() { |
588 |
if(restResource instanceof RestResourceWrapper){ |
589 |
((RestResourceWrapper)restResource).setResource(getResult());//restResource = getResult();
|
590 |
((RestResourceWrapper)restResource).getResource().setNeedsExpanding(false);
|
591 |
} |
592 |
if(usedCachedVersion()&&res!=null){ |
593 |
|
594 |
updateRowCount(res.size(), true);
|
595 |
updateRowData(0,res);
|
596 |
return;
|
597 |
} |
598 |
String[] folderPaths = null; |
599 |
if(resourceClass.equals(MyFolderResource.class))
|
600 |
folderPaths=((MyFolderResource) restResource).getResource().getSubfolderPaths().toArray(new String[] {}); |
601 |
else if(resourceClass.equals(SharedFolderResource.class) && restResource instanceof SharedResource) |
602 |
folderPaths=((SharedResource) restResource).getSubfolderPaths().toArray(new String[] {}); |
603 |
else if(resourceClass.equals(SharedFolderResource.class)){ |
604 |
folderPaths=((SharedFolderResource) restResource).getResource().getSubfolderPaths().toArray(new String[] {}); |
605 |
GWT.log("------------>"+folderPaths);
|
606 |
} |
607 |
else if(resourceClass.equals(TrashFolderResource.class)) |
608 |
folderPaths=((TrashFolderResource) restResource).getResource().getSubfolderPaths().toArray(new String[] {}); |
609 |
else if(resourceClass.equals(OthersFolderResource.class) && restResource instanceof OtherUserResource) |
610 |
folderPaths=((OtherUserResource) restResource).getSubfolderPaths().toArray(new String[] {}); |
611 |
else if(resourceClass.equals(OthersFolderResource.class)) |
612 |
folderPaths=((OthersFolderResource) restResource).getResource().getSubfolderPaths().toArray(new String[] {}); |
613 |
MultipleGetCommand.Cached[] cached = null; |
614 |
if(restResource instanceof RestResourceWrapper) |
615 |
cached=((RestResourceWrapper)restResource).getResource().getCache(); |
616 |
MultipleGetCommand<FolderResource> gf2 = new MultipleGetCommand<FolderResource>(FolderResource.class,
|
617 |
folderPaths, cached) { |
618 |
|
619 |
@Override
|
620 |
public void onComplete() { |
621 |
res = new ArrayList<RestResource>(); |
622 |
for(FolderResource r : getResult()){
|
623 |
if(r.isDeleted()){
|
624 |
|
625 |
} |
626 |
else if(resourceClass.equals(MyFolderResource.class)) |
627 |
res.add(new MyFolderResource(r));
|
628 |
else if(resourceClass.equals(SharedFolderResource.class)){ |
629 |
res.add(new SharedFolderResource(r));
|
630 |
} |
631 |
else if(resourceClass.equals(TrashFolderResource.class)) |
632 |
res.add(new TrashFolderResource(r));
|
633 |
else if(resourceClass.equals(OthersFolderResource.class)) |
634 |
res.add(new OthersFolderResource(r));
|
635 |
} |
636 |
if(restResource instanceof RestResourceWrapper) |
637 |
((RestResourceWrapper)restResource).getResource().setFolders(getResult()); |
638 |
updateRowCount(res.size(), true);
|
639 |
updateRowData(0,res);
|
640 |
if(refresh!=null) |
641 |
refresh.onRefresh(); |
642 |
} |
643 |
|
644 |
@Override
|
645 |
public void onError(Throwable t) { |
646 |
GSS.get().displayError("Unable to fetch subfolders");
|
647 |
GWT.log("Unable to fetch subfolders", t);
|
648 |
} |
649 |
|
650 |
@Override
|
651 |
public void onError(String p, Throwable throwable) { |
652 |
GWT.log("Path:"+p, throwable);
|
653 |
} |
654 |
|
655 |
}; |
656 |
DeferredCommand.addCommand(gf2); |
657 |
|
658 |
} |
659 |
|
660 |
@Override
|
661 |
public void onError(Throwable t) { |
662 |
|
663 |
GWT.log("Error fetching root folder", t);
|
664 |
GSS.get().displayError("Unable to fetch root folder");
|
665 |
} |
666 |
|
667 |
}; |
668 |
DeferredCommand.addCommand(gf); |
669 |
} |
670 |
} |
671 |
|
672 |
|
673 |
class OthersDataProvider extends AsyncDataProvider<RestResource>{ |
674 |
private RestResource restResource;
|
675 |
private Class resourceClass; |
676 |
public OthersDataProvider(RestResource department, Class resourceClass) { |
677 |
super(new ProvidesKey<RestResource>() { |
678 |
|
679 |
@Override
|
680 |
public Object getKey(RestResource item) { |
681 |
return item.getUri();
|
682 |
}}); |
683 |
this.restResource = department;
|
684 |
this.resourceClass=resourceClass;
|
685 |
} |
686 |
|
687 |
@Override
|
688 |
protected void onRangeChanged(final HasData<RestResource> view) { |
689 |
refresh(null);
|
690 |
} |
691 |
|
692 |
/**
|
693 |
* Retrieve the restResource.
|
694 |
*
|
695 |
* @return the restResource
|
696 |
*/
|
697 |
public RestResource getRestResource() {
|
698 |
return restResource;
|
699 |
} |
700 |
|
701 |
|
702 |
/**
|
703 |
* Modify the restResource.
|
704 |
*
|
705 |
* @param restResource the restResource to set
|
706 |
*/
|
707 |
public void setRestResource(RestResource restResource) { |
708 |
this.restResource = restResource;
|
709 |
} |
710 |
|
711 |
public void refresh(final RefreshHandler refresh){ |
712 |
GetCommand<OthersResource> go = new GetCommand<OthersResource>(OthersResource.class,
|
713 |
restResource.getUri(), null) {
|
714 |
|
715 |
@Override
|
716 |
public void onComplete() { |
717 |
final OthersResource others = getResult();
|
718 |
MultipleGetCommand<OtherUserResource> gogo = new MultipleGetCommand<OtherUserResource>(OtherUserResource.class,
|
719 |
others.getOthers().toArray(new String[] {}), null) { |
720 |
|
721 |
@Override
|
722 |
public void onComplete() { |
723 |
List<OtherUserResource> res = getResult();
|
724 |
updateRowCount(res.size(), true);
|
725 |
List<RestResource> r = new ArrayList<RestResource>(); |
726 |
r.addAll(res); |
727 |
updateRowData(0,r);
|
728 |
} |
729 |
|
730 |
@Override
|
731 |
public void onError(Throwable t) { |
732 |
GWT.log("Error fetching Others Root folder", t);
|
733 |
GSS.get().displayError("Unable to fetch Others Root folder");
|
734 |
} |
735 |
|
736 |
@Override
|
737 |
public void onError(String p, Throwable throwable) { |
738 |
GWT.log("Path:"+p, throwable);
|
739 |
} |
740 |
}; |
741 |
DeferredCommand.addCommand(gogo); |
742 |
} |
743 |
|
744 |
@Override
|
745 |
public void onError(Throwable t) { |
746 |
GWT.log("Error fetching Others Root folder", t);
|
747 |
GSS.get().displayError("Unable to fetch Others Root folder");
|
748 |
} |
749 |
}; |
750 |
DeferredCommand.addCommand(go); |
751 |
} |
752 |
} |
753 |
|
754 |
|
755 |
|
756 |
/**
|
757 |
* Retrieve the rootNodes.
|
758 |
*
|
759 |
* @return the rootNodes
|
760 |
*/
|
761 |
public ListDataProvider<RestResource> getRootNodes() {
|
762 |
return rootNodes;
|
763 |
} |
764 |
|
765 |
|
766 |
/**
|
767 |
* Retrieve the mymap.
|
768 |
*
|
769 |
* @return the mymap
|
770 |
*/
|
771 |
public Map<String, MyFolderDataProvider> getMymap() { |
772 |
return mymap;
|
773 |
} |
774 |
|
775 |
|
776 |
/**
|
777 |
* Retrieve the sharedmap.
|
778 |
*
|
779 |
* @return the sharedmap
|
780 |
*/
|
781 |
public Map<String, MyFolderDataProvider> getSharedmap() { |
782 |
return sharedmap;
|
783 |
} |
784 |
|
785 |
|
786 |
/**
|
787 |
* Retrieve the othersmap.
|
788 |
*
|
789 |
* @return the othersmap
|
790 |
*/
|
791 |
public Map<String, MyFolderDataProvider> getOthersmap() { |
792 |
return othersmap;
|
793 |
} |
794 |
|
795 |
|
796 |
|
797 |
|
798 |
|
799 |
|
800 |
} |