Formating commit. Comments fixed after code review. 1. Added a 2010 entry in copyrigh...
[pithos] / src / gr / ebs / gss / client / FileList.java
index 9cab865..34e34e2 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,29 +37,32 @@ 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
 import com.google.gwt.i18n.client.DateTimeFormat;\r
+import com.google.gwt.resources.client.ClientBundle;\r
+import com.google.gwt.resources.client.ImageResource;\r
 import com.google.gwt.user.client.DOM;\r
 import com.google.gwt.user.client.DeferredCommand;\r
 import com.google.gwt.user.client.Event;\r
 import com.google.gwt.user.client.IncrementalCommand;\r
 import com.google.gwt.user.client.Window;\r
 import com.google.gwt.user.client.ui.AbstractImagePrototype;\r
-import com.google.gwt.user.client.ui.ClickListener;\r
 import com.google.gwt.user.client.ui.Composite;\r
 import com.google.gwt.user.client.ui.Grid;\r
 import com.google.gwt.user.client.ui.HTML;\r
 import com.google.gwt.user.client.ui.HasHorizontalAlignment;\r
 import com.google.gwt.user.client.ui.HorizontalPanel;\r
-import com.google.gwt.user.client.ui.SourcesTableEvents;\r
-import com.google.gwt.user.client.ui.TableListener;\r
 import com.google.gwt.user.client.ui.TreeItem;\r
 import com.google.gwt.user.client.ui.Widget;\r
+import com.google.gwt.user.client.ui.HTMLTable.Cell;\r
 \r
 /**\r
  * A composite that displays the list of files in a particular folder.\r
  */\r
