Use SSL transport all over the place, for the production deployment.
[pithos] / src / gr / ebs / gss / client / FileList.java
index efc664d..9a91a04 100644 (file)
@@ -18,7 +18,7 @@
  */\r
 package gr.ebs.gss.client;\r
 \r
-import gr.ebs.gss.client.dnd.DnDFocusPanel;\r
+import gr.ebs.gss.client.dnd.DnDSimpleFocusPanel;\r
 import gr.ebs.gss.client.dnd.DnDTreeItem;\r
 import gr.ebs.gss.client.rest.GetCommand;\r
 import gr.ebs.gss.client.rest.MultipleHeadCommand;\r
@@ -37,6 +37,7 @@ import java.util.Comparator;
 import java.util.List;\r
 \r
 import com.google.gwt.core.client.GWT;\r
+import com.google.gwt.dom.client.NativeEvent;\r
 import com.google.gwt.event.dom.client.ClickEvent;\r
 import com.google.gwt.event.dom.client.ClickHandler;\r
 import com.google.gwt.http.client.URL;\r
@@ -87,7 +88,7 @@ public class FileList extends Composite implements ClickHandler {
        /**\r
         * The context menu for the selected file.\r
         */\r
-       final DnDFocusPanel contextMenu;\r
+       final DnDSimpleFocusPanel contextMenu;\r
 \r
        /**\r
         * Specifies that the images available for this composite will be the ones\r
@@ -177,7 +178,7 @@ public class FileList extends Composite implements ClickHandler {
        /**\r
         * The table widget with the file list.\r
         */\r
-       private Grid table = new Grid(GSS.VISIBLE_FILE_COUNT + 1, 8);\r
+       private FileTable table = new FileTable(GSS.VISIBLE_FILE_COUNT + 1, 8);\r
 \r
        /**\r
         * The navigation bar for paginating the results.\r
@@ -234,8 +235,7 @@ public class FileList extends Composite implements ClickHandler {
                prevButton.addClickHandler(this);\r
                nextButton.addClickHandler(this);\r
 \r
-               contextMenu = new DnDFocusPanel(new HTML(AbstractImagePrototype.create(images.fileContextMenu()).getHTML()));\r
-               contextMenu.addClickHandler(new FileContextMenu(images, false, false));\r
+               contextMenu = new DnDSimpleFocusPanel(new HTML(AbstractImagePrototype.create(images.fileContextMenu()).getHTML()));\r
                GSS.get().getDragController().makeDraggable(contextMenu);\r
 \r
                // Setup the table.\r
@@ -247,7 +247,8 @@ public class FileList extends Composite implements ClickHandler {
                        @Override\r
                        public void onClick(ClickEvent event) {\r
                                Cell cell = table.getCellForEvent(event);\r
-                               onRowClicked(cell.getRowIndex());\r
+                               GWT.log("row clicked:"+cell.getRowIndex(), null);\r
+                               onRowClicked(cell.getRowIndex(), true);\r
                        }\r
                });\r
                // Create the 'navigation' bar at the upper-right.\r
@@ -273,6 +274,7 @@ public class FileList extends Composite implements ClickHandler {
                });\r
                sinkEvents(Event.ONCONTEXTMENU);\r
                sinkEvents(Event.ONMOUSEUP);\r
+               sinkEvents(Event.ONMOUSEDOWN);\r
                sinkEvents(Event.ONCLICK);\r
                sinkEvents(Event.ONKEYDOWN);\r
                sinkEvents(Event.ONDBLCLICK);\r
@@ -303,6 +305,27 @@ public class FileList extends Composite implements ClickHandler {
 \r
        @Override\r
        public void onBrowserEvent(Event event) {\r
+               if (DOM.eventGetType(event) == Event.ONMOUSEDOWN && DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT){\r
+                       if (DOM.eventGetCtrlKey(event))\r
+                               clickControl = true;\r
+                       else\r
+                               clickControl = false;\r
+                       if (DOM.eventGetShiftKey(event)) {\r
+                               clickShift = true;\r
+                               if (selectedRows.size() == 1)\r
+                                       firstShift = selectedRows.get(0) - startIndex;\r
+                               //event.preventDefault();\r
+                       } else {\r
+                               clickShift = false;\r
+                               firstShift = -1;\r
+                               //event.preventDefault();\r
+                       }\r
+                       int ri = table.getRowForEvent2(event);\r
+                       if(ri != -1)\r
+                               if(!selectedRows.contains(ri-1))\r
+                                       onRowClicked(ri, false);\r
+               }\r
+\r
                if (files == null || files.size() == 0) {\r
                        if (DOM.eventGetType(event) == Event.ONCONTEXTMENU && selectedRows.size() == 0) {\r
                                FileContextMenu fm = new FileContextMenu(images, false, true);\r
@@ -338,11 +361,11 @@ public class FileList extends Composite implements ClickHandler {
                                clickShift = true;\r
                                if (selectedRows.size() == 1)\r
                                        firstShift = selectedRows.get(0) - startIndex;\r
-                               event.preventDefault();\r
+                               //event.preventDefault();\r
                        } else {\r
                                clickShift = false;\r
                                firstShift = -1;\r
-                               event.preventDefault();\r
+                               //event.preventDefault();\r
                        }\r
                }\r
                super.onBrowserEvent(event);\r
@@ -362,7 +385,7 @@ public class FileList extends Composite implements ClickHandler {
                return DONE;\r
        }\r
 \r
-       private void onRowClicked(int row) {\r
+       private void onRowClicked(int row, boolean toggleSelection) {\r
                // Select the row that was clicked (-1 to account for header row).\r
                if (row > folderFileCount)\r
                        return;\r
@@ -399,7 +422,7 @@ public class FileList extends Composite implements ClickHandler {
                                contextMenu.setFiles(getSelectedFiles());\r
                        }\r
                } else if (row > 0)\r
-                       selectRow(row - 1);\r
+                       selectRow(row - 1, toggleSelection);\r
        }\r
 \r
        /**\r
@@ -502,10 +525,10 @@ public class FileList extends Composite implements ClickHandler {
         *\r
         * @param row the row to be selected\r
         */\r
-       private void selectRow(final int row) {\r
+       private void selectRow(final int row, boolean toggleSelection) {\r
                if (row < folderFileCount) {\r
                        if (clickControl)\r
-                               if (selectedRows.contains(row)) {\r
+                               if (selectedRows.contains(row) && toggleSelection) {\r
                                        int i = selectedRows.indexOf(startIndex + row);\r
                                        selectedRows.remove(i);\r
                                        styleRow(row, false);\r
@@ -513,7 +536,7 @@ public class FileList extends Composite implements ClickHandler {
                                        selectedRows.add(startIndex + row);\r
                                        styleRow(row, true);\r
                                }\r
-                       else if (selectedRows.size() == 1 && selectedRows.contains(row)){\r
+                       else if (selectedRows.size() == 1 && selectedRows.contains(row) && toggleSelection){\r
                                clearSelectedRows();\r
                                return;\r
                        }\r
@@ -699,7 +722,22 @@ public class FileList extends Composite implements ClickHandler {
         */\r
        private AbstractImagePrototype getFileIcon(FileResource file) {\r
                String mimetype = file.getContentType();\r
-               boolean shared = file.isShared();\r
+               boolean shared=false;\r
+               Folders folders = GSS.get().getFolders();\r
+               if(folders.getCurrent() != null && folders.isOthersSharedItem(folders.getCurrent())){\r
+                       DnDTreeItem otherUser = (DnDTreeItem) folders.getUserOfSharedItem(folders.getCurrent());\r
+                       if(otherUser==null)\r
+                               shared = false;\r
+                       else{\r
+                               String uname = otherUser.getOtherUserResource().getUsername();\r
+                               if(uname==null)\r
+                                       uname = ((DnDTreeItem)folders.getSharesItem()).getOthersResource().getUsernameOfUri(otherUser.getOtherUserResource().getUri());\r
+                               if(uname != null)\r
+                                       shared = file.isShared();\r
+                       }\r
+               }\r
+               else\r
+                       shared = file.isShared();\r
                if (mimetype == null)\r
                        return shared ? AbstractImagePrototype.create(images.documentShared()) : AbstractImagePrototype.create(images.document());\r
                mimetype = mimetype.toLowerCase();\r
@@ -766,9 +804,9 @@ public class FileList extends Composite implements ClickHandler {
                        updateFileCache(clearSelection);\r
                else if (GSS.get().getFolders().getCurrent() != null) {\r
                        final DnDTreeItem folderItem = (DnDTreeItem) GSS.get().getFolders().getCurrent();\r
-                       if (folderItem.getFolderResource() != null) {\r
+                       if(GSS.get().getFolders().isFileItem(folderItem) || GSS.get().getFolders().isMySharedItem(folderItem) || GSS.get().getFolders().isOthersSharedItem(folderItem)){\r
                                update(true);\r
-                               GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, folderItem.getFolderResource().getUri()) {\r
+                               GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, folderItem.getFolderResource().getUri(),folderItem.getFolderResource()) {\r
 \r
                                                @Override\r
                                                public void onComplete() {\r
@@ -780,7 +818,7 @@ public class FileList extends Composite implements ClickHandler {
                                                                        filePaths[c] = fpath + "?" + Math.random();\r
                                                                        c++;\r
                                                                }\r
-                                                               MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths){\r
+                                                               MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getFolderResource().getFileCache()){\r
 \r
                                                                        @Override\r
                                                                        public void onComplete(){\r
@@ -791,8 +829,10 @@ public class FileList extends Composite implements ClickHandler {
                                                                                        int indexOfQuestionMark = p.lastIndexOf('?');\r
                                                                                        if(indexOfQuestionMark>0)\r
                                                                                                r.setUri(p.substring(0, indexOfQuestionMark));\r
+                                                                                       GWT.log("FETCHED:"+r.getLastModifiedSince(), null);\r
                                                                                }\r
                                                                                folderItem.getFolderResource().setFiles(result);\r
+                                                                               folderItem.getFolderResource().setFilesExpanded(true);\r
                                                                                updateFileCache(clearSelection, newFilename);\r
                                                                        }\r
 \r
@@ -823,7 +863,7 @@ public class FileList extends Composite implements ClickHandler {
                                        };\r
                                        DeferredCommand.addCommand(gf);\r
                        } else if (folderItem.getTrashResource() != null) {\r
-                               GetCommand<TrashResource> gt = new GetCommand<TrashResource>(TrashResource.class, folderItem.getTrashResource().getUri()) {\r
+                               GetCommand<TrashResource> gt = new GetCommand<TrashResource>(TrashResource.class, folderItem.getTrashResource().getUri(), null) {\r
 \r
                                        @Override\r
                                        public void onComplete() {\r
@@ -844,12 +884,50 @@ public class FileList extends Composite implements ClickHandler {
                                };\r
                                DeferredCommand.addCommand(gt);\r
                        } else if (folderItem.getSharedResource() != null) {\r
-                               GetCommand<SharedResource> gt = new GetCommand<SharedResource>(SharedResource.class, folderItem.getSharedResource().getUri()) {\r
+                               GetCommand<SharedResource> gt = new GetCommand<SharedResource>(SharedResource.class, folderItem.getSharedResource().getUri(), null) {\r
 \r
                                        @Override\r
                                        public void onComplete() {\r
                                                folderItem.setUserObject(getResult());\r
                                                updateFileCache(clearSelection, newFilename);\r
+                                               String[] filePaths = new String[folderItem.getSharedResource().getFilePaths().size()];\r
+                                               int c=0;\r
+                                               for(String fpath : folderItem.getSharedResource().getFilePaths()){\r
+                                                       filePaths[c] = fpath + "?" + Math.random();\r
+                                                       c++;\r
+                                               }\r
+                                               MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getSharedResource().getFileCache()){\r
+\r
+                                                       @Override\r
+                                                       public void onComplete(){\r
+                                                               List<FileResource> result = getResult();\r
+                                                               //remove random from path\r
+                                                               for(FileResource r : result){\r
+                                                                       String p = r.getUri();\r
+                                                                       int indexOfQuestionMark = p.lastIndexOf('?');\r
+                                                                       if(indexOfQuestionMark>0)\r
+                                                                               r.setUri(p.substring(0, indexOfQuestionMark));\r
+                                                                       GWT.log("FETCHED:"+r.getLastModifiedSince(), null);\r
+                                                               }\r
+                                                               folderItem.getSharedResource().setFiles(result);\r
+                                                               folderItem.getSharedResource().setFilesExpanded(true);\r
+                                                               updateFileCache(clearSelection, newFilename);\r
+                                                       }\r
+\r
+                                                       @Override\r
+                                                       public void onError(String p, Throwable throwable) {\r
+                                                               if(throwable instanceof RestException)\r
+                                                                       GSS.get().displayError("Unable to retrieve file details:"+((RestException)throwable).getHttpStatusText());\r
+                                                       }\r
+\r
+                                                       @Override\r
+                                                       public void onError(Throwable t) {\r
+                                                               GWT.log("", t);\r
+                                                               GSS.get().displayError("Unable to fetch files for folder " + folderItem.getFolderResource().getName());\r
+                                                       }\r
+\r
+                                               };\r
+                                               DeferredCommand.addCommand(getFiles);\r
                                        }\r
 \r
                                        @Override\r
@@ -860,12 +938,50 @@ public class FileList extends Composite implements ClickHandler {
                                };\r
                                DeferredCommand.addCommand(gt);\r
                        } else if (folderItem.getOtherUserResource() != null) {\r
-                               GetCommand<OtherUserResource> gt = new GetCommand<OtherUserResource>(OtherUserResource.class, folderItem.getOtherUserResource().getUri()) {\r
+                               GetCommand<OtherUserResource> gt = new GetCommand<OtherUserResource>(OtherUserResource.class, folderItem.getOtherUserResource().getUri(), null) {\r
 \r
                                        @Override\r
                                        public void onComplete() {\r
                                                folderItem.setUserObject(getResult());\r
                                                updateFileCache(clearSelection, newFilename);\r
+                                               String[] filePaths = new String[folderItem.getOtherUserResource().getFilePaths().size()];\r
+                                               int c=0;\r
+                                               for(String fpath : folderItem.getOtherUserResource().getFilePaths()){\r
+                                                       filePaths[c] = fpath + "?" + Math.random();\r
+                                                       c++;\r
+                                               }\r
+                                               MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getOtherUserResource().getFileCache()){\r
+\r
+                                                       @Override\r
+                                                       public void onComplete(){\r
+                                                               List<FileResource> result = getResult();\r
+                                                               //remove random from path\r
+                                                               for(FileResource r : result){\r
+                                                                       String p = r.getUri();\r
+                                                                       int indexOfQuestionMark = p.lastIndexOf('?');\r
+                                                                       if(indexOfQuestionMark>0)\r
+                                                                               r.setUri(p.substring(0, indexOfQuestionMark));\r
+                                                                       GWT.log("FETCHED:"+r.getLastModifiedSince(), null);\r
+                                                               }\r
+                                                               folderItem.getOtherUserResource().setFiles(result);\r
+                                                               folderItem.getOtherUserResource().setFilesExpanded(true);\r
+                                                               updateFileCache(clearSelection, newFilename);\r
+                                                       }\r
+\r
+                                                       @Override\r
+                                                       public void onError(String p, Throwable throwable) {\r
+                                                               if(throwable instanceof RestException)\r
+                                                                       GSS.get().displayError("Unable to retrieve file details:"+((RestException)throwable).getHttpStatusText());\r
+                                                       }\r
+\r
+                                                       @Override\r
+                                                       public void onError(Throwable t) {\r
+                                                               GWT.log("", t);\r
+                                                               GSS.get().displayError("Unable to fetch files for folder " + folderItem.getFolderResource().getName());\r
+                                                       }\r
+\r
+                                               };\r
+                                               DeferredCommand.addCommand(getFiles);\r
                                        }\r
 \r
                                        @Override\r
@@ -934,7 +1050,7 @@ public class FileList extends Composite implements ClickHandler {
                                }\r
                                clearSelectedRows();\r
                                if (row!=-1)\r
-                                       selectRow(row);\r
+                                       selectRow(row, true);\r
                        }\r
                }\r
        }\r