X-Git-Url: https://code.grnet.gr/git/pithos/blobdiff_plain/0903161008e82eb679f103f9f11766b54abb8c7e..e8b6efa2de2abd2878c933e3429339b7dd90dc3c:/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 ec3e64d..d5d662d 100644 --- a/src/gr/ebs/gss/client/GSS.java +++ b/src/gr/ebs/gss/client/GSS.java @@ -19,22 +19,20 @@ package gr.ebs.gss.client; import gr.ebs.gss.client.clipboard.Clipboard; -import gr.ebs.gss.client.dnd.DnDFocusPanel; -import gr.ebs.gss.client.dnd.DnDSimpleFocusPanel; import gr.ebs.gss.client.rest.GetCommand; import gr.ebs.gss.client.rest.RestException; import gr.ebs.gss.client.rest.resource.FileResource; import gr.ebs.gss.client.rest.resource.FolderResource; +import gr.ebs.gss.client.rest.resource.RestResource; +import gr.ebs.gss.client.rest.resource.RestResourceWrapper; import gr.ebs.gss.client.rest.resource.TrashResource; import gr.ebs.gss.client.rest.resource.UserResource; import java.util.Arrays; -import java.util.Iterator; +import java.util.Date; +import java.util.HashMap; import java.util.List; -import com.allen_sauer.gwt.dnd.client.DragContext; -import com.allen_sauer.gwt.dnd.client.PickupDragController; -import com.allen_sauer.gwt.dnd.client.VetoDragException; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.event.logical.shared.ResizeEvent; @@ -43,29 +41,23 @@ 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.i18n.client.DateTimeFormat; 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.Cookies; -import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.DeferredCommand; import com.google.gwt.user.client.History; import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.DecoratedTabPanel; import com.google.gwt.user.client.ui.DockPanel; -import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalSplitPanel; -import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.TabPanel; -import com.google.gwt.user.client.ui.TreeItem; import com.google.gwt.user.client.ui.VerticalPanel; -import com.google.gwt.user.client.ui.Widget; - /** * Entry point classes define onModuleLoad(). */ @@ -90,7 +82,7 @@ public class GSS implements EntryPoint, ResizeHandler { * An aggregate image bundle that pulls together all the images for this * application into a single bundle. */ - public interface Images extends ClientBundle, TopPanel.Images, StatusPanel.Images, FileMenu.Images, EditMenu.Images, SettingsMenu.Images, GroupMenu.Images, FilePropertiesDialog.Images, MessagePanel.Images, FileList.Images, SearchResults.Images, Search.Images, Groups.Images, Folders.Images { + public interface Images extends ClientBundle, TopPanel.Images, StatusPanel.Images, FileMenu.Images, EditMenu.Images, SettingsMenu.Images, GroupMenu.Images, FilePropertiesDialog.Images, MessagePanel.Images, FileList.Images, SearchResults.Images, Search.Images, Groups.Images, CellTreeView.Images { @Source("gr/ebs/gss/resources/document.png") ImageResource folders(); @@ -183,8 +175,8 @@ public class GSS implements EntryPoint, ResizeHandler { /** * The widget that displays the tree of folders. */ - private Folders folders = new Folders(images); - + + private CellTreeView treeView = new CellTreeView(images); /** * The currently selected item in the application, for use by the Edit menu * commands. Potential types are Folder, File, User and Group. @@ -201,67 +193,18 @@ public class GSS implements EntryPoint, ResizeHandler { */ private String webDAVPassword; - private PickupDragController dragController; + + + public HashMap userFullNameMap = new HashMap(); + @Override public void onModuleLoad() { // Initialize the singleton before calling the constructors of the // various widgets that might call GSS.get(). singleton = this; RootPanel.get().add(glassPanel, 0, 0); parseUserCredentials(); - dragController = new PickupDragController(RootPanel.get(), false) { - - @Override - public void previewDragStart() throws VetoDragException { - super.previewDragStart(); - if (context.selectedWidgets.isEmpty()) - throw new VetoDragException(); - - if (context.draggable != null) - if (context.draggable instanceof DnDFocusPanel) { - DnDFocusPanel toDrop = (DnDFocusPanel) context.draggable; - // prevent drag and drop for trashed files and for - // unselected tree items - if (toDrop.getFiles() != null && folders.isTrashItem(folders.getCurrent())) - throw new VetoDragException(); - else if (toDrop.getItem() != null && !toDrop.getItem().equals(folders.getCurrent())) - throw new VetoDragException(); - else if (toDrop.getItem() != null && !toDrop.getItem().isDraggable()) - throw new VetoDragException(); - - } else if (context.draggable instanceof DnDSimpleFocusPanel) { - DnDSimpleFocusPanel toDrop = (DnDSimpleFocusPanel) context.draggable; - // prevent drag and drop for trashed files and for - // unselected tree items - if (toDrop.getFiles() != null && folders.isTrashItem(folders.getCurrent())) - throw new VetoDragException(); - } - } - - @Override - protected Widget newDragProxy(DragContext aContext) { - AbsolutePanel container = new AbsolutePanel(); - DOM.setStyleAttribute(container.getElement(), "overflow", "visible"); - for (Iterator iterator = aContext.selectedWidgets.iterator(); iterator.hasNext();) { - HTML html = null; - Widget widget = (Widget) iterator.next(); - if (widget instanceof DnDFocusPanel) { - DnDFocusPanel book = (DnDFocusPanel) widget; - html = book.cloneHTML(); - } else if (widget instanceof DnDSimpleFocusPanel) { - DnDSimpleFocusPanel book = (DnDSimpleFocusPanel) widget; - html = book.cloneHTML(); - } - if (html == null) - container.add(new Label("Drag ME")); - else - container.add(html); - } - return container; - } - }; - dragController.setBehaviorDragProxy(true); - dragController.setBehaviorMultipleSelection(false); + topPanel = new TopPanel(GSS.images); topPanel.setWidth("100%"); @@ -288,6 +231,7 @@ public class GSS implements EntryPoint, ResizeHandler { inner.add(groups, createHeaderHTML(AbstractImagePrototype.create(images.groups()), "Groups"), true); inner.add(searchResults, createHeaderHTML(AbstractImagePrototype.create(images.search()), "Search Results"), true); + //inner.add(new CellTreeView(images), createHeaderHTML(AbstractImagePrototype.create(images.search()), "Cell tree sample"), true); inner.setWidth("100%"); inner.selectTab(0); @@ -321,33 +265,34 @@ public class GSS implements EntryPoint, ResizeHandler { String initToken = History.getToken(); if(initToken.length() == 0) History.newItem("Files"); - - // Add history listener to handle any history events - History.addValueChangeHandler(new ValueChangeHandler() { - 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")|| 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); - } - } - }); + 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")|| historyToken.length()==0) + inner.selectTab(0); + else { + /*TODO: CELLTREE + 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); + splitPanel.setLeftWidget(treeView); splitPanel.setRightWidget(inner); splitPanel.setSplitPosition("25%"); splitPanel.setSize("100%", "100%"); @@ -380,6 +325,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()); } @@ -402,6 +348,7 @@ public class GSS implements EntryPoint, ResizeHandler { if (announcement != null) DeferredCommand.addCommand(new Command() { + @Override public void execute() { displayInformation(announcement); } @@ -445,6 +392,7 @@ public class GSS implements EntryPoint, ResizeHandler { DeferredCommand.addCommand(new Command() { + @Override public void execute() { fetchUser(username); } @@ -490,6 +438,10 @@ public class GSS implements EntryPoint, ResizeHandler { if (newHeight < 1) newHeight = 1; splitPanel.setHeight("" + newHeight); + inner.setHeight("" + newHeight); + /*if(isFileListShowing()){ + getFileList().setHeight("" + (newHeight-50)); + }*/ } @Override @@ -533,7 +485,40 @@ public class GSS implements EntryPoint, ResizeHandler { * @param update */ public void showFileList(boolean update) { - TreeItem currentFolder = getFolders().getCurrent(); + /*TreeItem currentFolder = getFolders().getCurrent(); + if (currentFolder != null) { + List files = null; + Object cachedObject = currentFolder.getUserObject(); + if (cachedObject instanceof FolderResource) { + FolderResource folder = (FolderResource) cachedObject; + files = folder.getFiles(); + } else if (cachedObject instanceof TrashResource) { + TrashResource folder = (TrashResource) cachedObject; + files = folder.getFiles(); + } + if (files != null) + getFileList().setFiles(files); + }*/ + RestResource currentFolder = getTreeView().getSelection(); + GWT.log("SELECTED:"+currentFolder); + if(currentFolder!=null){ + List files = null; + if (currentFolder instanceof RestResourceWrapper) { + RestResourceWrapper folder = (RestResourceWrapper) currentFolder; + files = folder.getResource().getFiles(); + } else if (currentFolder instanceof TrashResource) { + TrashResource folder = (TrashResource) currentFolder; + files = folder.getFiles(); + } + if (files != null) + getFileList().setFiles(files); + } + fileList.updateFileCache(update, true /*clear selection*/); + inner.selectTab(0); + } + + public void showFileList(RestResource r,boolean update) { + /*TreeItem currentFolder = getFolders().getCurrent(); if (currentFolder != null) { List files = null; Object cachedObject = currentFolder.getUserObject(); @@ -546,6 +531,20 @@ public class GSS implements EntryPoint, ResizeHandler { } if (files != null) getFileList().setFiles(files); + }*/ + RestResource currentFolder = r; + GWT.log("SELECTED:"+currentFolder); + if(currentFolder!=null){ + List files = null; + if (currentFolder instanceof RestResourceWrapper) { + RestResourceWrapper folder = (RestResourceWrapper) currentFolder; + files = folder.getResource().getFiles(); + } else if (currentFolder instanceof TrashResource) { + TrashResource folder = (TrashResource) currentFolder; + files = folder.getFiles(); + } + if (files != null) + getFileList().setFiles(files); } fileList.updateFileCache(update, true /*clear selection*/); inner.selectTab(0); @@ -628,10 +627,10 @@ public class GSS implements EntryPoint, ResizeHandler { * Retrieve the folders. * * @return the folders - */ + public Folders getFolders() { return folders; - } + }*/ /** * Retrieve the search. @@ -713,14 +712,7 @@ public class GSS implements EntryPoint, ResizeHandler { return userDetailsPanel; } - /** - * Retrieve the dragController. - * - * @return the dragController - */ - public PickupDragController getDragController() { - return dragController; - } + public String getToken() { return token; @@ -779,6 +771,25 @@ public class GSS implements EntryPoint, ResizeHandler { } /** + * Convert server date to local time according to browser timezone + * and format it according to localized pattern. + * Time is always formatted to 24hr format. + * NB: This assumes that server runs in UTC timezone. Otherwise + * we would need to adjust for server time offset as well. + * + * @param date + * @return String + */ + public static String formatLocalDateTime(Date date) { + Date convertedDate = new Date(date.getTime() - date.getTimezoneOffset()); + final DateTimeFormat dateFormatter = DateTimeFormat.getShortDateFormat(); + final DateTimeFormat timeFormatter = DateTimeFormat.getFormat("HH:mm"); + String datePart = dateFormatter.format(convertedDate); + String timePart = timeFormatter.format(convertedDate); + return datePart + " " + timePart; + } + + /** * History support for folder navigation * adds a new browser history entry * @@ -800,11 +811,45 @@ public class GSS implements EntryPoint, ResizeHandler { * @return the formated token with a "/" at the end or the same tokenInput parameter */ - public String handleSpecialFolderNames(String tokenInput){ + 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 '..' or slashes '/'. + */ + static boolean isValidResourceName(String name) { + if (".".equals(name) || "..".equals(name) || name.contains("/")) + return false; + return true; + } + + public void putUserToMap(String _userName, String _userFullName){ + userFullNameMap.put(_userName, _userFullName); + } + + public String findUserFullName(String _userName){ + return userFullNameMap.get(_userName); + } + + /** + * Retrieve the treeView. + * + * @return the treeView + */ + public CellTreeView getTreeView() { + return treeView; + } + + public void onResourceUpdate(RestResource resource){ + if(resource instanceof RestResourceWrapper){ + if(getTreeView().getSelection()!=null&&getTreeView().getSelection().getUri().equals(resource.getUri())) + showFileList(resource,true); + } + + } }