Fix the response uri when making a GET request by username to /pithos/rest/users/
[pithos] / src / gr / ebs / gss / client / PopupTree.java
index 0ba5bfb..a2c92fd 100644 (file)
@@ -23,10 +23,12 @@ 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.OthersResource;
+import gr.ebs.gss.client.rest.resource.RestResource;
 import gr.ebs.gss.client.rest.resource.SharedResource;
 import gr.ebs.gss.client.rest.resource.TrashResource;
 
-import com.google.gwt.core.client.GWT;
+import java.util.Iterator;
+
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.event.dom.client.ContextMenuEvent;
 import com.google.gwt.event.dom.client.ContextMenuHandler;
@@ -68,61 +70,11 @@ public class PopupTree extends Tree {
 
                        @Override
                        public void onSelection(SelectionEvent<TreeItem> event) {
-                               TreeItem item = event.getSelectedItem();
-                               processItemSelected(item, true);
+                               TreeItem treeItem = event.getSelectedItem();
+                               processItemSelected(treeItem);
                                String path = GSS.get().getApiPath() + GSS.get().getCurrentUserResource().getUsername()+ "/";
-//                             case: Trash folder is selected
-                               if(GSS.get().getFolders().getCurrent().getUserObject() instanceof TrashResource){
-                                       TrashResource currentObject = (TrashResource) GSS.get().getFolders().getCurrent().getUserObject();
-                                       GSS.get().updateHistory("Files/"+ currentObject.getUri().substring(path.lastIndexOf("/")+1), item);
-                               }
-//                             case: Other's shared folder option is selected
-                               else if (GSS.get().getFolders().getCurrent().getUserObject() instanceof OthersResource)
-                                       GSS.get().updateHistory("Files/"+ path.substring(path.lastIndexOf("/")+1) + "others/", item);
-                               else if(GSS.get().getFolders().getCurrent().getUserObject() instanceof OtherUserResource){
-                                       OtherUserResource currentObject = (OtherUserResource) GSS.get().getFolders().getCurrent().getUserObject();
-                                       GSS.get().updateHistory("Files/others/"+ currentObject.getName(), item);
-                                       }
-//                             case: my shared is selected
-                               else if(GSS.get().getFolders().getCurrent().getUserObject() instanceof SharedResource){
-                                       SharedResource currentObject = (SharedResource) GSS.get().getFolders().getCurrent().getUserObject();
-                                       GSS.get().updateHistory("Files/"+ currentObject.getUri().substring(path.lastIndexOf("/")+1), item);
-                               }
-                               else{
-//                                     case: all folder resources either below user's home folder or anywhere else(Trash/My Shared/Other's shared
-                                       FolderResource currentObject = (FolderResource) GSS.get().getFolders().getCurrent().getUserObject();
-                                       String parentUri = currentObject.getParentURI();
-                                       if(parentUri == null){
-                                               if(containsFolder(item, "Trash")){
-//                                                     case: selected folders below Trash folder
-                                                       String partialUri = constructPartialPath(item);
-                                                       GSS.get().updateHistory("Files/trash/" + partialUri, item);
-                                               } else
-//                                                     case: home folders are selected
-                                                       GSS.get().updateHistory("Files/files/" + currentObject.getName(), item);
-                                       }
-                                       else if(item.getParentItem() == null){
-//                                             this is the case when the user uses the browser's forward arrow to navigate through other's
-//                                             shared folders and      item.getParentItem is null only inside other's shared folder
-                                               String apiPath = GSS.get().getApiPath();
-                                               String newPath = currentObject.getParentURI().substring(apiPath.lastIndexOf("/"));
-                                               GSS.get().updateHistory("Files"+ newPath + currentObject.getName(), item);
-                                       }
-                                       else if(containsFolder(item, "My Shared")){
-//                                             case: selected folders below My Shared folder
-                                               String partialUri = constructPartialPath(item);
-                                               GSS.get().updateHistory("Files/shared/" + partialUri, item);
-                                       }else if(containsFolder(item, "Other's Shared")){
-//                                             case: selected folders below Other's Shared folder
-                                               String partialPath = constructPartialPath(item);
-                                               GSS.get().updateHistory("Files/others/"+ partialPath, item);
-                                       }
-                                       else{
-//                                             case:all folders in user's folders tree
-                                               String finalUri = parentUri.substring(path.lastIndexOf("/")) + currentObject.getName();
-                                               GSS.get().updateHistory("Files"+ finalUri, item);
-                                       }
-                               }
+                               String constructedUri = ((RestResource) GSS.get().getFolders().getCurrent().getUserObject()).constructUri(treeItem, path);
+                               GSS.get().updateHistory(constructedUri);
                        }
                });
 
@@ -199,7 +151,7 @@ public class PopupTree extends Tree {
                menu.show();
        }
 
