Enable focus inside the text box when creating a new group. This solves Issue 36.
[pithos] / src / gr / ebs / gss / client / Folders.java
index 35934d9..373eeca 100644 (file)
-/*\r
- * Copyright 2007, 2008, 2009 Electronic Business Systems Ltd.\r
- *\r
- * This file is part of GSS.\r
- *\r
- * GSS is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * GSS is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with GSS.  If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package gr.ebs.gss.client;\r
-\r
-import gr.ebs.gss.client.dnd.DnDTreeItem;\r
-import gr.ebs.gss.client.rest.resource.FolderResource;\r
-import gr.ebs.gss.client.rest.resource.OtherUserResource;\r
-import gr.ebs.gss.client.rest.resource.RestResource;\r
-import gr.ebs.gss.client.tree.FolderSubtree;\r
-import gr.ebs.gss.client.tree.MyShareSubtree;\r
-import gr.ebs.gss.client.tree.OthersSharesSubtree;\r
-import gr.ebs.gss.client.tree.TrashSubtree;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import com.google.gwt.user.client.Command;\r
-import com.google.gwt.user.client.DeferredCommand;\r
-import com.google.gwt.user.client.ui.AbstractImagePrototype;\r
-import com.google.gwt.user.client.ui.Composite;\r
-import com.google.gwt.user.client.ui.TreeImages;\r
-import com.google.gwt.user.client.ui.TreeItem;\r
-\r
-/**\r
- * A tree displaying the folders in the user's file space.\r
- */\r
-public class Folders extends Composite {\r
-\r
-       /**\r
-        * A constant that denotes the completion of an IncrementalCommand.\r
-        */\r
-       public static final boolean DONE = false;\r
-\r
-       /**\r
-        * Specifies the images that will be bundled for this Composite and other\r
-        * inherited images that will be included in the same bundle.\r
-        */\r
-       public interface Images extends TreeImages, FolderContextMenu.Images {\r
-\r
-               @Resource("gr/ebs/gss/resources/folder_home.png")\r
-               AbstractImagePrototype home();\r
-\r
-               @Resource("gr/ebs/gss/resources/folder_yellow.png")\r
-               AbstractImagePrototype folderYellow();\r
-\r
-               @Resource("gr/ebs/gss/resources/mimetypes/document.png")\r
-               AbstractImagePrototype document();\r
-\r
-               @Resource("gr/ebs/gss/resources/internet.png")\r
-               AbstractImagePrototype othersShared();\r
-\r
-               @Resource("gr/ebs/gss/resources/edit_user.png")\r
-               AbstractImagePrototype myShared();\r
-\r
-               @Resource("gr/ebs/gss/resources/folder_user.png")\r
-               AbstractImagePrototype sharedFolder();\r
-\r
-               @Resource("gr/ebs/gss/resources/trashcan_empty.png")\r
-               AbstractImagePrototype trash();\r
-       }\r
-\r
-       /**\r
-        * The widget's image bundle.\r
-        */\r
-       private final Images images;\r
-\r
-       /**\r
-        * The tree widget that displays the folder namespace.\r
-        */\r
-       private PopupTree tree;\r
-\r
-       /**\r
-        * A cached copy of the currently selected folder widget.\r
-        */\r
-       private FolderSubtree folderSubtree;\r
-\r
-       private TrashSubtree trashSubtree;\r
-\r
-       private MyShareSubtree myShareSubtree;\r
-\r
-       private OthersSharesSubtree othersSharesSubtree;\r
-\r
-       /**\r
-        * Constructs a new folders widget with a bundle of images.\r
-        *\r
-        * @param _images a bundle that provides the images for this widget\r
-        */\r
-       public Folders(final Images _images) {\r
-               images = _images;\r
-               tree = new PopupTree(images);\r
-               tree.setAnimationEnabled(true);\r
-               initWidget(tree);\r
-               folderSubtree = new FolderSubtree(tree, images);\r
-               myShareSubtree = new MyShareSubtree(tree, images);\r
-               trashSubtree = new TrashSubtree(tree, images);\r
-               othersSharesSubtree = new OthersSharesSubtree(tree, images);\r
-       }\r
-\r
-       public Images getImages() {\r
-               return images;\r
-       }\r
-\r
-       public void select(TreeItem item) {\r
-               tree.processItemSelected(item, true);\r
-       }\r
-\r
-       public void clearSelection() {\r
-               tree.clearSelection();\r
-       }\r
-\r
-       public void update(TreeItem item) {\r
-               if (isFileItem(item))\r
-                       folderSubtree.updateSubfolders((DnDTreeItem) item);\r
-               else if (isTrash(item))\r
-                       trashSubtree.update();\r
-               else if (isMySharedItem(item))\r
-                       myShareSubtree.update((DnDTreeItem) item);\r
-               else if (isOthersSharedItem(item))\r
-                       othersSharesSubtree.update((DnDTreeItem) item);\r
-       }\r
-\r
-       public void updateFolder(final DnDTreeItem folderItem) {\r
-               if (isFileItem(folderItem)) {\r
-                       folderSubtree.updateFolderAndSubfolders(folderItem);\r
-                       myShareSubtree.updateFolderAndSubfolders((DnDTreeItem) getMySharesItem());\r
-               } else if (isMySharedItem(folderItem)) {\r
-                       myShareSubtree.updateFolderAndSubfolders(folderItem);\r
-                       if (folderItem.getFolderResource() != null) {\r
-                               DnDTreeItem fitem = (DnDTreeItem) getUserItem(getRootItem(), folderItem.getFolderResource().getUri());\r
-                               if (fitem != null)\r
-                                       folderSubtree.updateFolderAndSubfolders(fitem);\r
-                       } else\r
-                               folderSubtree.updateFolderAndSubfolders((DnDTreeItem) getRootItem());\r
-               } else if (isTrashItem(folderItem))\r
-                       trashSubtree.update();\r
-               else if (isOthersSharedItem(folderItem))\r
-                       othersSharesSubtree.update(folderItem);\r
-       }\r
-\r
-       /**\r
-        * Retrieve the current.\r
-        *\r
-        * @return the current\r
-        */\r
-       public TreeItem getCurrent() {\r
-               return tree.getTreeSelectedItem();\r
-       }\r
-\r
-       /**\r
-        * Modify the current.\r
-        *\r
-        * @param _current the current to set\r
-        */\r
-       void setCurrent(final TreeItem _current) {\r
-               tree.setTreeSelectedItem(_current);\r
-       }\r
-\r
-       /**\r
-        * Checks whether a TreeItem is contained in the root folder structure\r
-        *\r
-        * @param item The TreeItem to check\r
-        */\r
-       public boolean isFileItem(TreeItem item) {\r
-               if (getRootOfItem(item).equals(getRootItem()))\r
-                       return true;\r
-               return false;\r
-       }\r
-\r
-       /**\r
-        * Checks whether a TreeItem is contained in the trash folder structure\r
-        *\r
-        * @param item The TreeItem to check\r
-        */\r
-       public boolean isTrashItem(TreeItem item) {\r
-               if (getRootOfItem(item).equals(getTrashItem()))\r
-                       return true;\r
-               return false;\r
-       }\r
-\r
-       /**\r
-        * Checks whether a TreeItem is contained in the trash folder structure\r
-        *\r
-        * @param item The TreeItem to check\r
-        */\r
-       public boolean isOthersSharedItem(TreeItem item) {\r
-               if (getRootOfItem(item).equals(getSharesItem()))\r
-                       return true;\r
-               return false;\r
-       }\r
-\r
-       /**\r
-        * Checks whether a TreeItem is contained in the trash folder structure\r
-        *\r
-        * @param item The TreeItem to check\r
-        */\r
-       public boolean isMySharedItem(TreeItem item) {\r
-               if (getRootOfItem(item).equals(getMySharesItem()))\r
-                       return true;\r
-               return false;\r
-       }\r
-\r
-       private TreeItem getRootOfItem(TreeItem item) {\r
-               if (item.getParentItem() == null)\r
-                       return item;\r
-               TreeItem toCheck = item;\r
-               while (toCheck.getParentItem() != null) {\r
-                       toCheck = toCheck.getParentItem();\r
-                       toCheck = getRootOfItem(toCheck);\r
-               }\r
-               return toCheck;\r
-       }\r
-\r
-       public TreeItem getUserOfSharedItem(TreeItem item) {\r
-               if (item.getUserObject() instanceof OtherUserResource)\r
-                       return item;\r
-               TreeItem test = item;\r
-               while (test.getParentItem() != null) {\r
-                       test = test.getParentItem();\r
-                       if (test.getUserObject() instanceof OtherUserResource)\r
-                               return test;\r
-               }\r
-               return null;\r
-       }\r
-\r
-       public boolean isTrash(TreeItem item) {\r
-               return item.equals(getTrashItem());\r
-       }\r
-\r
-       public boolean isMyShares(TreeItem item) {\r
-               return item.equals(getMySharesItem());\r
-       }\r
-\r
-       public boolean isOthersShared(TreeItem item) {\r
-               return item.equals(getSharesItem());\r
-       }\r
-\r
-       /*\r
-        * Returns the Tree Item corresponding to the FolderDTO object\r
-        * since we need to update main file structure for untrashed folders\r
-        */\r
-       public TreeItem getUserItem(FolderResource folder) {\r
-               return getUserItem(getRootItem(), folder);\r
-       }\r
-\r
-       public TreeItem getOtherSharedItem(FolderResource folder) {\r
-               return getUserItem(getSharesItem(), folder);\r
-       }\r
-\r
-       private TreeItem getUserItem(TreeItem parent, FolderResource folder) {\r
-               TreeItem tmp = null;\r
-               if (parent.getUserObject() instanceof FolderResource &&\r
-                                       (parent.getUserObject().equals(folder) ||\r
-                                       ((FolderResource) parent.getUserObject()).getUri().equals(folder.getUri())))\r
-                       return parent;\r
-               for (int i = 0; i < parent.getChildCount(); i++) {\r
-                       TreeItem child = parent.getChild(i);\r
-                       if (child.getUserObject() instanceof FolderResource) {\r
-                               FolderResource dto = (FolderResource) child.getUserObject();\r
-                               if (dto.equals(folder) || dto.getUri().equals(folder.getUri()))\r
-                                       return child;\r
-                       }\r
-                       tmp = getUserItem(child, folder);\r
-                       if (tmp != null)\r
-                               return tmp;\r
-               }\r
-               return null;\r
-       }\r
-\r
-       /**\r
-        * Retrieve the trashItem.\r
-        *\r
-        * @return the trashItem\r
-        */\r
-       public TreeItem getTrashItem() {\r
-               return trashSubtree.getRootItem();\r
-       }\r
-\r
-       /**\r
-        * Retrieve the rootItem.\r
-        *\r
-        * @return the rootItem\r
-        */\r
-       public TreeItem getRootItem() {\r
-               return folderSubtree.getRootItem();\r
-       }\r
-\r
-       /**\r
-        * Retrieve the mySharesItem.\r
-        *\r
-        * @return the mySharesItem\r
-        */\r
-       public TreeItem getMySharesItem() {\r
-               return myShareSubtree.getRootItem();\r
-       }\r
-\r
-       /**\r
-        * Retrieve the sharesItem.\r
-        *\r
-        * @return the sharesItem\r
-        */\r
-       public TreeItem getSharesItem() {\r
-               return othersSharesSubtree.getRootItem();\r
-       }\r
-\r
-       public void onFolderTrash(TreeItem folder) {\r
-               if (folder.getParentItem().getUserObject() instanceof FolderResource) {\r
-                       FolderResource folderDTO = (FolderResource) folder.getParentItem().getUserObject();\r
-                       updateFileAndShareNodes(folderDTO);\r
-               } else\r
-                       update(getMySharesItem());\r
-               update(getTrashItem());\r
-               clearSelection();\r
-               GSS.get().getFileList().updateFileCache(false, true /*clear selection*/);\r
-       }\r
-\r
-       public void onFolderDelete(TreeItem folder) {\r
-               if (folder.getParentItem().getUserObject() instanceof FolderResource) {\r
-                       FolderResource folderDTO = (FolderResource) folder.getParentItem().getUserObject();\r
-                       updateFileAndShareNodes(folderDTO);\r
-               } else\r
-                       update(getMySharesItem());\r
-               GSS.get().getStatusPanel().updateStats();\r
-               clearSelection();\r
-               GSS.get().getFileList().updateFileCache(false, true /*clear selection*/);\r
-       }\r
-\r
-       public void onFolderCopy(TreeItem folder) {\r
-               if (!updateFileAndShareNodes((FolderResource) folder.getUserObject()))\r
-                       update(folder);\r
-               GSS.get().getFileList().updateFileCache(false, true /*clear selection*/);\r
-               GSS.get().getStatusPanel().updateStats();\r
-       }\r
-\r
-       public void onFolderMove(TreeItem folder, FolderResource initialParent) {\r
-               updateFileAndShareNodes(initialParent);\r
-               updateFileAndShareNodes((FolderResource) folder.getUserObject());\r
-               update(folder);\r
-               GSS.get().getFileList().updateFileCache(false, true /*clear selection*/);\r
-               GSS.get().getStatusPanel().updateStats();\r
-               clearSelection();\r
-       }\r
-\r
-       private boolean updateFileAndShareNodes(FolderResource folder) {\r
-               boolean updated = false;\r
-               TreeItem sharesFolder = getUserItem(getMySharesItem(), folder);\r
-               if (sharesFolder != null) {\r
-                       update(sharesFolder);\r
-                       updated = true;\r
-               }\r
-               TreeItem fileFolder = getUserItem(getRootItem(), folder);\r
-               if (fileFolder != null) {\r
-                       update(fileFolder);\r
-                       updated = true;\r
-               }\r
-               return updated;\r
-       }\r
-\r
-       public void initialize() {\r
-               DeferredCommand.addCommand(new Command() {\r
-\r
-                       public void execute() {\r
-                               GSS.get().showLoadingIndicator();\r
-                               folderSubtree.getRootItem().removeItems();\r
-                               trashSubtree.getRootItem().removeItems();\r
-                               myShareSubtree.getRootItem().removeItems();\r
-                               othersSharesSubtree.getRootItem().removeItems();\r
-                               update(folderSubtree.getRootItem());\r
-                               update(trashSubtree.getRootItem());\r
-                               update(myShareSubtree.getRootItem());\r
-                               update(othersSharesSubtree.getRootItem());\r
-                               GSS.get().setCurrentSelection(null);\r
-                               clearSelection();\r
-                               GSS.get().getFileList().updateFileCache(false, true /*clear selection*/);\r
-                               GSS.get().hideLoadingIndicator();\r
-                       }\r
-\r
-               });\r
-       }\r
-\r
-       /* NEW HANDLING METHODS */\r
-       public TreeItem getUserItem(TreeItem parent, String path) {\r
-               TreeItem tmp = null;\r
-               if (parent.getUserObject() instanceof RestResource && ((RestResource) parent.getUserObject()).getUri().equals(path))\r
-                       return parent;\r
-               for (int i = 0; i < parent.getChildCount(); i++) {\r
-                       TreeItem child = parent.getChild(i);\r
-                       if (child.getUserObject() instanceof RestResource) {\r
-                               RestResource dto = (RestResource) child.getUserObject();\r
-                               if (dto.getUri().equals(path))\r
-                                       return child;\r
-                       }\r
-                       tmp = getUserItem(child, path);\r
-                       if (tmp != null)\r
-                               return tmp;\r
-               }\r
-               return null;\r
-       }\r
-\r
-       public List<TreeItem> getItemsOfTreeForPath(String path) {\r
-               List<TreeItem> result = new ArrayList<TreeItem>();\r
-               TreeItem item = null;\r
-               item = getUserItem(getRootItem(), path);\r
-               if (item != null)\r
-                       result.add(item);\r
-               item = getUserItem(getMySharesItem(), path);\r
-               if (item != null)\r
-                       result.add(item);\r
-               item = getUserItem(getTrashItem(), path);\r
-               if (item != null)\r
-                       result.add(item);\r
-               item = getUserItem(getSharesItem(), path);\r
-               if (item != null)\r
-                       result.add(item);\r
-               return result;\r
-       }\r
-}\r
+/*
+ * Copyright 2007, 2008, 2009 Electronic Business Systems Ltd.
+ *
+ * This file is part of GSS.
+ *
+ * GSS is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GSS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GSS.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package gr.ebs.gss.client;
+
+import gr.ebs.gss.client.dnd.DnDTreeItem;
+import gr.ebs.gss.client.rest.resource.FolderResource;
+import gr.ebs.gss.client.rest.resource.OtherUserResource;
+import gr.ebs.gss.client.rest.resource.RestResource;
+import gr.ebs.gss.client.tree.FolderSubtree;
+import gr.ebs.gss.client.tree.MyShareSubtree;
+import gr.ebs.gss.client.tree.OthersSharesSubtree;
+import gr.ebs.gss.client.tree.TrashSubtree;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Tree;
+import com.google.gwt.user.client.ui.TreeItem;
+/**
+ * A tree displaying the folders in the user's file space.
+ */
+public class Folders extends Composite {
+
+       /**
+        * A constant that denotes the completion of an IncrementalCommand.
+        */
+       public static final boolean DONE = false;
+
+       /**
+        * Specifies the images that will be bundled for this Composite and other
+        * inherited images that will be included in the same bundle.
+        */
+       public interface Images extends ClientBundle,Tree.Resources, FolderContextMenu.Images {
+
+               @Source("gr/ebs/gss/resources/folder_home.png")
+               ImageResource home();
+
+               @Source("gr/ebs/gss/resources/folder_yellow.png")
+               ImageResource folderYellow();
+
+               @Source("gr/ebs/gss/resources/mimetypes/document.png")
+               ImageResource document();
+
+               @Source("gr/ebs/gss/resources/internet.png")
+               ImageResource othersShared();
+
+               @Source("gr/ebs/gss/resources/edit_user.png")
+               ImageResource myShared();
+
+               @Source("gr/ebs/gss/resources/folder_user.png")
+               ImageResource sharedFolder();
+
+               @Source("gr/ebs/gss/resources/trashcan_empty.png")
+               ImageResource trash();
+       }
+
+       /**
+        * The widget's image bundle.
+        */
+       private final Images images;
+
+       /**
+        * The tree widget that displays the folder namespace.
+        */
+       private PopupTree tree;
+
+       /**
+        * A cached copy of the currently selected folder widget.
+        */
+       private FolderSubtree folderSubtree;
+
+       private TrashSubtree trashSubtree;
+
+       private MyShareSubtree myShareSubtree;
+
+       private OthersSharesSubtree othersSharesSubtree;
+
+       /**
+        * Constructs a new folders widget with a bundle of images.
+        *
+        * @param _images a bundle that provides the images for this widget
+        */
+       public Folders(final Images _images) {
+               images = _images;
+               tree = new PopupTree(images);
+               tree.setAnimationEnabled(true);
+               initWidget(tree);
+               folderSubtree = new FolderSubtree(tree, images);
+               myShareSubtree = new MyShareSubtree(tree, images);
+               trashSubtree = new TrashSubtree(tree, images);
+               othersSharesSubtree = new OthersSharesSubtree(tree, images);
+       }
+
+       public Images getImages() {
+               return images;
+       }
+
+       public void select(TreeItem item) {
+               tree.processItemSelected(item);
+       }
+
+       public void clearSelection() {
+               tree.clearSelection();
+       }
+
+       public void update(TreeItem item) {
+               if (isFileItem(item))
+                       folderSubtree.updateSubfolders((DnDTreeItem) item);
+               else if (isTrash(item))
+                       trashSubtree.update();
+               else if (isMySharedItem(item))
+                       myShareSubtree.update((DnDTreeItem) item);
+               else if (isOthersSharedItem(item))
+                       othersSharesSubtree.update((DnDTreeItem) item);
+       }
+
+       public void updateFolder(final DnDTreeItem folderItem) {
+               if (isFileItem(folderItem)){
+                       folderSubtree.updateFolderAndSubfolders(folderItem);
+                       myShareSubtree.updateFolderAndSubfolders((DnDTreeItem) getMySharesItem());
+               }
+               else if (isMySharedItem(folderItem)){
+                       myShareSubtree.updateFolderAndSubfolders(folderItem);
+                       if (folderItem.getFolderResource() != null) {
+                               DnDTreeItem fitem = (DnDTreeItem) getUserItem(getRootItem(), folderItem.getFolderResource().getUri());
+                               if (fitem != null)
+                                       folderSubtree.updateFolderAndSubfolders(fitem);
+                               else
+                                       folderSubtree.updateFolderAndSubfolders((DnDTreeItem) getRootItem());
+                       }
+
+               }
+               else if (isTrashItem(folderItem))
+                       trashSubtree.update();
+               else if (isOthersSharedItem(folderItem))
+                       othersSharesSubtree.updateFolderAndSubfolders(folderItem);
+       }
+
+       /**
+        * Retrieve the current.
+        *
+        * @return the current
+        */
+       public TreeItem getCurrent() {
+               return tree.getTreeSelectedItem();
+       }
+
+       /**
+        * Modify the current.
+        *
+        * @param _current the current to set
+        */
+       void setCurrent(final TreeItem _current) {
+               tree.setTreeSelectedItem(_current);
+       }
+
+       /**
+        * Checks whether a TreeItem is contained in the root folder structure
+        *
+        * @param item The TreeItem to check
+        */
+       public boolean isFileItem(TreeItem item) {
+               if (getRootOfItem(item).equals(getRootItem()))
+                       return true;
+               return false;
+       }
+
+       /**
+        * Checks whether a TreeItem is contained in the trash folder structure
+        *
+        * @param item The TreeItem to check
+        */
+       public boolean isTrashItem(TreeItem item) {
+               if (getRootOfItem(item).equals(getTrashItem()))
+                       return true;
+               return false;
+       }
+
+       /**
+        * Checks whether a TreeItem is contained in the trash folder structure
+        *
+        * @param item The TreeItem to check
+        */
+       public boolean isOthersSharedItem(TreeItem item) {
+               if (getRootOfItem(item).equals(getSharesItem()))
+                       return true;
+               return false;
+       }
+
+       /**
+        * Checks whether a TreeItem is contained in the trash folder structure
+        *
+        * @param item The TreeItem to check
+        */
+       public boolean isMySharedItem(TreeItem item) {
+               if (getRootOfItem(item).equals(getMySharesItem()))
+                       return true;
+               return false;
+       }
+
+       private TreeItem getRootOfItem(TreeItem item) {
+               if (item.getParentItem() == null)
+                       return item;
+               TreeItem toCheck = item;
+               while (toCheck.getParentItem() != null) {
+                       toCheck = toCheck.getParentItem();
+                       toCheck = getRootOfItem(toCheck);
+               }
+               return toCheck;
+       }
+
+       public TreeItem getUserOfSharedItem(TreeItem item) {
+               if (item.getUserObject() instanceof OtherUserResource)
+                       return item;
+               TreeItem test = item;
+               while (test.getParentItem() != null) {
+                       test = test.getParentItem();
+                       if (test.getUserObject() instanceof OtherUserResource)
+                               return test;
+               }
+               return null;
+       }
+
+       public boolean isTrash(TreeItem item) {
+               return item.equals(getTrashItem());
+       }
+
+       public boolean isMyShares(TreeItem item) {
+               return item.equals(getMySharesItem());
+       }
+
+       public boolean isOthersShared(TreeItem item) {
+               return item.equals(getSharesItem());
+       }
+
+       /*
+        * Returns the Tree Item corresponding to the FolderDTO object
+        * since we need to update main file structure for untrashed folders
+        */
+       public TreeItem getUserItem(FolderResource folder) {
+               return getUserItem(getRootItem(), folder);
+       }
+
+       public TreeItem getOtherSharedItem(FolderResource folder) {
+               return getUserItem(getSharesItem(), folder);
+       }
+
+       private TreeItem getUserItem(TreeItem parent, FolderResource folder) {
+               TreeItem tmp = null;
+               if (parent.getUserObject() instanceof FolderResource &&
+                                       (parent.getUserObject().equals(folder) ||
+                                       ((FolderResource) parent.getUserObject()).getUri().equals(folder.getUri())))
+                       return parent;
+               for (int i = 0; i < parent.getChildCount(); i++) {
+                       TreeItem child = parent.getChild(i);
+                       if (child.getUserObject() instanceof FolderResource) {
+                               FolderResource dto = (FolderResource) child.getUserObject();
+                               if (dto.equals(folder) || dto.getUri().equals(folder.getUri()))
+                                       return child;
+                       }
+                       tmp = getUserItem(child, folder);
+                       if (tmp != null)
+                               return tmp;
+               }
+               return null;
+       }
+
+       /**
+        * Retrieve the trashItem.
+        *
+        * @return the trashItem
+        */
+       public TreeItem getTrashItem() {
+               return trashSubtree.getRootItem();
+       }
+
+       /**
+        * Retrieve the rootItem.
+        *
+        * @return the rootItem
+        */
+       public TreeItem getRootItem() {
+               return folderSubtree.getRootItem();
+       }
+
+       /**
+        * Retrieve the mySharesItem.
+        *
+        * @return the mySharesItem
+        */
+       public TreeItem getMySharesItem() {
+               return myShareSubtree.getRootItem();
+       }
+
+       /**
+        * Retrieve the sharesItem.
+        *
+        * @return the sharesItem
+        */
+       public TreeItem getSharesItem() {
+               return othersSharesSubtree.getRootItem();
+       }
+
+       public void onFolderTrash(TreeItem folder) {
+               if (folder.getParentItem().getUserObject() instanceof FolderResource) {
+                       FolderResource folderDTO = (FolderResource) folder.getParentItem().getUserObject();
+                       updateFileAndShareNodes(folderDTO);
+               } else
+                       update(getMySharesItem());
+               update(getTrashItem());
+               clearSelection();
+               GSS.get().getFileList().updateFileCache(false, true /*clear selection*/);
+       }
+
+       public void onFolderDelete(TreeItem folder) {
+               if (folder.getParentItem().getUserObject() instanceof FolderResource) {
+                       FolderResource folderDTO = (FolderResource) folder.getParentItem().getUserObject();
+                       updateFileAndShareNodes(folderDTO);
+               } else
+                       update(getMySharesItem());
+               GSS.get().getStatusPanel().updateStats();
+               clearSelection();
+               GSS.get().getFileList().updateFileCache(false, true /*clear selection*/);
+       }
+
+       public void onFolderCopy(TreeItem folder) {
+               if (!updateFileAndShareNodes((FolderResource) folder.getUserObject()))
+                       update(folder);
+               GSS.get().getFileList().updateFileCache(false, true /*clear selection*/);
+               GSS.get().getStatusPanel().updateStats();
+       }
+
+       public void onFolderMove(TreeItem folder, FolderResource initialParent) {
+               updateFileAndShareNodes(initialParent);
+               updateFileAndShareNodes((FolderResource) folder.getUserObject());
+               update(folder);
+               GSS.get().getFileList().updateFileCache(false, true /*clear selection*/);
+               GSS.get().getStatusPanel().updateStats();
+               clearSelection();
+       }
+
+       private boolean updateFileAndShareNodes(FolderResource folder) {
+               boolean updated = false;
+               TreeItem sharesFolder = getUserItem(getMySharesItem(), folder);
+               if (sharesFolder != null) {
+                       update(sharesFolder);
+                       updated = true;
+               }
+               TreeItem fileFolder = getUserItem(getRootItem(), folder);
+               if (fileFolder != null) {
+                       update(fileFolder);
+                       updated = true;
+               }
+               return updated;
+       }
+
+       public void initialize() {
+               DeferredCommand.addCommand(new Command() {
+
+                       @Override
+                       public void execute() {
+                               GSS.get().showLoadingIndicator();
+                               folderSubtree.getRootItem().removeItems();
+                               trashSubtree.getRootItem().removeItems();
+                               myShareSubtree.getRootItem().removeItems();
+                               othersSharesSubtree.getRootItem().removeItems();
+                               update(folderSubtree.getRootItem());
+                               update(trashSubtree.getRootItem());
+                               update(myShareSubtree.getRootItem());
+                               update(othersSharesSubtree.getRootItem());
+                               GSS.get().setCurrentSelection(null);
+                               clearSelection();
+                               GSS.get().getFileList().updateFileCache(false, true /*clear selection*/);
+                               GSS.get().hideLoadingIndicator();
+                       }
+
+               });
+       }
+
+       /* NEW HANDLING METHODS */
+       public TreeItem getUserItem(TreeItem parent, String path) {
+               TreeItem tmp = null;
+               if (parent.getUserObject() instanceof RestResource && ((RestResource) parent.getUserObject()).getUri().equals(path))
+                       return parent;
+               for (int i = 0; i < parent.getChildCount(); i++) {
+                       TreeItem child = parent.getChild(i);
+                       if (child.getUserObject() instanceof RestResource) {
+                               RestResource dto = (RestResource) child.getUserObject();
+                               if (dto.getUri().equals(path))
+                                       return child;
+                       }
+                       tmp = getUserItem(child, path);
+                       if (tmp != null)
+                               return tmp;
+               }
+               return null;
+       }
+
+       public List<TreeItem> getItemsOfTreeForPath(String path) {
+               List<TreeItem> result = new ArrayList<TreeItem>();
+               TreeItem item = null;
+               item = getUserItem(getRootItem(), path);
+               if (item != null)
+                       result.add(item);
+               item = getUserItem(getMySharesItem(), path);
+               if (item != null)
+                       result.add(item);
+               item = getUserItem(getTrashItem(), path);
+               if (item != null)
+                       result.add(item);
+               item = getUserItem(getSharesItem(), path);
+               if (item != null)
+                       result.add(item);
+               return result;
+       }
+       /**
+        * This method returns the current Popup Tree
+        * @return the popuptree
+        */
+       public PopupTree getPopupTree(){
+               return tree;
+       }
+}