Implemented folder properties general dialog
authorChristos Stathis <chstath@ebs.gr>
Fri, 15 Jul 2011 14:14:58 +0000 (17:14 +0300)
committerChristos Stathis <chstath@ebs.gr>
Fri, 15 Jul 2011 14:14:58 +0000 (17:14 +0300)
web_client/src/gr/grnet/pithos/web/client/FileMenu.java
web_client/src/gr/grnet/pithos/web/client/FolderContextMenu.java
web_client/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java
web_client/src/gr/grnet/pithos/web/client/GSS.java
web_client/src/gr/grnet/pithos/web/client/commands/PasteCommand.java

index 1da3923..4b9c1dd 100644 (file)
@@ -131,8 +131,8 @@ public class FileMenu extends MenuBar {
 //        contextMenu.addItem(sharingItem)
 //                       .setVisible(propertiesVisible);
 //
-        if (selectedFiles.size() > 0) {
-            MenuItem propertiesItem = new MenuItem("<span>" + AbstractImagePrototype.create(images.viewText()).getHTML() + "&nbsp;Properties</span>", true, new PropertiesCommand(GSS.get(), null, selectedFiles, images, 0));
+        if (selectedFiles.size() > 0 || selectedFolder != null) {
+            MenuItem propertiesItem = new MenuItem("<span>" + AbstractImagePrototype.create(images.viewText()).getHTML() + "&nbsp;Properties</span>", true, new PropertiesCommand(GSS.get(), null, selectedFiles.size() > 0 ? selectedFiles : selectedFolder, images, 0));
             addItem(propertiesItem);
         }
        }
index 4d39001..5de0b04 100644 (file)
@@ -125,8 +125,8 @@ public class FolderContextMenu extends PopupPanel {
 //        MenuItem sharing = new MenuItem("<span id = 'folderContextMenu.sharing'>" + AbstractImagePrototype.create(newImages.sharing()).getHTML() + "&nbsp;Sharing</span>", true, new PropertiesCommand(this, newImages, 1));
 //        contextMenu.addItem(sharing);
 
-//        MenuItem properties = new MenuItem("<span id = 'folderContextMenu.properties'>" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + "&nbsp;Properties</span>", true, new PropertiesCommand(this, newImages, 0));
-//        contextMenu.addItem(properties);
+        MenuItem properties = new MenuItem("<span id = 'folderContextMenu.properties'>" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + "&nbsp;Properties</span>", true, new PropertiesCommand(GSS.get(), this, folder, newImages, 0));
+        contextMenu.addItem(properties);
 
                add(contextMenu);
        }
index 0f026c9..415f76b 100644 (file)
@@ -36,7 +36,9 @@ package gr.grnet.pithos.web.client;
 \r
 import com.google.gwt.core.client.Scheduler;\r
 import com.google.gwt.event.dom.client.KeyDownEvent;\r
+import com.google.gwt.user.client.Command;\r
 import com.google.gwt.user.client.Event;\r
+import gr.grnet.pithos.web.client.foldertree.File;\r
 import gr.grnet.pithos.web.client.foldertree.Folder;\r
 import gr.grnet.pithos.web.client.foldertree.Resource;\r
 import gr.grnet.pithos.web.client.rest.PostCommand;\r
@@ -64,6 +66,7 @@ import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.TabPanel;\r
 import com.google.gwt.user.client.ui.TextBox;\r
 import com.google.gwt.user.client.ui.VerticalPanel;\r
+import java.util.Iterator;\r
 \r
 /**\r
  * The 'Folder properties' dialog box implementation.\r
@@ -132,6 +135,7 @@ public class FolderPropertiesDialog extends DialogBox {
                generalTable.setText(2, 0, "Creator");\r
                generalTable.setText(3, 0, "Last modified");\r
                folderName.setText(create ? "" : folder.getName());\r
+        folderName.setReadOnly(folder.isContainer());\r
                generalTable.setWidget(0, 1, folderName);\r
 \r
                if (create)\r
@@ -354,6 +358,44 @@ public class FolderPropertiesDialog extends DialogBox {
 //                     }\r
 //             };\r
 //             DeferredCommand.addCommand(ep);\r
+        final String newName = folderName.getText();\r
+        if (!folder.isContainer() && !folder.getName().equals(newName)) {\r
+            final String path = app.getApiPath() + app.getUsername() + folder.getParent().getUri() + "/" + newName;\r
+            PutRequest newFolder = new PutRequest(path) {\r
+                @Override\r
+                public void onSuccess(Resource result) {\r
+                    Iterator<File> iter = folder.getFiles().iterator();\r
+                    app.copyFiles(iter, folder.getParent().getUri() + "/" + newName, new Command() {\r
+                        @Override\r
+                        public void execute() {\r
+                            Iterator<Folder> iterf = folder.getSubfolders().iterator();\r
+                            app.copySubfolders(iterf, folder.getParent().getUri() + "/" + newName, new Command() {\r
+                                @Override\r
+                                public void execute() {\r
+                                    app.deleteFolder(folder);\r
+                                    app.updateFolder(folder.getParent());\r
+                                }\r
+                            });\r
+                        }\r
+                    });\r
+                }\r
+\r
+                @Override\r
+                public void onError(Throwable t) {\r
+                    GWT.log("", t);\r
+                    if(t instanceof RestException){\r
+                        app.displayError("Unable to update folder: " + ((RestException) t).getHttpStatusText());\r
+                    }\r
+                    else\r
+                        app.displayError("System error modifying folder: " + t.getMessage());\r
+                }\r
+            };\r
+            newFolder.setHeader("X-Auth-Token", app.getToken());\r
+            newFolder.setHeader("Content-Type", "application/folder");\r
+            newFolder.setHeader("Accept", "*/*");\r
+            newFolder.setHeader("Content-Length", "0");\r
+            Scheduler.get().scheduleDeferred(newFolder);\r
+        }\r
        }\r
 \r
        public void selectTab(int _tab) {\r
index 109b8c8..07ea2b6 100644 (file)
@@ -46,6 +46,7 @@ import com.google.gwt.json.client.JSONObject;
 import com.google.gwt.json.client.JSONParser;
 import com.google.gwt.json.client.JSONString;
 import com.google.gwt.json.client.JSONValue;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.view.client.SelectionChangeEvent;
 import com.google.gwt.view.client.SingleSelectionModel;
 import gr.grnet.pithos.web.client.commands.GetUserCommand;
@@ -57,6 +58,7 @@ import gr.grnet.pithos.web.client.foldertree.FolderTreeViewModel;
 import gr.grnet.pithos.web.client.foldertree.Resource;
 import gr.grnet.pithos.web.client.rest.DeleteRequest;
 import gr.grnet.pithos.web.client.rest.GetRequest;
+import gr.grnet.pithos.web.client.rest.PutRequest;
 import gr.grnet.pithos.web.client.rest.RestException;
 import gr.grnet.pithos.web.client.rest.resource.FileResource;
 import gr.grnet.pithos.web.client.rest.resource.OtherUserResource;
@@ -918,4 +920,80 @@ public class GSS implements EntryPoint, ResizeHandler {
     public FolderTreeView getFolderTreeView() {
         return folderTreeView;
     }
+
+    public void copyFiles(final Iterator<File> iter, final String targetUri, final Command callback) {
+        if (iter.hasNext()) {
+            File file = iter.next();
+            String path = getApiPath() + getUsername() + targetUri + "/" + file.getName();
+            PutRequest copyFile = new PutRequest(path) {
+                @Override
+                public void onSuccess(Resource result) {
+                    copyFiles(iter, targetUri, callback);
+                }
+
+                @Override
+                public void onError(Throwable t) {
+                    GWT.log("", t);
+                    if (t instanceof RestException) {
+                        GSS.get().displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText());
+                    }
+                    else
+                        GSS.get().displayError("System error unable to copy file: "+t.getMessage());
+                }
+            };
+            copyFile.setHeader("X-Auth-Token", getToken());
+            copyFile.setHeader("X-Copy-From", file.getUri());
+            Scheduler.get().scheduleDeferred(copyFile);
+        }
+        else  if (callback != null) {
+            callback.execute();
+        }
+    }
+
+    public void copySubfolders(final Iterator<Folder> iter, final String targetUri, final Command callback) {
+        if (iter.hasNext()) {
+            final Folder f = iter.next();
+            copyFolder(f, targetUri, callback);
+        }
+        else  if (callback != null) {
+            callback.execute();
+        }
+    }
+
+    public void copyFolder(final Folder f, final String targetUri, final Command callback) {
+        String path = getApiPath() + getUsername() + targetUri + "/" + f.getName();
+        PutRequest createFolder = new PutRequest(path) {
+            @Override
+            public void onSuccess(Resource result) {
+                Iterator<File> iter = f.getFiles().iterator();
+                copyFiles(iter, targetUri + "/" + f.getName(), new Command() {
+                    @Override
+                    public void execute() {
+                        Iterator<Folder> iterf = f.getSubfolders().iterator();
+                        copySubfolders(iterf, targetUri + "/" + f.getName(), new Command() {
+                            @Override
+                            public void execute() {
+                                callback.execute();
+                            }
+                        });
+                    }
+                });
+            }
+
+            @Override
+            public void onError(Throwable t) {
+                GWT.log("", t);
+                if (t instanceof RestException) {
+                    displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText());
+                }
+                else
+                    displayError("System error creating folder:" + t.getMessage());
+            }
+        };
+        createFolder.setHeader("X-Auth-Token", getToken());
+        createFolder.setHeader("Accept", "*/*");
+        createFolder.setHeader("Content-Length", "0");
+        createFolder.setHeader("Content-Type", "application/folder");
+        Scheduler.get().scheduleDeferred(createFolder);
+    }
 }