-       public void processItemSelected(TreeItem item, boolean fireEvents) {
+       public void processItemSelected(TreeItem item) {
                if (GSS.get().getCurrentSelection() == null || !GSS.get().getCurrentSelection().equals(item.getUserObject()))
                        GSS.get().setCurrentSelection(item.getUserObject());
                if (!GSS.get().isFileListShowing())
@@ -279,37 +231,63 @@ public class PopupTree extends Tree {
        public void setTreeSelectedItem(TreeItem newSelectedItem) {
                treeSelectedItem = newSelectedItem;
        }
-
        /**
-        * construct the partial path of the selected TreeItem
-        *
-        * @param selectedItem the selectedItem to check
-        */
-       public String constructPartialPath(TreeItem selectedItem){
-          String result = DisplayHelper.trim(selectedItem.getText());
-          TreeItem parent = selectedItem.getParentItem();
-          while (!(DisplayHelper.trim(parent.getText()).equals("My Shared") || DisplayHelper.trim(parent.getText()).equals("Other's Shared")||DisplayHelper.trim(parent.getText()).equals("Trash"))){
-             result = DisplayHelper.trim(parent.getText()) + "/" + result;
-             if(result.equals("My Shared")||result.equals("Other's Shared")) return result;
-             parent = parent.getParentItem();
-          }
-
-          return result;
-       }
-       /**
-        * examine whether a folder name like "Trash", "My Shared", "Other's Shared" is inside path
-        *
-        * @param selectedItem the selectedTreeItem to check
+        * Method that takes a folderName and finds the corresponding treeItem object and returns it
+        * @param historyToken
+        * @return treeItem
         */
 
-       public boolean containsFolder(TreeItem selectedItem, String folderName){
-               TreeItem parent = selectedItem.getParentItem();
-               while (parent != null){
-                       String parentItemText = parent.getText();
-                       String parentItemTextTr = DisplayHelper.trim(parentItemText);
-                       if(parentItemTextTr.equals(folderName)) return true;
-                       parent = parent.getParentItem();
+       public TreeItem getTreeItem (String historyToken){
+//             String historyTokenOriginal = historyToken.replace("+", " ");
+               String path = GSS.get().getApiPath() + GSS.get().getCurrentUserResource().getUsername()+ "/";
+               String rootText = DisplayHelper.trim(GSS.get().getFolders().getRootItem().getText());
+               String uriToGet = "Files/files/" + rootText;
+               Iterator<TreeItem> it = GSS.get().getFolders().getPopupTree().treeItemIterator() ;
+               while(it.hasNext()){
+                       String constructedUri = "";
+                       TreeItem treeItem = it.next();
+                       if(treeItem.getUserObject() instanceof TrashResource){
+                               TrashResource currentObject = (TrashResource) treeItem.getUserObject();
+                               constructedUri = constructedUri + currentObject.constructUri(treeItem,path);
+                       }
+                       if(treeItem.getUserObject() instanceof SharedResource){
+                               SharedResource currentObject = (SharedResource) treeItem.getUserObject();
+                               constructedUri = constructedUri + currentObject.constructUri(treeItem, path);
                        }
-               return false;
+                       if(treeItem.getUserObject() instanceof OthersResource){
+                               OthersResource currentObject = (OthersResource) treeItem.getUserObject();
+                               constructedUri = constructedUri + currentObject.constructUri(treeItem, path);
+                       }
+                       if(treeItem.getUserObject() instanceof OtherUserResource){
+                               OtherUserResource currentObject = (OtherUserResource) treeItem.getUserObject();
+                               constructedUri = constructedUri + currentObject.constructUri(treeItem, path);
+                       }
+                       if(treeItem.getUserObject() instanceof FolderResource){
+                               FolderResource currentObject = (FolderResource) treeItem.getUserObject();
+                               constructedUri = constructedUri + currentObject.constructUri(treeItem, path);
+                       }
+                       if(constructedUri.equals(historyToken))
+                               return treeItem;
+               }
+               return expandHiddenItems(uriToGet);
+
        }
+
+
+       public TreeItem expandHiddenItems(String tokenInput){
+               //TODO
+               // this method handles objects that are not constructed during loading the application
+               // and when there's a need to seek them inside some non-expanded folder
+               // This method is not implemented yet and in case of a non-constructed object
+               // returns the home/root folder
+               // treeItem.getState() method returns always false so the OpenEvent.fire() method
+               // fails to expand the parent folder in the UI
+
+               GSS.get().getFolders().getRootItem().getText();
+               TreeItem treeItem = getTreeItem(tokenInput);
+               OpenEvent.fire(GSS.get().getFolders().getPopupTree(), treeItem);
+               return treeItem;
+       }
+
+
 }