Implemented move folder
authorChristos Stathis <chstath@ebs.gr>
Tue, 12 Jul 2011 12:03:27 +0000 (15:03 +0300)
committerChristos Stathis <chstath@ebs.gr>
Tue, 12 Jul 2011 12:03:27 +0000 (15:03 +0300)
web_client/src/gr/grnet/pithos/web/client/DeleteFolderDialog.java
web_client/src/gr/grnet/pithos/web/client/GSS.java
web_client/src/gr/grnet/pithos/web/client/commands/PasteCommand.java

index a3b3eac..2cdb475 100644 (file)
@@ -90,9 +90,9 @@ public class DeleteFolderDialog extends DialogBox {
         * The widget's constructor.\r
         * @param images the supplied images\r
         */\r
-       public DeleteFolderDialog(GSS app, Images images, Folder folder) {\r
-        this.app = app;\r
-        this.folder = folder;\r
+       public DeleteFolderDialog(GSS _app, Images images, Folder _folder) {\r
+        this.app = _app;\r
+        this.folder = _folder;\r
                // Set the dialog's caption.\r
                setText("Confirmation");\r
                setAnimationEnabled(true);\r
@@ -111,7 +111,7 @@ public class DeleteFolderDialog extends DialogBox {
                Button ok = new Button("Delete", new ClickHandler() {\r
                        @Override\r
                        public void onClick(ClickEvent event) {\r
-                               deleteFolder();\r
+                               app.deleteFolder(folder);\r
                                hide();\r
                        }\r
                });\r
@@ -136,118 +136,6 @@ public class DeleteFolderDialog extends DialogBox {
                setWidget(outer);\r
        }\r
 \r
-       /**\r
-        * Generate an RPC request to delete a folder.\r
-        *\r
-        */\r
-       private void deleteFolder() {\r
-        String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + folder.getPrefix();\r
-        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);\r
-        builder.setHeader("If-Modified-Since", "0");\r
-        builder.setHeader("X-Auth-Token", app.getToken());\r
-        try {\r
-            builder.sendRequest("", new RequestCallback() {\r
-                @Override\r
-                public void onResponseReceived(Request request, Response response) {\r
-                    if (response.getStatusCode() == Response.SC_OK) {\r
-                        JSONValue json = JSONParser.parseStrict(response.getText());\r
-                        JSONArray array = json.isArray();\r
-                        int i = 0;\r
-                        if (array != null) {\r
-                            deleteObject(i, array);\r
-                        }\r
-                    }\r
-                }\r
-\r
-                @Override\r
-                public void onError(Request request, Throwable exception) {\r
-                    GSS.get().displayError("System error unable to delete folder: " + exception.getMessage());\r
-                }\r
-            });\r
-        }\r
-        catch (RequestException e) {\r
-        }\r
-       }\r
-\r
-    private void deleteObject(final int i, final JSONArray array) {\r
-        if (i < array.size()) {\r
-            JSONObject o = array.get(i).isObject();\r
-            if (o != null && !o.containsKey("subdir")) {\r
-                JSONString name = o.get("name").isString();\r
-                String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "/" + name.stringValue();\r
-                DeleteRequest delete = new DeleteRequest(path) {\r
-                    @Override\r
-                    public void onSuccess(Resource result) {\r
-                        deleteObject(i + 1, array);\r
-                    }\r
-\r
-                    @Override\r
-                    public void onError(Throwable t) {\r
-                        GWT.log("", t);\r
-                        GSS.get().displayError("System error unable to delete folder: " + t.getMessage());\r
-                    }\r
-                };\r
-                delete.setHeader("X-Auth-Token", app.getToken());\r
-                Scheduler.get().scheduleDeferred(delete);\r
-            }\r
-            else {\r
-                String subdir = o.get("subdir").isString().stringValue();\r
-                subdir = subdir.substring(0, subdir.length() - 1);\r
-                String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + subdir;\r
-                RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);\r
-                builder.setHeader("If-Modified-Since", "0");\r
-                builder.setHeader("X-Auth-Token", app.getToken());\r
-                try {\r
-                    builder.sendRequest("", new RequestCallback() {\r
-                        @Override\r
-                        public void onResponseReceived(Request request, Response response) {\r
-                            if (response.getStatusCode() == Response.SC_OK) {\r
-                                JSONValue json = JSONParser.parseStrict(response.getText());\r
-                                JSONArray array2 = json.isArray();\r
-                                if (array2 != null) {\r
-                                    int l = array.size();\r
-                                    for (int j=0; j<array2.size(); j++) {\r
-                                        array.set(l++, array2.get(j));\r
-                                    }\r
-                                }\r
-                                deleteObject(i + 1, array);\r
-                            }\r
-                        }\r
-\r
-                        @Override\r
-                        public void onError(Request request, Throwable exception) {\r
-                            GSS.get().displayError("System error unable to delete folder: " + exception.getMessage());\r
-                        }\r
-                    });\r
-                }\r
-                catch (RequestException e) {\r
-                }\r
-            }\r
-        }\r
-        else {\r
-            String prefix = folder.getPrefix();\r
-            String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + (prefix.length() == 0 ? "" : "/" + prefix);\r
-            DeleteRequest deleteFolder = new DeleteRequest(path) {\r
-                @Override\r
-                public void onSuccess(Resource result) {\r
-                    app.updateFolder(folder.getParent());\r
-                }\r
-\r
-                @Override\r
-                public void onError(Throwable t) {\r
-                    GWT.log("", t);\r
-                    if (t instanceof RestException) {\r
-                        app.displayError("Unable to delete folder: "+((RestException) t).getHttpStatusText());\r
-                    }\r
-                    else\r
-                        GSS.get().displayError("System error unable to delete folder: " + t.getMessage());\r
-                }\r
-            };\r
-            deleteFolder.setHeader("X-Auth-Token", app.getToken());\r
-            Scheduler.get().scheduleDeferred(deleteFolder);\r
-        }\r
-    }\r
-\r
        @Override\r
        protected void onPreviewNativeEvent(NativePreviewEvent preview) {\r
                super.onPreviewNativeEvent(preview);\r
@@ -259,7 +147,7 @@ public class DeleteFolderDialog extends DialogBox {
                        switch (evt.getKeyCode()) {\r
                                case KeyCodes.KEY_ENTER:\r
                                        hide();\r
-                                       deleteFolder();\r
+                                       app.deleteFolder(folder);\r
                                        break;\r
                                case KeyCodes.KEY_ESCAPE:\r
                                        hide();\r
index 0154ed1..e952aa2 100644 (file)
@@ -36,6 +36,16 @@ package gr.grnet.pithos.web.client;
 
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
+import com.google.gwt.http.client.Request;
+import com.google.gwt.http.client.RequestBuilder;
+import com.google.gwt.http.client.RequestCallback;
+import com.google.gwt.http.client.RequestException;
+import com.google.gwt.http.client.Response;
+import com.google.gwt.json.client.JSONArray;
+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.view.client.SelectionChangeEvent;
 import com.google.gwt.view.client.SingleSelectionModel;
 import gr.grnet.pithos.web.client.commands.GetUserCommand;
@@ -44,6 +54,8 @@ import gr.grnet.pithos.web.client.foldertree.File;
 import gr.grnet.pithos.web.client.foldertree.Folder;
 import gr.grnet.pithos.web.client.foldertree.FolderTreeView;
 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.RestException;
 import gr.grnet.pithos.web.client.rest.resource.FileResource;
@@ -794,4 +806,112 @@ public class GSS implements EntryPoint, ResizeHandler {
                }
                
        }
+
+    public void deleteFolder(final Folder folder) {
+        String path = getApiPath() + getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + folder.getPrefix();
+        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
+        builder.setHeader("If-Modified-Since", "0");
+        builder.setHeader("X-Auth-Token", getToken());
+        try {
+            builder.sendRequest("", new RequestCallback() {
+                @Override
+                public void onResponseReceived(Request request, Response response) {
+                    if (response.getStatusCode() == Response.SC_OK) {
+                        JSONValue json = JSONParser.parseStrict(response.getText());
+                        JSONArray array = json.isArray();
+                        int i = 0;
+                        if (array != null) {
+                            deleteObject(folder, i, array);
+                        }
+                    }
+                }
+
+                @Override
+                public void onError(Request request, Throwable exception) {
+                    GSS.get().displayError("System error unable to delete folder: " + exception.getMessage());
+                }
+            });
+        }
+        catch (RequestException e) {
+        }
+    }
+
+    public void deleteObject(final Folder folder, final int i, final JSONArray array) {
+        if (i < array.size()) {
+            JSONObject o = array.get(i).isObject();
+            if (o != null && !o.containsKey("subdir")) {
+                JSONString name = o.get("name").isString();
+                String path = getApiPath() + getUsername() + "/" + folder.getContainer() + "/" + name.stringValue();
+                DeleteRequest delete = new DeleteRequest(path) {
+                    @Override
+                    public void onSuccess(Resource result) {
+                        deleteObject(folder, i + 1, array);
+                    }
+
+                    @Override
+                    public void onError(Throwable t) {
+                        GWT.log("", t);
+                        GSS.get().displayError("System error unable to delete folder: " + t.getMessage());
+                    }
+                };
+                delete.setHeader("X-Auth-Token", getToken());
+                Scheduler.get().scheduleDeferred(delete);
+            }
+            else {
+                String subdir = o.get("subdir").isString().stringValue();
+                subdir = subdir.substring(0, subdir.length() - 1);
+                String path = getApiPath() + getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + subdir;
+                RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
+                builder.setHeader("If-Modified-Since", "0");
+                builder.setHeader("X-Auth-Token", getToken());
+                try {
+                    builder.sendRequest("", new RequestCallback() {
+                        @Override
+                        public void onResponseReceived(Request request, Response response) {
+                            if (response.getStatusCode() == Response.SC_OK) {
+                                JSONValue json = JSONParser.parseStrict(response.getText());
+                                JSONArray array2 = json.isArray();
+                                if (array2 != null) {
+                                    int l = array.size();
+                                    for (int j=0; j<array2.size(); j++) {
+                                        array.set(l++, array2.get(j));
+                                    }
+                                }
+                                deleteObject(folder, i + 1, array);
+                            }
+                        }
+
+                        @Override
+                        public void onError(Request request, Throwable exception) {
+                            GSS.get().displayError("System error unable to delete folder: " + exception.getMessage());
+                        }
+                    });
+                }
+                catch (RequestException e) {
+                }
+            }
+        }
+        else {
+            String prefix = folder.getPrefix();
+            String path = getApiPath() + getUsername() + "/" + folder.getContainer() + (prefix.length() == 0 ? "" : "/" + prefix);
+            DeleteRequest deleteFolder = new DeleteRequest(path) {
+                @Override
+                public void onSuccess(Resource result) {
+                    updateFolder(folder.getParent());
+                }
+
+                @Override
+                public void onError(Throwable t) {
+                    GWT.log("", t);
+                    if (t instanceof RestException) {
+                        displayError("Unable to delete folder: "+((RestException) t).getHttpStatusText());
+                    }
+                    else
+                        GSS.get().displayError("System error unable to delete folder: " + t.getMessage());
+                }
+            };
+            deleteFolder.setHeader("X-Auth-Token", getToken());
+            Scheduler.get().scheduleDeferred(deleteFolder);
+        }
+    }
 }
index dd32971..c9d217c 100644 (file)
@@ -81,6 +81,14 @@ public class PasteCommand implements Command {
                 });
             }
             else {
+                copyFolder(tobeCopied, folder.getUri(), new Command() {
+                    @Override
+                    public void execute() {
+                        app.getClipboard().clear();
+                        app.deleteFolder(tobeCopied);
+                        app.updateFolder(folder);
+                    }
+                });
 
             }
         }