import gr.ebs.gss.client.rest.resource.SharedResource;
import gr.ebs.gss.client.rest.resource.TrashFolderResource;
import gr.ebs.gss.client.rest.resource.TrashResource;
+import gwtquery.plugins.draggable.client.DragAndDropManager;
import gwtquery.plugins.draggable.client.DraggableOptions;
+import gwtquery.plugins.draggable.client.StopDragException;
import gwtquery.plugins.draggable.client.DraggableOptions.CursorAt;
import gwtquery.plugins.draggable.client.DraggableOptions.DragFunction;
import gwtquery.plugins.draggable.client.DraggableOptions.RevertOption;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Cursor;
+import com.google.gwt.query.client.plugins.GQueryUi;
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.client.DeferredCommand;
+import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.view.client.AsyncDataProvider;
import com.google.gwt.view.client.HasData;
*
*/
public class CellTreeViewModel implements TreeViewModel{
+
private final ListDataProvider<RestResource> rootNodes = new ListDataProvider<RestResource>();
private Map<String,FolderResource> folderCache=new HashMap<String, FolderResource>();
final Images images;
SingleSelectionModel<RestResource> selectionModel;
Map<String, MyFolderDataProvider> mymap = new HashMap<String, MyFolderDataProvider>();
+ Map<String, MyFolderDataProvider> sharedmap = new HashMap<String, MyFolderDataProvider>();
+ Map<String, MyFolderDataProvider> othersmap = new HashMap<String, MyFolderDataProvider>();
static interface Templates extends SafeHtmlTemplates {
Templates INSTANCE = GWT.create(Templates.class);
SafeHtml outerHelper(String cssClassName);
}
- static void configureDragOperation(DraggableOptions options) {
+ static void configureDragOperation(final DraggableOptions options) {
// set a custom element as drag helper. The content of the helper will be
// set when the drag will start
options.setAppendTo("body");
// set the revert option
options.setRevert(RevertOption.ON_INVALID_DROP);
+ options.setOnBeforeDragStart(new DragFunction() {
+
+ @Override
+ public void f(DragContext context) {
+ RestResource value = context.getDraggableData();
+ if(value instanceof TrashResource || value instanceof SharedResource || value instanceof OthersResource || value instanceof OtherUserResource){
+ throw new StopDragException();
+ }
+
+ }
+ });
// use a Function to fill the content of the helper
// we could also add a DragStartEventHandler on the DragAndDropTreeCell and
// DragAndDropCellList.
+
options.setOnDragStart(new DragFunction() {
public void f(DragContext context) {
RestResourceWrapper memberInfo = context.getDraggableData();
@Override
public void render(com.google.gwt.cell.client.Cell.Context arg0, RestResource arg1, SafeHtmlBuilder arg2) {
- String html=null;
- String name=null;
+ String id = null;
+ String html = null;
+ String name = null;
if(arg1 instanceof TrashFolderResource){
html = AbstractImagePrototype.create(images.folderYellow()).getHTML();
FolderResource res = ((RestResourceWrapper)arg1).getResource();
- name=res.getName();
+ name = res.getName();
+ id = res.getParentName() +"."+name;
}
else if(arg1 instanceof RestResourceWrapper){
FolderResource res = ((RestResourceWrapper)arg1).getResource();
else
html = AbstractImagePrototype.create(images.folderYellow()).getHTML();
name = res.getName();
+ if(res.getParentName() != null){
+ id = res.getParentName()+"."+name;
+ }else{
+ id = name;
+ }
}
else if(arg1 instanceof TrashResource){
html = AbstractImagePrototype.create(images.trash()).getHTML();
name="Trash";
+ id = name;
}
else if(arg1 instanceof SharedResource){
html = AbstractImagePrototype.create(images.myShared()).getHTML();
- name="My Shared";
+ name = "My Shared";
+ id = name;
}
else if(arg1 instanceof OthersResource){
html = AbstractImagePrototype.create(images.othersShared()).getHTML();
name = "Other's Shared";
+ id = "others";
}
else if(arg1 instanceof OtherUserResource){
html = AbstractImagePrototype.create(images.permUser()).getHTML();
name = ((OtherUserResource)arg1).getName();
+ id = name;
}
arg2.appendHtmlConstant(html);
- arg2.appendHtmlConstant("<span class='papala'>");
+ arg2.appendHtmlConstant("<span id='"+id +"'"+ " class='papala'>");
arg2.appendEscaped(name);
arg2.appendHtmlConstant("</span>");
}
public <T> NodeInfo<?> getNodeInfo(final T value) {
if(value==null){
- return new DragAndDropNodeInfo<RestResource>(getRootNodes(), departmentCell,
+ DragAndDropNodeInfo n = new DragAndDropNodeInfo<RestResource>(getRootNodes(), departmentCell,
selectionModel, null);
+ configureFolderDrop(n);
+ configureDragOperation(n.getDraggableOptions());
+ return n;
}
else if (value instanceof MyFolderResource) {
// Second level.
((MyFolderResource) value),MyFolderResource.class);
DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
selectionModel, new ResourceValueUpdater());
- //nodeInfos.put(((MyFolderResource) value).getUri(), n);
mymap.put(((MyFolderResource) value).getUri(), dataProvider);
- DroppableOptions options = n.getDroppableOptions();
- options.setDroppableHoverClass("droppableHover");
- // use a DroppableFunction here. We can also add a DropHandler in the tree
- // itself
- options.setOnOver(new DroppableFunction() {
-
- @Override
- public void f(DragAndDropContext context) {
- GWT.log("-->OnActivate:"+context.getDroppableData());
- if(context.getDroppableData()!=null && context.getDroppableData() instanceof RestResource){
- GSS.get().getTreeView().openNodeContainingResource((RestResource) context.getDroppableData());
- }
-
- }
- });
- options.setOnDrop(new DroppableFunction() {
-
- public void f(DragAndDropContext context) {
-
- DnDFolderPopupMenu popup ;
- if(context.getDraggableData() instanceof FileResource){
- popup = new DnDFolderPopupMenu(images, ((MyFolderResource) context.getDroppableData()).getResource(), Arrays.asList(context.getDraggableData()));
- }
- else
- popup = new DnDFolderPopupMenu(images, ((MyFolderResource) context.getDroppableData()).getResource(), context.getDraggableData());
- int left = context.getDroppable().getAbsoluteLeft() + 40;
- int top = context.getDroppable().getAbsoluteTop() + 20;
- popup.setPopupPosition(left, top);
-
- popup.show();
- }
- });
+
// permission cell are not draggable
//n.setCellDroppableOnly();
+ configureFolderDrop(n);
configureDragOperation(n.getDraggableOptions());
+
return n;
}
else if (value instanceof SharedResource) {
// Second level.
MyFolderDataProvider dataProvider = new MyFolderDataProvider(
((SharedResource) value), SharedFolderResource.class);
- return new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
+ sharedmap.put(((SharedResource) value).getUri(), dataProvider);
+ DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
selectionModel, new ResourceValueUpdater());
+ configureFolderDrop(n);
+ configureDragOperation(n.getDraggableOptions());
+ return n;
}
else if (value instanceof TrashResource) {
// Second level.
r.add(new TrashFolderResource(f));
}
trashProvider.setList(r);
- return new DragAndDropNodeInfo<RestResource>(trashProvider, departmentCell,
+ DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(trashProvider, departmentCell,
selectionModel, new ResourceValueUpdater());
+ configureFolderDrop(n);
+ configureDragOperation(n.getDraggableOptions());
+ return n;
}
else if (value instanceof OthersResource) {
// Second level.
OthersDataProvider dataProvider = new OthersDataProvider(
((OthersResource) value), SharedFolderResource.class);
- return new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
+ DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
selectionModel, null);
+ configureFolderDrop(n);
+ configureDragOperation(n.getDraggableOptions());
+ return n;
}
else if (value instanceof SharedFolderResource) {
// Second level.
((SharedFolderResource) value),SharedFolderResource.class);
DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
selectionModel, new ResourceValueUpdater());
- //nodeInfos.put(((SharedFolderResource) value).getUri(), n);
- DroppableOptions options = n.getDroppableOptions();
- options.setDroppableHoverClass("droppableHover");
- // use a DroppableFunction here. We can also add a DropHandler in the tree
- // itself
- options.setOnDrop(new DroppableFunction() {
-
- public void f(DragAndDropContext context) {
- GWT.log("DROPPED");
-
- }
- });
- // permission cell are not draggable
- n.setCellDroppableOnly();
+ sharedmap.put(((SharedFolderResource) value).getUri(), dataProvider);
+ configureFolderDrop(n);
+ configureDragOperation(n.getDraggableOptions());
return n;
}
else if (value instanceof OthersFolderResource) {
DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
selectionModel, new ResourceValueUpdater());
//nodeInfos.put(((OthersFolderResource) value).getUri(), n);
- DroppableOptions options = n.getDroppableOptions();
- options.setDroppableHoverClass("droppableHover");
- // use a DroppableFunction here. We can also add a DropHandler in the tree
- // itself
- options.setOnDrop(new DroppableFunction() {
-
- public void f(DragAndDropContext context) {
- GWT.log("DROPPED");
-
- }
- });
- // permission cell are not draggable
- n.setCellDroppableOnly();
+ othersmap.put(((OthersFolderResource) value).getUri(), dataProvider);
+ configureFolderDrop(n);
+ configureDragOperation(n.getDraggableOptions());
return n;
}
else if (value instanceof OtherUserResource) {
((OtherUserResource) value),OthersFolderResource.class);
DragAndDropNodeInfo<RestResource> n = new DragAndDropNodeInfo<RestResource>(dataProvider, departmentCell,
selectionModel, new ResourceValueUpdater());
- //nodeInfos.put(((OtherUserResource) value).getUri(), n);
- DroppableOptions options = n.getDroppableOptions();
- options.setDroppableHoverClass("droppableHover");
- // use a DroppableFunction here. We can also add a DropHandler in the tree
- // itself
- options.setOnDrop(new DroppableFunction() {
-
- public void f(DragAndDropContext context) {
- GWT.log("DROPPED");
-
- }
- });
- // permission cell are not draggable
- n.setCellDroppableOnly();
+ configureFolderDrop(n);
+ configureDragOperation(n.getDraggableOptions());
return n;
}
// TODO Auto-generated method stub
return null;
}
+
+ private void configureFolderDrop(DragAndDropNodeInfo<RestResource> n){
+ DroppableOptions options = n.getDroppableOptions();
+ options.setDroppableHoverClass("droppableHover");
+ // use a DroppableFunction here. We can also add a DropHandler in the tree
+ // itself
+
+ options.setOnOver(new DroppableFunction() {
+
+ @Override
+ public void f(final DragAndDropContext context) {
+ if(context.getDroppableData()!=null && context.getDroppableData() instanceof RestResource){
+
+ GSS.get().getTreeView().getUtils().openNodeContainingResource((RestResource) context.getDroppableData(), new RefreshHandler() {
+
+ @Override
+ public void onRefresh() {
+
+ DragAndDropManager.getInstance().update(context);//initialize(context, GQueryUi.Event.create(com.google.gwt.user.client.Event.getCurrentEvent()));
+
+ }
+ });
+
+ }
+
+
+
+ }
+ });
+ options.setOnDrop(new DroppableFunction() {
+
+ public void f(DragAndDropContext context) {
+
+ DnDFolderPopupMenu popup ;
+ if(context.getDraggableData() instanceof FileResource){
+ if(context.getDroppableData() instanceof RestResourceWrapper)
+ popup = new DnDFolderPopupMenu(images, ((RestResourceWrapper) context.getDroppableData()).getResource(), Arrays.asList(context.getDraggableData()));
+ else
+ popup = new DnDFolderPopupMenu(images, null, Arrays.asList(context.getDraggableData()));
+ }
+
+ else{
+ if(context.getDroppableData() instanceof RestResourceWrapper)
+ popup = new DnDFolderPopupMenu(images, ((RestResourceWrapper) context.getDroppableData()).getResource(), context.getDraggableData());
+ else
+ popup = new DnDFolderPopupMenu(images, null, context.getDraggableData());
+ }
+
+ int left = context.getDroppable().getAbsoluteLeft() + 40;
+ int top = context.getDroppable().getAbsoluteTop() + 20;
+ popup.setPopupPosition(left, top);
+
+ popup.show();
+ }
+ });
+ }
@Override
public boolean isLeaf(Object value) {
((MyFolderResource)value).setResource(rootResource);
if(GSS.get().getTreeView().getSelection().getUri().equals(value.getUri()))
selectionModel.setSelected(value, true);
- GWT.log("UPDATYING");
GSS.get().onResourceUpdate(value);
}
};
DeferredCommand.addCommand(gf);
}
- if(value instanceof TrashResource){
+ else if(value instanceof TrashResource){
DeferredCommand.addCommand(new GetCommand<TrashResource>(TrashResource.class, GSS.get().getCurrentUserResource().getTrashPath(), null) {
@Override
public void onComplete() {
//trash = getResult();
+ ((TrashResource)value).setFolders(getResult().getFolders());
+ ((TrashResource)value).setFiles(getResult().getFiles());
for(RestResource r : getRootNodes().getList()){
if(r instanceof TrashResource)
getRootNodes().getList().set(getRootNodes().getList().indexOf(r),GSS.get().getTreeView().getTrash());
}
GSS.get().getTreeView().updateNodeChildren(GSS.get().getTreeView().getTrash());
+ //GSS.get().showFileList(true);
+ GSS.get().onResourceUpdate(value);
}
@Override
int statusCode = ((RestException)t).getHttpStatusCode();
// On IE status code 1223 may be returned instead of 204.
if(statusCode == 204 || statusCode == 1223){
- //trash = new TrashResource(GSS.get().getCurrentUserResource().getTrashPath());
+ ((TrashResource)value).setFolders(new ArrayList<FolderResource>());
+ ((TrashResource)value).setFiles(new ArrayList<FileResource>());
}
else{
GWT.log("", t);
}
});
}
+ else if(value instanceof OthersFolderResource){
+ GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, value.getUri(), null) {
+
+ @Override
+ public void onComplete() {
+ FolderResource rootResource = getResult();
+ //((MyFolderResource)value).getResource().setFiles(rootResource.getFiles());
+ ((OthersFolderResource)value).setResource(rootResource);
+ if(GSS.get().getTreeView().getSelection().getUri().equals(value.getUri()))
+ selectionModel.setSelected(value, true);
+ GSS.get().onResourceUpdate(value);
+
+ }
+
+ @Override
+ public void onError(Throwable t) {
+ GWT.log("Error fetching root folder", t);
+ GSS.get().displayError("Unable to fetch root folder");
+ }
+
+ };
+ DeferredCommand.addCommand(gf);
+ }
+ else if(value instanceof SharedFolderResource){
+ GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, value.getUri(), null) {
+
+ @Override
+ public void onComplete() {
+ FolderResource rootResource = getResult();
+ //((MyFolderResource)value).getResource().setFiles(rootResource.getFiles());
+ ((SharedFolderResource)value).setResource(rootResource);
+ if(GSS.get().getTreeView().getSelection().getUri().equals(value.getUri()))
+ selectionModel.setSelected(value, true);
+ GSS.get().onResourceUpdate(value);
+
+ }
+
+ @Override
+ public void onError(Throwable t) {
+ GWT.log("Error fetching root folder", t);
+ GSS.get().displayError("Unable to fetch root folder");
+ }
+
+ };
+ DeferredCommand.addCommand(gf);
+ }
+ else if(value instanceof SharedResource){
+ GetCommand<SharedResource> gf = new GetCommand<SharedResource>(SharedResource.class, value.getUri(), null) {
+
+ @Override
+ public void onComplete() {
+ SharedResource rootResource = getResult();
+ ((SharedResource)value).setFolders(getResult().getFolders());
+ ((SharedResource)value).setFiles(getResult().getFiles());
+
+ if(GSS.get().getTreeView().getSelection().getUri().equals(value.getUri()))
+ selectionModel.setSelected(value, true);
+ GSS.get().onResourceUpdate(value);
+
+ }
+
+ @Override
+ public void onError(Throwable t) {
+ GWT.log("Error fetching root folder", t);
+ GSS.get().displayError("Unable to fetch root folder");
+ }
+
+ };
+ DeferredCommand.addCommand(gf);
+ }
+ else if(value instanceof OtherUserResource){
+ GetCommand<OtherUserResource> gf = new GetCommand<OtherUserResource>(OtherUserResource.class, value.getUri(), null) {
+
+ @Override
+ public void onComplete() {
+ OtherUserResource rootResource = getResult();
+ ((OtherUserResource)value).setFolders(getResult().getFolders());
+ ((OtherUserResource)value).setFiles(getResult().getFiles());
+
+ if(GSS.get().getTreeView().getSelection().getUri().equals(value.getUri()))
+ selectionModel.setSelected(value, true);
+ GSS.get().onResourceUpdate(value);
+
+ }
+
+ @Override
+ public void onError(Throwable t) {
+ GWT.log("Error fetching root folder", t);
+ GSS.get().displayError("Unable to fetch root folder");
+ }
+
+ };
+ DeferredCommand.addCommand(gf);
+ }
}
}});
this.restResource = department;
this.resourceClass=resourceClass;
- //CellTreeView.this.mymap.put(department.getUri(), MyFolderDataProvider.this);
}
@Override
}
List<RestResource> res =null;
public void refresh(final RefreshHandler refresh){
- GWT.log("******************************************");
- GWT.log("[REFRESHING]:"+restResource.getUri());
- GWT.log("******************************************");
FolderResource cache = null;
if(restResource instanceof RestResourceWrapper && !((RestResourceWrapper)restResource).getResource().isNeedsExpanding())
cache = ((RestResourceWrapper)restResource).getResource();
((RestResourceWrapper)restResource).getResource().setNeedsExpanding(false);
}
if(usedCachedVersion()&&res!=null){
- updateRowCount(res.size(), true);
- updateRowData(0,res);
+
+ updateRowCount(res.size(), true);
+ updateRowData(0,res);
return;
}
String[] folderPaths = null;
else if(resourceClass.equals(MyFolderResource.class))
res.add(new MyFolderResource(r));
else if(resourceClass.equals(SharedFolderResource.class)){
- GWT.log("ADDING:"+r.getUri());
res.add(new SharedFolderResource(r));
}
else if(resourceClass.equals(TrashFolderResource.class))
}});
this.restResource = department;
this.resourceClass=resourceClass;
- //CellTreeView.this.mymap.put(department.getUri(), OthersDataProvider.this);
}
@Override
}
public void refresh(final RefreshHandler refresh){
- GWT.log("******************************************");
- GWT.log("[REFRESHING]:"+restResource.getUri());
- GWT.log("******************************************");
GetCommand<OthersResource> go = new GetCommand<OthersResource>(OthersResource.class,
restResource.getUri(), null) {
public Map<String, MyFolderDataProvider> getMymap() {
return mymap;
}
+
+
+ /**
+ * Retrieve the sharedmap.
+ *
+ * @return the sharedmap
+ */
+ public Map<String, MyFolderDataProvider> getSharedmap() {
+ return sharedmap;
+ }
+
+
+ /**
+ * Retrieve the othersmap.
+ *
+ * @return the othersmap
+ */
+ public Map<String, MyFolderDataProvider> getOthersmap() {
+ return othersmap;
+ }
+
+