-public class FileList extends Composite implements TableListener, ClickListener {\r
+public class FileList extends Composite implements ClickHandler {\r
 \r
        private HTML prevButton = new HTML("<a href='javascript:;'>&lt; Previous</a>", true);\r
 \r
@@ -85,85 +88,85 @@ public class FileList extends Composite implements TableListener, ClickListener
        /**\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
         * available in FileContextMenu.\r
         */\r
-       public interface Images extends FileContextMenu.Images, Folders.Images {\r
+       public interface Images extends ClientBundle,FileContextMenu.Images, Folders.Images {\r
 \r
-               @Resource("gr/ebs/gss/resources/blank.gif")\r
-               AbstractImagePrototype blank();\r
+               @Source("gr/ebs/gss/resources/blank.gif")\r
+               ImageResource blank();\r
 \r
-               @Resource("gr/ebs/gss/resources/asc.png")\r
-               AbstractImagePrototype asc();\r
+               @Source("gr/ebs/gss/resources/asc.png")\r
+               ImageResource asc();\r
 \r
-               @Resource("gr/ebs/gss/resources/desc.png")\r
-               AbstractImagePrototype desc();\r
+               @Source("gr/ebs/gss/resources/desc.png")\r
+               ImageResource desc();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/document_shared.png")\r
-               AbstractImagePrototype documentShared();\r
+               @Source("gr/ebs/gss/resources/mimetypes/document_shared.png")\r
+               ImageResource documentShared();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/kcmfontinst.png")\r
-               AbstractImagePrototype wordprocessor();\r
+               @Source("gr/ebs/gss/resources/mimetypes/kcmfontinst.png")\r
+               ImageResource wordprocessor();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/log.png")\r
-               AbstractImagePrototype spreadsheet();\r
+               @Source("gr/ebs/gss/resources/mimetypes/log.png")\r
+               ImageResource spreadsheet();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/kpresenter_kpr.png")\r
-               AbstractImagePrototype presentation();\r
+               @Source("gr/ebs/gss/resources/mimetypes/kpresenter_kpr.png")\r
+               ImageResource presentation();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/acroread.png")\r
-               AbstractImagePrototype pdf();\r
+               @Source("gr/ebs/gss/resources/mimetypes/acroread.png")\r
+               ImageResource pdf();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/image.png")\r
-               AbstractImagePrototype image();\r
+               @Source("gr/ebs/gss/resources/mimetypes/image.png")\r
+               ImageResource image();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/video2.png")\r
-               AbstractImagePrototype video();\r
+               @Source("gr/ebs/gss/resources/mimetypes/video2.png")\r
+               ImageResource video();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/knotify.png")\r
-               AbstractImagePrototype audio();\r
+               @Source("gr/ebs/gss/resources/mimetypes/knotify.png")\r
+               ImageResource audio();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/html.png")\r
-               AbstractImagePrototype html();\r
+               @Source("gr/ebs/gss/resources/mimetypes/html.png")\r
+               ImageResource html();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/txt.png")\r
-               AbstractImagePrototype txt();\r
+               @Source("gr/ebs/gss/resources/mimetypes/txt.png")\r
+               ImageResource txt();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/ark2.png")\r
-               AbstractImagePrototype zip();\r
+               @Source("gr/ebs/gss/resources/mimetypes/ark2.png")\r
+               ImageResource zip();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/kcmfontinst_shared.png")\r
-               AbstractImagePrototype wordprocessorShared();\r
+               @Source("gr/ebs/gss/resources/mimetypes/kcmfontinst_shared.png")\r
+               ImageResource wordprocessorShared();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/log_shared.png")\r
-               AbstractImagePrototype spreadsheetShared();\r
+               @Source("gr/ebs/gss/resources/mimetypes/log_shared.png")\r
+               ImageResource spreadsheetShared();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/kpresenter_kpr_shared.png")\r
-               AbstractImagePrototype presentationShared();\r
+               @Source("gr/ebs/gss/resources/mimetypes/kpresenter_kpr_shared.png")\r
+               ImageResource presentationShared();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/acroread_shared.png")\r
-               AbstractImagePrototype pdfShared();\r
+               @Source("gr/ebs/gss/resources/mimetypes/acroread_shared.png")\r
+               ImageResource pdfShared();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/image_shared.png")\r
-               AbstractImagePrototype imageShared();\r
+               @Source("gr/ebs/gss/resources/mimetypes/image_shared.png")\r
+               ImageResource imageShared();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/video2_shared.png")\r
-               AbstractImagePrototype videoShared();\r
+               @Source("gr/ebs/gss/resources/mimetypes/video2_shared.png")\r
+               ImageResource videoShared();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/knotify_shared.png")\r
-               AbstractImagePrototype audioShared();\r
+               @Source("gr/ebs/gss/resources/mimetypes/knotify_shared.png")\r
+               ImageResource audioShared();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/html_shared.png")\r
-               AbstractImagePrototype htmlShared();\r
+               @Source("gr/ebs/gss/resources/mimetypes/html_shared.png")\r
+               ImageResource htmlShared();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/txt_shared.png")\r
-               AbstractImagePrototype txtShared();\r
+               @Source("gr/ebs/gss/resources/mimetypes/txt_shared.png")\r
+               ImageResource txtShared();\r
 \r
-               @Resource("gr/ebs/gss/resources/mimetypes/ark2_shared.png")\r
-               AbstractImagePrototype zipShared();\r
+               @Source("gr/ebs/gss/resources/mimetypes/ark2_shared.png")\r
+               ImageResource zipShared();\r
 \r
        }\r
 \r
@@ -175,7 +178,7 @@ public class FileList extends Composite implements TableListener, ClickListener
        /**\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
@@ -229,21 +232,25 @@ public class FileList extends Composite implements TableListener, ClickListener
        public FileList(Images _images) {\r
                images = _images;\r
 \r
-               prevButton.addClickListener(this);\r
-               nextButton.addClickListener(this);\r
+               prevButton.addClickHandler(this);\r
+               nextButton.addClickHandler(this);\r
 \r
-               contextMenu = new DnDFocusPanel(new HTML(images.fileContextMenu().getHTML()));\r
-               contextMenu.addClickListener(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
                table.setCellSpacing(0);\r
                table.setCellPadding(2);\r
                table.setWidth("100%");\r
+               table.addClickHandler(new ClickHandler() {\r
 \r
-               // Hook up events.\r
-               table.addTableListener(this);\r
-\r
+                       @Override\r
+                       public void onClick(ClickEvent event) {\r
+                               Cell cell = table.getCellForEvent(event);\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
                HorizontalPanel innerNavBar = new HorizontalPanel();\r
                innerNavBar.setStyleName("gss-ListNavBar");\r
@@ -267,34 +274,58 @@ public class FileList extends Composite implements TableListener, ClickListener
                });\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
                GSS.preventIESelection();\r
        }\r
 \r
-       public void onClick(Widget sender) {\r
-               if (sender == nextButton) {\r
+       @Override\r
+       public void onClick(ClickEvent event) {\r
+                if(event.getSource() == nextButton){\r
                        // Move forward a page.\r
                        clearSelectedRows();\r
                        startIndex += GSS.VISIBLE_FILE_COUNT;\r
                        if (startIndex >= folderFileCount)\r
                                startIndex -= GSS.VISIBLE_FILE_COUNT;\r
                        else\r
-                               update();\r
-               } else if (sender == prevButton) {\r
+                               update(false);\r
+               } else if (event.getSource() == prevButton) {\r
                        clearSelectedRows();\r
                        // Move back a page.\r
                        startIndex -= GSS.VISIBLE_FILE_COUNT;\r
                        if (startIndex < 0)\r
                                startIndex = 0;\r
                        else\r
-                               update();\r
+                               update(false);\r
                }\r
        }\r
 \r
+\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
@@ -330,11 +361,11 @@ public class FileList extends Composite implements TableListener, ClickListener
                                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
@@ -354,7 +385,7 @@ public class FileList extends Composite implements TableListener, ClickListener
                return DONE;\r
        }\r
 \r
-       public void onCellClicked(SourcesTableEvents sender, int row, int cell) {\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
@@ -372,10 +403,12 @@ public class FileList extends Composite implements TableListener, ClickListener
                                contextMenu.setFiles(getSelectedFiles());\r
                                makeRowDraggable(row);\r
                        } else if (row != -1 && row == firstShift) {\r
-                               selectedRows.add(row);\r
                                selectedRows.add(row - 1);\r
                                styleRow(row, true);\r
                                styleRow(row - 1, true);\r
+                               GSS.get().setCurrentSelection(getSelectedFiles());\r
+                               contextMenu.setFiles(getSelectedFiles());\r
+                               makeRowDraggable(row);\r
                        } else if (row < firstShift) {\r
                                GWT.log("Row is:" + row + " fs:" + firstShift, null);\r
                                clearSelectedRows();\r
@@ -389,7 +422,7 @@ public class FileList extends Composite implements TableListener, ClickListener
                                contextMenu.setFiles(getSelectedFiles());\r
                        }\r
                } else if (row > 0)\r
-                       selectRow(row - 1);\r
+                       selectRow(row - 1, toggleSelection);\r
        }\r
 \r
        /**\r
@@ -398,56 +431,57 @@ public class FileList extends Composite implements TableListener, ClickListener
         */\r
        private void initTable() {\r
                nameLabel = new HTML("Name");\r
-               nameLabel.addClickListener(new ClickListener() {\r
+               nameLabel.addClickHandler(new ClickHandler() {\r
 \r
-                       public void onClick(Widget sender) {\r
+                       @Override\r
+                       public void onClick(ClickEvent event) {\r
                                sortFiles("name");\r
-                               update();\r
+\r
                        }\r
 \r
                });\r
                versionLabel = new HTML("Version");\r
-               versionLabel.addClickListener(new ClickListener() {\r
+               versionLabel.addClickHandler(new ClickHandler() {\r
 \r
-                       public void onClick(Widget sender) {\r
+                       @Override\r
+                       public void onClick(ClickEvent event) {\r
                                sortFiles("version");\r
-                               update();\r
                        }\r
 \r
                });\r
                sizeLabel = new HTML("Size");\r
-               sizeLabel.addClickListener(new ClickListener() {\r
+               sizeLabel.addClickHandler(new ClickHandler() {\r
 \r
-                       public void onClick(Widget sender) {\r
+                       @Override\r
+                       public void onClick(ClickEvent event) {\r
                                sortFiles("size");\r
-                               update();\r
                        }\r
 \r
                });\r
-               dateLabel = new HTML("Date");\r
-               dateLabel.addClickListener(new ClickListener() {\r
+               dateLabel = new HTML("Last modified");\r
+               dateLabel.addClickHandler(new ClickHandler() {\r
 \r
-                       public void onClick(Widget sender) {\r
+                       @Override\r
+                       public void onClick(ClickEvent event) {\r
                                sortFiles("date");\r
-                               update();\r
                        }\r
 \r
                });\r
                ownerLabel = new HTML("Owner");\r
-               ownerLabel.addClickListener(new ClickListener() {\r
+               ownerLabel.addClickHandler(new ClickHandler() {\r
 \r
-                       public void onClick(Widget sender) {\r
+                       @Override\r
+                       public void onClick(ClickEvent event) {\r
                                sortFiles("owner");\r
-                               update();\r
                        }\r
 \r
                });\r
                pathLabel = new HTML("Path");\r
-               pathLabel.addClickListener(new ClickListener() {\r
+               pathLabel.addClickHandler(new ClickHandler() {\r
 \r
-                       public void onClick(Widget sender) {\r
+                       @Override\r
+                       public void onClick(ClickEvent event) {\r
                                sortFiles("path");\r
-                               update();\r
                        }\r
 \r
                });\r
@@ -491,10 +525,10 @@ public class FileList extends Composite implements TableListener, ClickListener
         *\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
@@ -502,7 +536,7 @@ public class FileList extends Composite implements TableListener, ClickListener
                                        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
@@ -547,13 +581,73 @@ public class FileList extends Composite implements TableListener, ClickListener
        /**\r
         * Update the display of the file list.\r
         */\r
-       void update() {\r
+       void update(boolean sort) {\r
                int count = folderFileCount;\r
                int max = startIndex + GSS.VISIBLE_FILE_COUNT;\r
                if (max > count)\r
                        max = count;\r
                folderTotalSize = 0;\r
 \r
+               if (sort && files != null && files.size() != 0) {\r
+                       clearLabels();\r
+                       clearSelectedRows();\r
+\r
+                       Collections.sort(files, new Comparator<FileResource>() {\r
+\r
+                               public int compare(FileResource arg0, FileResource arg1) {\r
+                                       AbstractImagePrototype descPrototype = AbstractImagePrototype.create(images.desc());\r
+                                       AbstractImagePrototype ascPrototype = AbstractImagePrototype.create(images.asc());\r
+                                       if (sortingType)\r
+                                               if (sortingProperty.equals("version")) {\r
+                                                       versionLabel.setHTML("Version&nbsp;" + descPrototype.getHTML());\r
+                                                       return arg0.getVersion().compareTo(arg1.getVersion());\r
+                                               } else if (sortingProperty.equals("owner")) {\r
+                                                       ownerLabel.setHTML("Owner&nbsp;" + descPrototype.getHTML());\r
+                                                       return arg0.getOwner().compareTo(arg1.getOwner());\r
+                                               } else if (sortingProperty.equals("date")) {\r
+                                                       dateLabel.setHTML("Date modified&nbsp;" + descPrototype.getHTML());\r
+                                                       return arg0.getModificationDate().compareTo(arg1.getModificationDate());\r
+                                               } else if (sortingProperty.equals("size")) {\r
+                                                       sizeLabel.setHTML("Size&nbsp;" + descPrototype.getHTML());\r
+                                                       return arg0.getContentLength().compareTo(arg1.getContentLength());\r
+                                               } else if (sortingProperty.equals("name")) {\r
+                                                       nameLabel.setHTML("Name&nbsp;" + descPrototype.getHTML());\r
+                                                       return arg0.getName().compareTo(arg1.getName());\r
+                                               } else if (sortingProperty.equals("path")) {\r
+                                                       pathLabel.setHTML("Path&nbsp;" + descPrototype.getHTML());\r
+                                                       return arg0.getUri().compareTo(arg1.getUri());\r
+                                               } else {\r
+                                                       nameLabel.setHTML("Name&nbsp;" + descPrototype.getHTML());\r
+                                                       return arg0.getName().compareTo(arg1.getName());\r
+                                               }\r
+                                       else if (sortingProperty.equals("version")) {\r
+                                               versionLabel.setHTML("Version&nbsp;" + ascPrototype.getHTML());\r
+                                               return arg1.getVersion().compareTo(arg0.getVersion());\r
+                                       } else if (sortingProperty.equals("owner")) {\r
+                                               ownerLabel.setHTML("Owner&nbsp;" + ascPrototype.getHTML());\r
+                                               return arg1.getOwner().compareTo(arg0.getOwner());\r
+                                       } else if (sortingProperty.equals("date")) {\r
+                                               dateLabel.setHTML("Date modified&nbsp;" + ascPrototype.getHTML());\r
+                                               return arg1.getModificationDate().compareTo(arg0.getModificationDate());\r
+                                       } else if (sortingProperty.equals("size")) {\r
+                                               sizeLabel.setHTML("Size&nbsp;" + ascPrototype.getHTML());\r
+                                               return arg1.getContentLength().compareTo(arg0.getContentLength());\r
+                                       } else if (sortingProperty.equals("name")) {\r
+                                               nameLabel.setHTML("Name&nbsp;" + ascPrototype.getHTML());\r
+                                               return arg1.getName().compareTo(arg0.getName());\r
+                                       } else if (sortingProperty.equals("path")) {\r
+                                               pathLabel.setHTML("Path&nbsp;" + ascPrototype.getHTML());\r
+                                               return arg1.getUri().compareTo(arg0.getUri());\r
+                                       } else {\r
+                                               nameLabel.setHTML("Name&nbsp;" + ascPrototype.getHTML());\r
+                                               return arg1.getName().compareTo(arg0.getName());\r
+                                       }\r
+                               }\r
+\r
+                       });\r
+               }\r
+\r
+\r
                // Show the selected files.\r
                int i = 1;\r
                for (; i < GSS.VISIBLE_FILE_COUNT + 1; ++i) {\r
@@ -568,13 +662,22 @@ public class FileList extends Composite implements TableListener, ClickListener
                        table.setWidget(i, 0, getFileIcon(file).createImage());\r
                        table.getRowFormatter().addStyleName(i, "gss-fileRow");\r
 \r
-                       table.setHTML(i, 1, file.getName());\r
+                       //add view image link for image files\r
+                       String contentType = file.getContentType();\r
+                       if (contentType.endsWith("png") || contentType.endsWith("gif") || contentType.endsWith("jpeg") )\r
+                               table.setHTML(i, 1, file.getName() + " <a href='" +\r
+                                               GSS.get().getTopPanel().getFileMenu().getDownloadURL(file) +\r
+                                               "' title='" + file.getName() + "' rel='lytebox[p]' " +\r
+                                               "onclick='myLytebox.start(this, false, false)'>" +\r
+                                               "(view)" + "</a>");\r
+                       else\r
+                               table.setHTML(i, 1, file.getName());\r
                        table.setText(i, 2, file.getOwner());\r
                        table.setText(i, 3, file.getPath());\r
                        table.setText(i, 4, String.valueOf(file.getVersion()));\r
                        table.setText(i, 5, String.valueOf(file.getFileSizeAsString()));\r
                        final DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a");\r
-                       table.setText(i, 6, formatter.format(file.getCreationDate()));\r
+                       table.setText(i, 6, formatter.format(file.getModificationDate()));\r
                        folderTotalSize += file.getContentLength();\r
                }\r
 \r
@@ -619,35 +722,50 @@ public class FileList extends Composite implements TableListener, ClickListener
         */\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 ? images.documentShared() : images.document();\r
+                       return shared ? AbstractImagePrototype.create(images.documentShared()) : AbstractImagePrototype.create(images.document());\r
                mimetype = mimetype.toLowerCase();\r
                if (mimetype.startsWith("application/pdf"))\r
-                       return shared ? images.pdfShared() : images.pdf();\r
-               else if (mimetype.startsWith("application/vnd.ms-excel"))\r
-                       return shared ? images.spreadsheetShared() : images.spreadsheet();\r
-               else if (mimetype.startsWith("application/msword"))\r
-                       return shared ? images.wordprocessorShared() : images.wordprocessor();\r
-               else if (mimetype.startsWith("application/vnd.ms-powerpoint"))\r
-                       return shared ? images.presentationShared() : images.presentation();\r
+                       return shared ? AbstractImagePrototype.create(images.pdfShared()) : AbstractImagePrototype.create(images.pdf());\r
+               else if (mimetype.endsWith("excel"))\r
+                       return shared ? AbstractImagePrototype.create(images.spreadsheetShared()) : AbstractImagePrototype.create(images.spreadsheet());\r
+               else if (mimetype.endsWith("msword"))\r
+                       return shared ? AbstractImagePrototype.create(images.wordprocessorShared()) : AbstractImagePrototype.create(images.wordprocessor());\r
+               else if (mimetype.endsWith("powerpoint"))\r
+                       return shared ? AbstractImagePrototype.create(images.presentationShared()) : AbstractImagePrototype.create(images.presentation());\r
                else if (mimetype.startsWith("application/zip") ||\r
                                        mimetype.startsWith("application/gzip") ||\r
                                        mimetype.startsWith("application/x-gzip") ||\r
                                        mimetype.startsWith("application/x-tar") ||\r
                                        mimetype.startsWith("application/x-gtar"))\r
-                       return shared ? images.zipShared() : images.zip();\r
+                       return shared ? AbstractImagePrototype.create(images.zipShared()) : AbstractImagePrototype.create(images.zip());\r
                else if (mimetype.startsWith("text/html"))\r
-                       return shared ? images.htmlShared() : images.html();\r
+                       return shared ? AbstractImagePrototype.create(images.htmlShared()) : AbstractImagePrototype.create(images.html());\r
                else if (mimetype.startsWith("text/plain"))\r
-                       return shared ? images.txtShared() : images.txt();\r
+                       return shared ? AbstractImagePrototype.create(images.txtShared()) : AbstractImagePrototype.create(images.txt());\r
                else if (mimetype.startsWith("image/"))\r
-                       return shared ? images.imageShared() : images.image();\r
+                       return shared ? AbstractImagePrototype.create(images.imageShared()) : AbstractImagePrototype.create(images.image());\r
                else if (mimetype.startsWith("video/"))\r
-                       return shared ? images.videoShared() : images.video();\r
+                       return shared ? AbstractImagePrototype.create(images.videoShared()) : AbstractImagePrototype.create(images.video());\r
                else if (mimetype.startsWith("audio/"))\r
-                       return shared ? images.audioShared() : images.audio();\r
-               return shared ? images.documentShared() : images.document();\r
+                       return shared ? AbstractImagePrototype.create(images.audioShared()) : AbstractImagePrototype.create(images.audio());\r
+               return shared ? AbstractImagePrototype.create(images.documentShared()) : AbstractImagePrototype.create(images.document());\r
        }\r
 \r
        /**\r
@@ -678,68 +796,77 @@ public class FileList extends Composite implements TableListener, ClickListener
        }\r
 \r
        public void updateFileCache(boolean updateSelectedFolder, final boolean clearSelection) {\r
+               updateFileCache(updateSelectedFolder, clearSelection, null);\r
+       }\r
+\r
+       public void updateFileCache(boolean updateSelectedFolder, final boolean clearSelection, final String newFilename) {\r
                if (!updateSelectedFolder && !GSS.get().getFolders().getTrashItem().equals(GSS.get().getFolders().getCurrent()))\r
                        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
-                               update();\r
-                               GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, folderItem.getFolderResource().getUri()) {\r
-\r
-                                               @Override\r
-                                               public void onComplete() {\r
-                                                       folderItem.setUserObject(getResult());\r
-                                                       if(GSS.get().getFolders().isFileItem(folderItem)){\r
-                                                               String[] filePaths = new String[folderItem.getFolderResource().getFilePaths().size()];\r
-                                                               int c=0;\r
-                                                               for(String fpath : folderItem.getFolderResource().getFilePaths()){\r
-                                                                       filePaths[c] = fpath + "?" + Math.random();\r
-                                                                       c++;\r
-                                                               }\r
-                                                               MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths){\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
-                                                                               }\r
-                                                                               folderItem.getFolderResource().setFiles(result);\r
-                                                                               updateFileCache(clearSelection);\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(),folderItem.getFolderResource()) {\r
+\r
+                                                       @Override\r
+                                                       public void onComplete() {\r
+                                                               folderItem.setUserObject(getResult());\r
+                                                               if(GSS.get().getFolders().isFileItem(folderItem)){\r
+                                                                       String[] filePaths = new String[folderItem.getFolderResource().getFilePaths().size()];\r
+                                                                       int c=0;\r
+                                                                       for(String fpath : folderItem.getFolderResource().getFilePaths()){\r
+                                                                               filePaths[c] = fpath + "?" + Math.random();\r
+                                                                               c++;\r
                                                                        }\r
+                                                                       MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getFolderResource().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.getFolderResource().setFiles(result);\r
+                                                                                       folderItem.getFolderResource().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
+                                                                               @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
+                                                                               @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
+                                                                       DeferredCommand.addCommand(getFiles);\r
+                                                               }\r
+                                                               else\r
+                                                                       updateFileCache(clearSelection, newFilename);\r
                                                        }\r
-                                                       else\r
-                                                               updateFileCache(clearSelection);\r
-                                               }\r
 \r
-                                               @Override\r
-                                               public void onError(Throwable t) {\r
-                                                       GWT.log("", t);\r
-                                                       GSS.get().displayError("Unable to fetch folder " + folderItem.getFolderResource().getName());\r
-                                               }\r
-                                       };\r
-                                       DeferredCommand.addCommand(gf);\r
-                       } else if (folderItem.getTrashResource() != null) {\r
-                               GetCommand<TrashResource> gt = new GetCommand<TrashResource>(TrashResource.class, folderItem.getTrashResource().getUri()) {\r
+                                                       @Override\r
+                                                       public void onError(Throwable t) {\r
+                                                               GWT.log("", t);\r
+                                                               GSS.get().displayError("Unable to fetch folder " + folderItem.getFolderResource().getName());\r
+                                                       }\r
+                                               };\r
+                                               DeferredCommand.addCommand(gf);\r
+                               }\r
+                       }\r
+                       else if (folderItem.getTrashResource() != null) {\r
+                               GetCommand<TrashResource> gt = new GetCommand<TrashResource>(TrashResource.class, folderItem.getTrashResource().getUri(), null) {\r
 \r
                                        @Override\r
                                        public void onComplete() {\r
@@ -760,12 +887,50 @@ public class FileList extends Composite implements TableListener, ClickListener
                                };\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);\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
@@ -776,12 +941,50 @@ public class FileList extends Composite implements TableListener, ClickListener
                                };\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);\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
@@ -796,24 +999,27 @@ public class FileList extends Composite implements TableListener, ClickListener
                        updateFileCache(clearSelection);\r
        }\r
 \r
+       private void updateFileCache(boolean clearSelection) {\r
+               updateFileCache(clearSelection, null);\r
+       }\r
+\r
        /**\r
         * Update the file cache with data from the server.\r
         *\r
         * @param userId the ID of the current user\r
+        * @param newFilename the new name of the previously selected file,\r
+        *                      if a rename operation has taken place\r
         */\r
-       private void updateFileCache(boolean clearSelection) {\r
+       private void updateFileCache(boolean clearSelection, String newFilename) {\r
                if (clearSelection)\r
                        clearSelectedRows();\r
                clearLabels();\r
-               sortingProperty = "name";\r
-               nameLabel.setHTML("Name&nbsp;" + images.desc().getHTML());\r
-               sortingType = true;\r
                startIndex = 0;\r
                final TreeItem folderItem = GSS.get().getFolders().getCurrent();\r
                // Validation.\r
                if (folderItem == null || GSS.get().getFolders().isOthersShared(folderItem)) {\r
                        setFiles(new ArrayList<FileResource>());\r
-                       update();\r
+                       update(true);\r
                        return;\r
                }\r
                if (folderItem instanceof DnDTreeItem) {\r
@@ -832,8 +1038,23 @@ public class FileList extends Composite implements TableListener, ClickListener
                                setFiles(dnd.getOtherUserResource().getFiles());\r
                        else\r
                                setFiles(dnd.getFolderResource().getFiles());\r
-\r
-                       update();\r
+                       update(true);\r
+\r
+                       if (!clearSelection && selectedRows.size()==1 && newFilename!=null) {\r
+                               int row = -1;\r
+                               for (int i=1; i < GSS.VISIBLE_FILE_COUNT + 1; ++i) {\r
+                                       if (startIndex + i > folderFileCount)\r
+                                               break;\r
+                                       FileResource file = files.get(startIndex + i - 1);\r
+                                       if (newFilename.equals(file.getName())) {\r
+                                               row = i-1;\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               clearSelectedRows();\r
+                               if (row!=-1)\r
+                                       selectRow(row, true);\r
+                       }\r
                }\r
        }\r
 \r
@@ -865,68 +1086,14 @@ public class FileList extends Composite implements TableListener, ClickListener
                        sortingProperty = sortProperty;\r
                        sortingType = true;\r
                }\r
-               clearLabels();\r
-               clearSelectedRows();\r
-               if (files == null || files.size() == 0)\r
-                       return;\r
-               Collections.sort(files, new Comparator<FileResource>() {\r
-\r
-                       public int compare(FileResource arg0, FileResource arg1) {\r
-                               if (sortingType)\r
-                                       if (sortProperty.equals("version")) {\r
-                                               versionLabel.setHTML("Version&nbsp;" + images.desc().getHTML());\r
-                                               return new Integer(arg0.getVersion()).compareTo(new Integer(arg1.getVersion()));\r
-                                       } else if (sortProperty.equals("owner")) {\r
-                                               ownerLabel.setHTML("Owner&nbsp;" + images.desc().getHTML());\r
-                                               return new Integer(arg0.getOwner()).compareTo(new Integer(arg1.getOwner()));\r
-                                       } else if (sortProperty.equals("date")) {\r
-                                               dateLabel.setHTML("Date&nbsp;" + images.desc().getHTML());\r
-                                               return arg0.getCreationDate().compareTo(arg1.getCreationDate());\r
-                                       } else if (sortProperty.equals("size")) {\r
-                                               sizeLabel.setHTML("Size&nbsp;" + images.desc().getHTML());\r
-                                               return new Long(arg0.getContentLength()).compareTo(new Long(arg1.getContentLength()));\r
-                                       } else if (sortProperty.equals("name")) {\r
-                                               nameLabel.setHTML("Name&nbsp;" + images.desc().getHTML());\r
-                                               return arg0.getName().compareTo(arg1.getName());\r
-                                       } else if (sortProperty.equals("path")) {\r
-                                               pathLabel.setHTML("Path&nbsp;" + images.desc().getHTML());\r
-                                               return arg0.getUri().compareTo(arg1.getUri());\r
-                                       } else {\r
-                                               nameLabel.setHTML("Name&nbsp;" + images.desc().getHTML());\r
-                                               return arg0.getName().compareTo(arg1.getName());\r
-                                       }\r
-                               else if (sortProperty.equals("version")) {\r
-                                       versionLabel.setHTML("Version&nbsp;" + images.asc().getHTML());\r
-                                       return new Integer(arg1.getVersion()).compareTo(new Integer(arg0.getVersion()));\r
-                               } else if (sortProperty.equals("owner")) {\r
-                                       ownerLabel.setHTML("Owner&nbsp;" + images.asc().getHTML());\r
-                                       return new Integer(arg1.getOwner()).compareTo(new Integer(arg0.getOwner()));\r
-                               } else if (sortProperty.equals("date")) {\r
-                                       dateLabel.setHTML("Date&nbsp;" + images.asc().getHTML());\r
-                                       return arg1.getCreationDate().compareTo(arg0.getCreationDate());\r
-                               } else if (sortProperty.equals("size")) {\r
-                                       sizeLabel.setHTML("Size&nbsp;" + images.asc().getHTML());\r
-                                       return new Long(arg1.getContentLength()).compareTo(new Long(arg0.getContentLength()));\r
-                               } else if (sortProperty.equals("name")) {\r
-                                       nameLabel.setHTML("Name&nbsp;" + images.asc().getHTML());\r
-                                       return arg1.getName().compareTo(arg0.getName());\r
-                               } else if (sortProperty.equals("path")) {\r
-                                       pathLabel.setHTML("Path&nbsp;" + images.asc().getHTML());\r
-                                       return arg1.getUri().compareTo(arg0.getUri());\r
-                               } else {\r
-                                       nameLabel.setHTML("Name&nbsp;" + images.asc().getHTML());\r
-                                       return arg1.getName().compareTo(arg0.getName());\r
-                               }\r
-                       }\r
-\r
-               });\r
+               update(true);\r
        }\r
 \r
        private void clearLabels() {\r
                nameLabel.setText("Name");\r
                versionLabel.setText("Version");\r
                sizeLabel.setText("Size");\r
-               dateLabel.setText("Date");\r
+               dateLabel.setText("Last modified");\r
                ownerLabel.setText("Owner");\r
                pathLabel.setText("Path");\r
        }\r
@@ -1009,4 +1176,6 @@ public class FileList extends Composite implements TableListener, ClickListener
                return -1;\r
        }\r
 \r
+\r
+\r
 }\r