display shared icon for folders and files in User's folder tree
authorkoutsoub <devnull@localhost>
Mon, 27 Apr 2009 16:21:24 +0000 (16:21 +0000)
committerkoutsoub <devnull@localhost>
Mon, 27 Apr 2009 16:21:24 +0000 (16:21 +0000)
16 files changed:
gss/src/gr/ebs/gss/client/FileList.java
gss/src/gr/ebs/gss/client/rest/resource/FileResource.java
gss/src/gr/ebs/gss/client/tree/FolderSubtree.java
gss/src/gr/ebs/gss/client/tree/MyShareSubtree.java
gss/src/gr/ebs/gss/client/tree/Subtree.java
gss/src/gr/ebs/gss/resources/mimetypes/acroread_shared.png [new file with mode: 0644]
gss/src/gr/ebs/gss/resources/mimetypes/ark2_shared.png [new file with mode: 0644]
gss/src/gr/ebs/gss/resources/mimetypes/document_shared.png [new file with mode: 0644]
gss/src/gr/ebs/gss/resources/mimetypes/html_shared.png [new file with mode: 0644]
gss/src/gr/ebs/gss/resources/mimetypes/image_shared.png [new file with mode: 0644]
gss/src/gr/ebs/gss/resources/mimetypes/kcmfontinst_shared.png [new file with mode: 0644]
gss/src/gr/ebs/gss/resources/mimetypes/knotify_shared.png [new file with mode: 0644]
gss/src/gr/ebs/gss/resources/mimetypes/kpresenter_kpr_shared.png [new file with mode: 0644]
gss/src/gr/ebs/gss/resources/mimetypes/log_shared.png [new file with mode: 0644]
gss/src/gr/ebs/gss/resources/mimetypes/txt_shared.png [new file with mode: 0644]
gss/src/gr/ebs/gss/resources/mimetypes/video2_shared.png [new file with mode: 0644]

index f39e22c..2829995 100644 (file)
@@ -21,6 +21,7 @@ package gr.ebs.gss.client;
 import gr.ebs.gss.client.dnd.DnDFocusPanel;\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
 import gr.ebs.gss.client.rest.RestCommand;\r
 import gr.ebs.gss.client.rest.RestException;\r
 import gr.ebs.gss.client.rest.resource.FileResource;\r
@@ -101,6 +102,9 @@ public class FileList extends Composite implements TableListener, ClickListener
                @Resource("gr/ebs/gss/resources/desc.png")\r
                AbstractImagePrototype desc();\r
 \r
+               @Resource("gr/ebs/gss/resources/mimetypes/document_shared.png")\r
+               AbstractImagePrototype documentShared();\r
+\r
                @Resource("gr/ebs/gss/resources/mimetypes/kcmfontinst.png")\r
                AbstractImagePrototype wordprocessor();\r
 \r
@@ -130,6 +134,37 @@ public class FileList extends Composite implements TableListener, ClickListener
 \r
                @Resource("gr/ebs/gss/resources/mimetypes/ark2.png")\r
                AbstractImagePrototype zip();\r
