-/*\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;
+ }
+}