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;
@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);
}
});
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())
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;
+ }
+
+
}