+\r
+               @Resource("gr/ebs/gss/resources/mimetypes/kcmfontinst_shared.png")\r
+               AbstractImagePrototype wordprocessorShared();\r
+\r
+               @Resource("gr/ebs/gss/resources/mimetypes/log_shared.png")\r
+               AbstractImagePrototype spreadsheetShared();\r
+\r
+               @Resource("gr/ebs/gss/resources/mimetypes/kpresenter_kpr_shared.png")\r
+               AbstractImagePrototype presentationShared();\r
+\r
+               @Resource("gr/ebs/gss/resources/mimetypes/acroread_shared.png")\r
+               AbstractImagePrototype pdfShared();\r
+\r
+               @Resource("gr/ebs/gss/resources/mimetypes/image_shared.png")\r
+               AbstractImagePrototype imageShared();\r
+\r
+               @Resource("gr/ebs/gss/resources/mimetypes/video2_shared.png")\r
+               AbstractImagePrototype videoShared();\r
+\r
+               @Resource("gr/ebs/gss/resources/mimetypes/knotify_shared.png")\r
+               AbstractImagePrototype audioShared();\r
+\r
+               @Resource("gr/ebs/gss/resources/mimetypes/html_shared.png")\r
+               AbstractImagePrototype htmlShared();\r
+\r
+               @Resource("gr/ebs/gss/resources/mimetypes/txt_shared.png")\r
+               AbstractImagePrototype txtShared();\r
+\r
+               @Resource("gr/ebs/gss/resources/mimetypes/ark2_shared.png")\r
+               AbstractImagePrototype zipShared();\r
+\r
        }\r
 \r
        /**\r
@@ -582,32 +617,68 @@ public class FileList extends Composite implements TableListener, ClickListener
         */\r
        private AbstractImagePrototype getFileIcon(FileResource file) {\r
                String mimetype = file.getContentType();\r
-               if (mimetype == null)\r
+               boolean shared = file.isShared();\r
+               if (mimetype == null){\r
+                       if(shared)\r
+                               return images.documentShared();\r
                        return images.document();\r
-               else if ("application/pdf".equalsIgnoreCase(mimetype))\r
+               }\r
+               else if ("application/pdf".equalsIgnoreCase(mimetype)){\r
+                       if(shared)\r
+                               return images.pdfShared();\r
                        return images.pdf();\r
-               else if ("application/vnd.ms-excel".equalsIgnoreCase(mimetype))\r
+               }\r
+               else if ("application/vnd.ms-excel".equalsIgnoreCase(mimetype)){\r
+                       if(shared)\r
+                               return images.spreadsheetShared();\r
                        return images.spreadsheet();\r
-               else if ("application/msword".equalsIgnoreCase(mimetype))\r
+               }\r
+               else if ("application/msword".equalsIgnoreCase(mimetype)){\r
+                       if(shared)\r
+                               return images.wordprocessorShared();\r
                        return images.wordprocessor();\r
-               else if ("application/vnd.ms-powerpoint".equalsIgnoreCase(mimetype))\r
+               }\r
+               else if ("application/vnd.ms-powerpoint".equalsIgnoreCase(mimetype)){\r
+                       if(shared)\r
+                               return images.presentationShared();\r
                        return images.presentation();\r
+               }\r
                else if ("application/zip".equalsIgnoreCase(mimetype) ||\r
                                        "application/gzip".equalsIgnoreCase(mimetype) ||\r
                                        "application/x-gzip".equalsIgnoreCase(mimetype) ||\r
                                        "application/x-tar".equalsIgnoreCase(mimetype) ||\r
-                                       "application/x-gtar".equalsIgnoreCase(mimetype))\r
+                                       "application/x-gtar".equalsIgnoreCase(mimetype)){\r
+                       if(shared)\r
+                               return images.zipShared();\r
                        return images.zip();\r
-               else if ("text/html".equalsIgnoreCase(mimetype))\r
+               }\r
+               else if ("text/html".equalsIgnoreCase(mimetype)){\r
+                       if(shared)\r
+                               return images.htmlShared();\r
                        return images.html();\r
-               else if ("text/plain".equalsIgnoreCase(mimetype))\r
+               }\r
+               else if ("text/plain".equalsIgnoreCase(mimetype)){\r
+                       if(shared)\r
+                               return images.txtShared();\r
                        return images.txt();\r
-               else if (mimetype.startsWith("image/"))\r
+               }\r
+               else if (mimetype.startsWith("image/")){\r
+                       if(shared)\r
+                               return images.imageShared();\r
                        return images.image();\r
-               else if (mimetype.startsWith("video/"))\r
+               }\r
+               else if (mimetype.startsWith("video/")){\r
+                       if(shared)\r
+                               return images.videoShared();\r
                        return images.video();\r
-               else if (mimetype.startsWith("audio/"))\r
+               }\r
+               else if (mimetype.startsWith("audio/")){\r
+                       if(shared)\r
+                               return images.audioShared();\r
                        return images.audio();\r
+               }\r
+               else if(shared)\r
+                       return images.documentShared();\r
                else\r
                        return images.document();\r
        }\r
