Automated merge with https://gss.googlecode.com/hg/
[pithos] / src / gr / ebs / gss / client / GSS.java
index d114c7b..b3f53c9 100644 (file)
@@ -19,6 +19,7 @@
 package gr.ebs.gss.client;
 
 import gr.ebs.gss.client.clipboard.Clipboard;
+import gr.ebs.gss.client.commands.GetUserCommand;
 import gr.ebs.gss.client.dnd.DnDFocusPanel;
 import gr.ebs.gss.client.dnd.DnDSimpleFocusPanel;
 import gr.ebs.gss.client.rest.GetCommand;
@@ -29,6 +30,8 @@ import gr.ebs.gss.client.rest.resource.TrashResource;
 import gr.ebs.gss.client.rest.resource.UserResource;
 
 import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 
@@ -43,6 +46,7 @@ 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;
@@ -203,6 +207,9 @@ public class GSS implements EntryPoint, ResizeHandler {
 
        private PickupDragController dragController;
 
+       public HashMap<String, String> userFullNameMap = new HashMap<String, String>();
+
+       @Override
        public void onModuleLoad() {
                // Initialize the singleton before calling the constructors of the
                // various widgets that might call GSS.get().
@@ -213,37 +220,52 @@ public class GSS implements EntryPoint, ResizeHandler {
 
                        @Override
                        public void previewDragStart() throws VetoDragException {
-                               super.previewDragStart();
-                               if (context.selectedWidgets.isEmpty())
+                           super.previewDragStart();
+                           if (context.selectedWidgets.isEmpty())
                                        throw new VetoDragException();
 
-                               if (context.draggable != null)
-                                       if (context.draggable instanceof DnDFocusPanel) {
+                           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()))
+                                               if(toDrop.getFiles() != null && folders.isTrashItem(folders.getCurrent()))
                                                        throw new VetoDragException();
-                                               else if (toDrop.getItem() != null && !toDrop.getItem().equals(folders.getCurrent()))
+                                               else if(toDrop.getItem() != null && !toDrop.getItem().equals(folders.getCurrent()))
                                                        throw new VetoDragException();
-                                               else if (toDrop.getItem() != null && !toDrop.getItem().isDraggable())
+                                               else if(toDrop.getItem() != null && !toDrop.getItem().isDraggable())
                                                        throw new VetoDragException();
 
                                        } else if (context.draggable instanceof DnDSimpleFocusPanel) {
-                                               DnDSimpleFocusPanel toDrop = (DnDSimpleFocusPanel) context.draggable;
+                                       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()))
+                                               if(toDrop.getFiles() != null && folders.isTrashItem(folders.getCurrent()))
                                                        throw new VetoDragException();
-                                       }
-                       }
+                               }
+                         }
 
                        @Override
                        protected Widget newDragProxy(DragContext aContext) {
                                AbsolutePanel container = new AbsolutePanel();
+                               HTML html = null;
                                DOM.setStyleAttribute(container.getElement(), "overflow", "visible");
+                               if(aContext.draggable!=null && aContext.draggable.getParent()!= null && aContext.draggable.getParent() instanceof FileTable){
+                                       if(getFileList().getSelectedFiles().size()>1){
+                                               html=new HTML(getFileList().getSelectedFiles().size()+ " files");
+                                               container.add(html);
+                                               return container;
+                                       }
+                                       FileTable proxy;
+                                   proxy = new FileTable(1,8);
+                                   proxy.addStyleName("gss-List");
+                                   FileTable draggableTable = (FileTable) context.draggable.getParent();
+                                   int dragRow = FileTable.getWidgetRow(context.draggable, draggableTable);
+                                   FileTable.copyRow(draggableTable, proxy, dragRow, 0);
+                                   return proxy;
+
+                               }
                                for (Iterator iterator = aContext.selectedWidgets.iterator(); iterator.hasNext();) {
-                                       HTML html = null;
                                        Widget widget = (Widget) iterator.next();
                                        if (widget instanceof DnDFocusPanel) {
                                                DnDFocusPanel book = (DnDFocusPanel) widget;
@@ -252,10 +274,11 @@ public class GSS implements EntryPoint, ResizeHandler {
                                                DnDSimpleFocusPanel book = (DnDSimpleFocusPanel) widget;
                                                html = book.cloneHTML();
                                        }
-                                       if (html == null)
+                                       if(html == null)
                                                container.add(new Label("Drag ME"));
                                        else
                                                container.add(html);
+                                       return container;
                                }
                                return container;
                        }
@@ -321,31 +344,29 @@ 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<String>() {
-                             public void onValueChange(ValueChangeEvent<String> event) {
-                               String tokenInput = event.getValue();
-                               String historyToken = handleSpecialFolderNames(tokenInput);
-                               GWT.log("tokenInput ='" +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<String>() {
+                       @Override
+                       public void onValueChange(ValueChangeEvent<String> 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);
+                               }
+                       }
+               });
 
                // Add the left and right panels to the split panel.
                splitPanel.setLeftWidget(folders);
@@ -381,6 +402,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());
                        }
@@ -403,6 +425,7 @@ public class GSS implements EntryPoint, ResizeHandler {
                                if (announcement != null)
                                        DeferredCommand.addCommand(new Command() {
 
+                                               @Override
                                                public void execute() {
                                                        displayInformation(announcement);
                                                }
@@ -446,6 +469,7 @@ public class GSS implements EntryPoint, ResizeHandler {
 
                DeferredCommand.addCommand(new Command() {
 
+                       @Override
                        public void execute() {
                                fetchUser(username);
                        }
@@ -780,6 +804,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
         *
@@ -801,11 +844,41 @@ 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<String> 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);
+       }
+
+       public String getUserFullName(String _userName) {
+               if (GSS.get().findUserFullName(_userName) == null)
+                       //if there is no userFullName found then the map fills with the given _userName,
+                       //so userFullName = _userName
+                       GSS.get().putUserToMap(_userName, _userName);
+               else if(GSS.get().findUserFullName(_userName).indexOf('@') != -1){
+                       //if the userFullName = _userName the GetUserCommand updates the userFullName in the map
+                       GetUserCommand guc = new GetUserCommand(_userName);
+                       guc.execute();
+               }
+               return GSS.get().findUserFullName(_userName);
+       }
 }