index 465c712..2c2803c 100644 (file)
@@ -74,7 +74,7 @@ public class PasteCommand implements Command {
         if (clipboardItem instanceof Folder) {
             final Folder tobeCopied = (Folder) clipboardItem;
             if (operation == Clipboard.COPY) {
-                copyFolder(tobeCopied, folder.getUri(), new Command() {
+                app.copyFolder(tobeCopied, folder.getUri(), new Command() {
                     @Override
                     public void execute() {
                         app.getClipboard().clear();
@@ -83,7 +83,7 @@ public class PasteCommand implements Command {
                 });
             }
             else {
-                copyFolder(tobeCopied, folder.getUri(), new Command() {
+                app.copyFolder(tobeCopied, folder.getUri(), new Command() {
                     @Override
                     public void execute() {
                         app.getClipboard().clear();
@@ -91,14 +91,13 @@ public class PasteCommand implements Command {
                         app.updateFolder(folder);
                     }
                 });
-
             }
         }
         else {
             List<File> tobeCopied = (List<File>) clipboardItem;
             Iterator<File> iter = tobeCopied.iterator();
             if (operation == Clipboard.COPY) {
-                copyFiles(iter, folder.getUri(), new Command() {
+                app.copyFiles(iter, folder.getUri(), new Command() {
                     @Override
                     public void execute() {
                         app.getClipboard().clear();
@@ -146,80 +145,4 @@ public class PasteCommand implements Command {
             callback.execute();
         }
     }
-
-    private void copyFiles(final Iterator<File> iter, final String targetUri, final Command callback) {
-        if (iter.hasNext()) {
-            File file = iter.next();
-            String path = app.getApiPath() + app.getUsername() + targetUri + "/" + file.getName();
-            PutRequest copyFile = new PutRequest(path) {
-                @Override
-                public void onSuccess(Resource result) {
-                    copyFiles(iter, targetUri, callback);
-                }
-
-                @Override
-                public void onError(Throwable t) {
-                    GWT.log("", t);
-                    if (t instanceof RestException) {
-                        GSS.get().displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText());
-                    }
-                    else
-                        GSS.get().displayError("System error unable to copy file: "+t.getMessage());
-                }
-            };
-            copyFile.setHeader("X-Auth-Token", app.getToken());
-            copyFile.setHeader("X-Copy-From", file.getUri());
-            Scheduler.get().scheduleDeferred(copyFile);
-        }
-        else  if (callback != null) {
-            callback.execute();
-        }
-    }
-
-    private void copyFolder(final Folder f, final String targetUri, final Command callback) {
-        String path = app.getApiPath() + app.getUsername() + targetUri + "/" + f.getName();
-        PutRequest createFolder = new PutRequest(path) {
-            @Override
-            public void onSuccess(Resource result) {
-                Iterator<File> iter = f.getFiles().iterator();
-                copyFiles(iter, targetUri + "/" + f.getName(), new Command() {
-                    @Override
-                    public void execute() {
-                        Iterator<Folder> iterf = f.getSubfolders().iterator();
-                        copySubfolders(iterf, targetUri + "/" + f.getName(), new Command() {
-                            @Override
-                            public void execute() {
-                                callback.execute();
-                            }
-                        });
-                    }
-                });
-            }
-
-            @Override
-            public void onError(Throwable t) {
-                GWT.log("", t);
-                if (t instanceof RestException) {
-                    app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText());
-                }
-                else
-                    app.displayError("System error creating folder:" + t.getMessage());
-            }
-        };
-        createFolder.setHeader("X-Auth-Token", app.getToken());
-        createFolder.setHeader("Accept", "*/*");
-        createFolder.setHeader("Content-Length", "0");
-        createFolder.setHeader("Content-Type", "application/folder");
-        Scheduler.get().scheduleDeferred(createFolder);
-    }
-
-    private void copySubfolders(final Iterator<Folder> iter, final String targetUri, final Command callback) {
-        if (iter.hasNext()) {
-            final Folder f = iter.next();
-            copyFolder(f, targetUri, callback);
-        }
-        else  if (callback != null) {
-            callback.execute();
-        }
-    }
 }