@@ -645,22 +716,46 @@ public class FileList extends Composite implements TableListener, ClickListener
                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)){\r
+                                       MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, folderItem.getFolderResource().getFilePaths().toArray(new String[0])){\r
 \r
-                               GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, folderItem.getFolderResource().getUri()) {\r
+                                               public void onComplete(){\r
+                                                       folderItem.getFolderResource().setFiles(getResult());\r
+                                                       updateFileCache(clearSelection);\r
+                                               }\r
 \r
-                                       @Override\r
-                                       public void onComplete() {\r
-                                               folderItem.setUserObject(getResult());\r
-                                               updateFileCache(clearSelection);\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 folder " + folderItem.getFolderResource().getName());\r
-                                       }\r
-                               };\r
-                               DeferredCommand.addCommand(gf);\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
+                               else{\r
+                                       GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, folderItem.getFolderResource().getUri()) {\r
+\r
+                                               @Override\r
+                                               public void onComplete() {\r
+                                                       folderItem.setUserObject(getResult());\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
+                               }\r
                        } else if (folderItem.getTrashResource() != null) {\r
                                GetCommand<TrashResource> gt = new GetCommand<TrashResource>(TrashResource.class, folderItem.getTrashResource().getUri()) {\r
 \r
index 931a0b5..f41ca67 100644 (file)
@@ -496,4 +496,15 @@ public class FileResource extends RestResource {
                NumberFormat nf = NumberFormat.getFormat("######.#");
                return nf.format(res);
        }
+
+       public boolean isShared(){
+
+               for(PermissionHolder perm : permissions){
+                       if(perm.getUser() != null && !owner.equals(perm.getUser()))
+                               return true;
+                       if(perm.getGroup() != null)
+                               return true;
+               }
+               return false;
+       }
 }
index dff91a3..fe7e44d 100644 (file)
@@ -74,7 +74,7 @@ public class FolderSubtree extends Subtree {
                                tree.addItem(rootItem);
                                rootItem.doDroppable();
                                GSS.get().getFolders().select(rootItem);
-                               updateSubFoldersLazily(rootItem, rootResource.getFolders(), images.folderYellow());
+                               updateSubFoldersLazily(rootItem, rootResource.getFolders(), images.folderYellow(), images.sharedFolder());
                                rootItem.setState(true);
                        }
 
@@ -114,10 +114,10 @@ public class FolderSubtree extends Subtree {
                        public void onComplete() {
                                List<FolderResource> res = getResult();
                                folderItem.getFolderResource().setFolders(res);
-                               updateSubFoldersLazily(folderItem, res, images.folderYellow());
+                               updateSubFoldersLazily(folderItem, res, images.folderYellow(), images.sharedFolder());
                                for (int i = 0; i < folderItem.getChildCount(); i++) {
                                        DnDTreeItem anItem = (DnDTreeItem) folderItem.getChild(i);
-                                       updateSubFoldersLazily(anItem, anItem.getFolderResource().getFolders(), images.folderYellow());
+                                       updateSubFoldersLazily(anItem, anItem.getFolderResource().getFolders(), images.folderYellow(), images.sharedFolder());
                                        anItem.setState(false);
                                }
                        }
@@ -146,7 +146,10 @@ public class FolderSubtree extends Subtree {
                                FolderResource rootResource = getResult();
                                if (!folderItem.equals(rootItem)) {
                                        folderItem.undoDraggable();
-                                       folderItem.updateWidget(imageItemHTML(images.folderYellow(), rootResource.getName()));
+                                       if(rootResource.isShared())
+                                               folderItem.updateWidget(imageItemHTML(images.sharedFolder(), rootResource.getName()));
+                                       else
+                                               folderItem.updateWidget(imageItemHTML(images.folderYellow(), rootResource.getName()));
                                        folderItem.setUserObject(rootResource);
                                        folderItem.doDraggable();
                                } else{
index ab2ffe4..fe6d810 100644 (file)
@@ -110,7 +110,7 @@ public class MyShareSubtree extends Subtree {
                                        List<FolderResource> res = getResult();
                                        for (FolderResource r : res)
                                                if(r.isShared()){
-                                                       DnDTreeItem child = (DnDTreeItem) addImageItem(folderItem, r.getName(), images.folderYellow(), true);
+                                                       DnDTreeItem child = (DnDTreeItem) addImageItem(folderItem, r.getName(), images.sharedFolder(), true);
                                                        child.setUserObject(r);
                                                        child.setState(false);
                                                        child.doDraggable();
@@ -145,7 +145,7 @@ public class MyShareSubtree extends Subtree {
                                public void onComplete() {
                                        List<FolderResource> res = getResult();
                                        for (FolderResource r : res) {
-                                               DnDTreeItem child = (DnDTreeItem) addImageItem(folderItem, r.getName(), images.folderYellow(), true);
+                                               DnDTreeItem child = (DnDTreeItem) addImageItem(folderItem, r.getName(), images.sharedFolder(), true);
                                                child.setUserObject(r);
                                                child.setState(false);
                                                child.doDraggable();
@@ -190,7 +190,7 @@ public class MyShareSubtree extends Subtree {
                                                        FolderResource rootResource = getResult();
                                                        if(rootResource.isShared()){
                                                                folderItem.undoDraggable();
-                                                               folderItem.updateWidget(imageItemHTML(images.folderYellow(), rootResource.getName()));
+                                                               folderItem.updateWidget(imageItemHTML(images.sharedFolder(), rootResource.getName()));
                                                                folderItem.setUserObject(rootResource);
                                                                folderItem.doDraggable();
                                                                update(folderItem);
@@ -248,10 +248,10 @@ public class MyShareSubtree extends Subtree {
                node.getWidget().removeStyleName("gss-SelectedRow");
                if (node instanceof DnDTreeItem) {
                        ((DnDTreeItem) node).undoDraggable();
-                       ((DnDTreeItem) node).updateWidget(imageItemHTML(images.folderYellow(), folder.getName()));
+                       ((DnDTreeItem) node).updateWidget(imageItemHTML(images.sharedFolder(), folder.getName()));
                        ((DnDTreeItem) node).doDraggable();
                } else
-                       node.setWidget(imageItemHTML(images.folderYellow(), folder.getName()));
+                       node.setWidget(imageItemHTML(images.sharedFolder(), folder.getName()));
                node.setUserObject(folder);
        }
 }
index cbc11a5..95cb0de 100644 (file)
@@ -101,6 +101,41 @@ public abstract class Subtree {
                }
        }
 
+       public void updateSubFoldersLazily(DnDTreeItem folderItem, List<FolderResource> subfolders, AbstractImagePrototype image, AbstractImagePrototype sharedImage) {
+               for (int i = 0; i < folderItem.getChildCount(); i++) {
+                       DnDTreeItem c = (DnDTreeItem) folderItem.getChild(i);
+                       FolderResource f = (FolderResource) c.getUserObject();
+                       if (!listContainsFolder(f, subfolders)) {
+                               c.undoDraggable();
+                               folderItem.removeItem(c);
+                       }
+               }
+
+               LinkedList<DnDTreeItem> itemList = new LinkedList();
+               for (FolderResource subfolder : subfolders) {
+                       DnDTreeItem item = folderItem.getChild(subfolder);
+                       if (item == null){
+                               if(subfolder.isShared())
+                                       item = (DnDTreeItem) addImageItem(folderItem, subfolder.getName(), sharedImage, true);
+                               else
+                                       item = (DnDTreeItem) addImageItem(folderItem, subfolder.getName(), image, true);
+                       } else if(subfolder.isShared())
+                               item.updateWidget(imageItemHTML(sharedImage, subfolder.getName()));
+                       else
+                               item.updateWidget(imageItemHTML(image, subfolder.getName()));
+                       item.setUserObject(subfolder);
+                       itemList.add(item);
+               }
+               for (DnDTreeItem it : itemList)
+                       it.remove();
+               for (DnDTreeItem it : itemList)
+                       folderItem.addItem(it);
+               for (int i = 0; i < folderItem.getChildCount(); i++) {
+                       DnDTreeItem c = (DnDTreeItem) folderItem.getChild(i);
+                       c.doDraggable();
+               }
+       }
+
        private boolean listContainsFolder(FolderResource folder, List<FolderResource> subfolders) {
                for (FolderResource f : subfolders)
                        if (f.getUri().equals(folder.getUri()))
diff --git a/gss/src/gr/ebs/gss/resources/mimetypes/acroread_shared.png b/gss/src/gr/ebs/gss/resources/mimetypes/acroread_shared.png
new file mode 100644 (file)
index 0000000..c67b8c2
Binary files /dev/null and b/gss/src/gr/ebs/gss/resources/mimetypes/acroread_shared.png differ
diff --git a/gss/src/gr/ebs/gss/resources/mimetypes/ark2_shared.png b/gss/src/gr/ebs/gss/resources/mimetypes/ark2_shared.png
new file mode 100644 (file)
index 0000000..26496df
Binary files /dev/null and b/gss/src/gr/ebs/gss/resources/mimetypes/ark2_shared.png differ
diff --git a/gss/src/gr/ebs/gss/resources/mimetypes/document_shared.png b/gss/src/gr/ebs/gss/resources/mimetypes/document_shared.png
new file mode 100644 (file)
index 0000000..d59243b
Binary files /dev/null and b/gss/src/gr/ebs/gss/resources/mimetypes/document_shared.png differ
diff --git a/gss/src/gr/ebs/gss/resources/mimetypes/html_shared.png b/gss/src/gr/ebs/gss/resources/mimetypes/html_shared.png
new file mode 100644 (file)
index 0000000..1442a6a
Binary files /dev/null and b/gss/src/gr/ebs/gss/resources/mimetypes/html_shared.png differ
diff --git a/gss/src/gr/ebs/gss/resources/mimetypes/image_shared.png b/gss/src/gr/ebs/gss/resources/mimetypes/image_shared.png
new file mode 100644 (file)
index 0000000..ca874f1
Binary files /dev/null and b/gss/src/gr/ebs/gss/resources/mimetypes/image_shared.png differ
diff --git a/gss/src/gr/ebs/gss/resources/mimetypes/kcmfontinst_shared.png b/gss/src/gr/ebs/gss/resources/mimetypes/kcmfontinst_shared.png
new file mode 100644 (file)
index 0000000..3121689
Binary files /dev/null and b/gss/src/gr/ebs/gss/resources/mimetypes/kcmfontinst_shared.png differ
diff --git a/gss/src/gr/ebs/gss/resources/mimetypes/knotify_shared.png b/gss/src/gr/ebs/gss/resources/mimetypes/knotify_shared.png
new file mode 100644 (file)
index 0000000..f6737ca
Binary files /dev/null and b/gss/src/gr/ebs/gss/resources/mimetypes/knotify_shared.png differ
diff --git a/gss/src/gr/ebs/gss/resources/mimetypes/kpresenter_kpr_shared.png b/gss/src/gr/ebs/gss/resources/mimetypes/kpresenter_kpr_shared.png
new file mode 100644 (file)
index 0000000..0dd8eeb
Binary files /dev/null and b/gss/src/gr/ebs/gss/resources/mimetypes/kpresenter_kpr_shared.png differ
diff --git a/gss/src/gr/ebs/gss/resources/mimetypes/log_shared.png b/gss/src/gr/ebs/gss/resources/mimetypes/log_shared.png
new file mode 100644 (file)
index 0000000..548e79a
Binary files /dev/null and b/gss/src/gr/ebs/gss/resources/mimetypes/log_shared.png differ
diff --git a/gss/src/gr/ebs/gss/resources/mimetypes/txt_shared.png b/gss/src/gr/ebs/gss/resources/mimetypes/txt_shared.png
new file mode 100644 (file)
index 0000000..9d8454c
Binary files /dev/null and b/gss/src/gr/ebs/gss/resources/mimetypes/txt_shared.png differ
diff --git a/gss/src/gr/ebs/gss/resources/mimetypes/video2_shared.png b/gss/src/gr/ebs/gss/resources/mimetypes/video2_shared.png
new file mode 100644 (file)
index 0000000..704b032
Binary files /dev/null and b/gss/src/gr/ebs/gss/resources/mimetypes/video2_shared.png differ