X-Git-Url: https://code.grnet.gr/git/pithos/blobdiff_plain/603f48a1962419a443b419adda97dc4e13e9197b..ce98bfc619a13df1884b185f3c9eb066f7738c8f:/src/gr/ebs/gss/client/GSS.java diff --git a/src/gr/ebs/gss/client/GSS.java b/src/gr/ebs/gss/client/GSS.java index c32ba70..af95cac 100644 --- a/src/gr/ebs/gss/client/GSS.java +++ b/src/gr/ebs/gss/client/GSS.java @@ -28,10 +28,9 @@ import gr.ebs.gss.client.rest.resource.FolderResource; import gr.ebs.gss.client.rest.resource.TrashResource; import gr.ebs.gss.client.rest.resource.UserResource; -import java.util.HashMap; +import java.util.Arrays; import java.util.Iterator; import java.util.List; -import java.util.Map; import com.allen_sauer.gwt.dnd.client.DragContext; import com.allen_sauer.gwt.dnd.client.PickupDragController; @@ -44,7 +43,6 @@ import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.event.logical.shared.SelectionHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; -import com.google.gwt.http.client.URL; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.Command; @@ -199,18 +197,13 @@ public class GSS implements EntryPoint, ResizeHandler { private String token; /** - * A map that stores user's selection in order browser's - * history functionality to be implemented. - */ - private Map map = new HashMap(); - - /** * The WebDAV password of the current user */ private String webDAVPassword; private PickupDragController dragController; + @Override public void onModuleLoad() { // Initialize the singleton before calling the constructors of the // various widgets that might call GSS.get(). @@ -304,64 +297,54 @@ public class GSS implements EntryPoint, ResizeHandler { @Override public void onSelection(SelectionEvent event) { int tabIndex = event.getSelectedItem(); - TreeItem treeItem = GSS.get().getFolders().getCurrent(); - PopupTree tree = GSS.get().getFolders().getPopupTree(); +// TreeItem treeItem = GSS.get().getFolders().getCurrent(); switch (tabIndex) { case 0: +// Files tab selected fileList.clearSelectedRows(); fileList.updateCurrentlyShowingStats(); break; - /** - * When the Groups tab is selected a new - */ case 1: +// Groups tab selected groups.updateCurrentlyShowingStats(); -// Add a new pair key - object in the History map. - setHistory("Groups", treeItem); -// Add a new browser history entry. - History.newItem("Groups"); + updateHistory("Groups"); break; case 2: +// Search tab selected searchResults.clearSelectedRows(); searchResults.updateCurrentlyShowingStats(); - setHistory("Search", treeItem); - History.newItem("Search"); + updateHistory("Search"); break; } } }); - // If the application starts with no history token, redirect to a new "Files" state +// If the application starts with no history token, redirect to a new "Files" state String initToken = History.getToken(); if(initToken.length() == 0) History.newItem("Files"); - - // Add history listener - History.addValueChangeHandler(new ValueChangeHandler() { - public void onValueChange(ValueChangeEvent event) { - String historyToken = event.getValue(); - TreeItem treeItem = GSS.get().getFolders().getCurrent(); - try { - if(historyToken.equals("Search")) +// Add history listener to handle any history events + History.addValueChangeHandler(new ValueChangeHandler() { + @Override + public void onValueChange(ValueChangeEvent event) { + String tokenInput = event.getValue(); + String historyToken = handleSpecialFolderNames(tokenInput); + try { + if(historyToken.equals("Search")) inner.selectTab(2); else if(historyToken.equals("Groups")) inner.selectTab(1); - else if(historyToken.equals("Files")){ - setHistory("Files", treeItem); - History.newItem("Files"); - inner.selectTab(0); - } - else{ - PopupTree tree = GSS.get().getFolders().getPopupTree(); - String newHistoryToken = URL.decode(historyToken); - System.out.println(map.keySet()); - SelectionEvent.fire(tree, (TreeItem) getHistoryItem(newHistoryToken)); - } - } catch (IndexOutOfBoundsException e) { - inner.selectTab(0); - } - } - }); - + else if(historyToken.equals("Files")|| historyToken.length()==0) + inner.selectTab(0); + else { + PopupTree popupTree = GSS.get().getFolders().getPopupTree(); + TreeItem treeObj = GSS.get().getFolders().getPopupTree().getTreeItem(historyToken); + SelectionEvent.fire(popupTree, treeObj); + } + } catch (IndexOutOfBoundsException e) { + inner.selectTab(0); + } + } + }); // Add the left and right panels to the split panel. splitPanel.setLeftWidget(folders); @@ -397,6 +380,7 @@ public class GSS implements EntryPoint, ResizeHandler { // sizes have been computed by the browser. DeferredCommand.addCommand(new Command() { + @Override public void execute() { onWindowResized(Window.getClientHeight()); } @@ -419,6 +403,7 @@ public class GSS implements EntryPoint, ResizeHandler { if (announcement != null) DeferredCommand.addCommand(new Command() { + @Override public void execute() { displayInformation(announcement); } @@ -462,6 +447,7 @@ public class GSS implements EntryPoint, ResizeHandler { DeferredCommand.addCommand(new Command() { + @Override public void execute() { fetchUser(username); } @@ -794,21 +780,45 @@ public class GSS implements EntryPoint, ResizeHandler { webDAVPassword = Cookies.getCookie(cookie); Cookies.setCookie(cookie, "", null, domain, path, false); } + /** + * History support for folder navigation + * adds a new browser history entry * * @param key - * @return Object of the corresponding key in the History map */ - public Object getHistoryItem(String key){ - return map.get(key); + public void updateHistory(String key){ +// Replace any whitespace of the initial string to "+" +// String result = key.replaceAll("\\s","+"); +// Add a new browser history entry. +// History.newItem(result); + History.newItem(key); } + /** - * Set a pair of key - object in the History (using a map) - * @param key - * @param obj + * This method examines the token input and add a "/" at the end in case it's omitted. + * This happens only in Files/trash/, Files/shared/, Files/others. + * + * @param tokenInput + * @return the formated token with a "/" at the end or the same tokenInput parameter */ - public void setHistory(String key, Object obj){ - map.put(key, obj); + private String handleSpecialFolderNames(String tokenInput){ + List pathsToCheck = Arrays.asList("Files/trash", "Files/shared", "Files/others"); + if(pathsToCheck.contains(tokenInput)) + return tokenInput + "/"; + return tokenInput; + } + + /** + * Reject illegal resource names, like '.' or '..'. + */ + static boolean isValidResourceName(String name) { + if (".".equals(name) || "..".equals(name)) + return false; + return true; + } + + }