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