Fixed refresh errors when moving folders/files to trash
authorChristos Stathis <chstath@ebs.gr>
Mon, 12 Sep 2011 13:28:07 +0000 (16:28 +0300)
committerChristos Stathis <chstath@ebs.gr>
Mon, 12 Sep 2011 13:28:07 +0000 (16:28 +0300)
src/gr/grnet/pithos/web/client/DeleteFileDialog.java
src/gr/grnet/pithos/web/client/FilePropertiesDialog.java
src/gr/grnet/pithos/web/client/FileUploadDialog.java
src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java
src/gr/grnet/pithos/web/client/Pithos.java
src/gr/grnet/pithos/web/client/commands/PasteCommand.java
src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java
src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java
src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java

index f00937a..2694d52 100644 (file)
@@ -154,7 +154,7 @@ public class DeleteFileDialog extends DialogBox {
             Scheduler.get().scheduleDeferred(deleteFile);\r
         }\r
         else {\r
-            app.updateFolder(files.get(0).getParent(), true);\r
+            app.updateFolder(files.get(0).getParent(), true, null);\r
         }\r
     }\r
 \r
index 473824c..f9ad816 100644 (file)
@@ -438,7 +438,7 @@ public class FilePropertiesDialog extends AbstractPropertiesDialog {
             PostRequest updateFile = new PostRequest(api, owner, path) {\r
                 @Override\r
                 public void onSuccess(@SuppressWarnings("unused") Resource result) {\r
-                    app.updateFolder(file.getParent(), true);\r
+                    app.updateFolder(file.getParent(), true, null);\r
                 }\r
 \r
                 @Override\r
@@ -479,7 +479,7 @@ public class FilePropertiesDialog extends AbstractPropertiesDialog {
             Scheduler.get().scheduleDeferred(updateFile);\r
         }\r
         else\r
-            app.updateFolder(file.getParent(), true);\r
+            app.updateFolder(file.getParent(), true, null);\r
     }\r
 \r
        private void removeAllOldVersions() {\r
index 979d57b..3026d4c 100644 (file)
@@ -171,7 +171,7 @@ public class FileUploadDialog extends DialogBox {
                                        GWT.log(results, null);
                                        app.displayError(results);
                                }
-                app.updateFolder(folder, true);
+                app.updateFolder(folder, true, null);
                                hide();
                        }
                });
index 86f3f2a..a1e0015 100644 (file)
@@ -263,7 +263,7 @@ public class FolderPropertiesDialog extends DialogBox {
         PutRequest createFolder = new PutRequest(app.getApiPath(), app.getUsername(), path) {\r
             @Override\r
             public void onSuccess(@SuppressWarnings("unused") Resource result) {\r
-                app.updateFolder(folder, true);\r
+                app.updateFolder(folder, true, null);\r
             }\r
 \r
             @Override\r
@@ -345,7 +345,7 @@ public class FolderPropertiesDialog extends DialogBox {
             PostRequest updateFolder = new PostRequest(app.getApiPath(), folder.getOwner(), path) {\r
                 @Override\r
                 public void onSuccess(@SuppressWarnings("unused") Resource result) {\r
-                    app.updateFolder(folder.getParent(), false);\r
+                    app.updateFolder(folder.getParent(), false, null);\r
                 }\r
 \r
                 @Override\r
@@ -379,7 +379,7 @@ public class FolderPropertiesDialog extends DialogBox {
             Scheduler.get().scheduleDeferred(updateFolder);\r
         }\r
         else\r
-            app.updateFolder(folder.getParent(), false);\r
+            app.updateFolder(folder.getParent(), false, null);\r
     }\r
 \r
        public void selectTab(int _tab) {\r
index 6907b0d..b55688a 100644 (file)
@@ -125,8 +125,8 @@ public class Pithos implements EntryPoint, ResizeHandler {
         return account;
     }
 
-    public void updateFolder(Folder f, boolean showfiles) {
-        folderTreeView.updateFolder(f, showfiles);
+    public void updateFolder(Folder f, boolean showfiles, Command callback) {
+        folderTreeView.updateFolder(f, showfiles, callback);
     }
 
     public void updateSharedFolder(Folder f, boolean showfiles) {
@@ -249,6 +249,8 @@ public class Pithos implements EntryPoint, ResizeHandler {
     private TagTreeView tagTreeView;
 
     protected AccountResource account;
+    
+    private Folder trash;
 
     @SuppressWarnings("rawtypes")
        private List<SingleSelectionModel> selectionModels = new ArrayList<SingleSelectionModel>();
@@ -305,7 +307,7 @@ public class Pithos implements EntryPoint, ResizeHandler {
                 if (folderTreeSelectionModel.getSelectedObject() != null) {
                     deselectOthers(folderTreeSelectionModel);
                     Folder f = folderTreeSelectionModel.getSelectedObject();
-                    updateFolder(f, true);
+                    updateFolder(f, true, null);
                 }
             }
         });
@@ -510,6 +512,11 @@ public class Pithos implements EntryPoint, ResizeHandler {
                 else if (!account.hasTrashContainer())
                        createTrashContainer();
                 else {
+                       for (Folder f : account.getContainers())
+                               if (f.getName().equals(Pithos.TRASH_CONTAINER)) {
+                                       trash = f;
+                                       break;
+                               }
                     folderTreeViewModel.initialize(account);
                 }
             }
@@ -789,7 +796,7 @@ public class Pithos implements EntryPoint, ResizeHandler {
             DeleteRequest deleteFolder = new DeleteRequest(getApiPath(), getUsername(), path) {
                 @Override
                 public void onSuccess(@SuppressWarnings("unused") Resource result) {
-                    updateFolder(folder.getParent(), true);
+                    updateFolder(folder.getParent(), true, null);
                 }
 
                 @Override
@@ -897,4 +904,8 @@ public class Pithos implements EntryPoint, ResizeHandler {
        public OtherSharedTreeView getOtherSharedTreeView() {
                return otherSharedTreeView;
        }
+
+       public void updateTrash(boolean showFiles, Command callback) {
+               updateFolder(trash, showFiles, callback);
+       }
 }
index c07b10b..a978b50 100644 (file)
@@ -78,7 +78,7 @@ public class PasteCommand implements Command {
                     @Override
                     public void execute() {
                         app.getClipboard().clear();
-                        app.updateFolder(folder, true);
+                        app.updateFolder(folder, true, null);
                     }
                 });
             }
@@ -88,7 +88,7 @@ public class PasteCommand implements Command {
                     public void execute() {
                         app.getClipboard().clear();
                         app.deleteFolder(tobeCopied);
-                        app.updateFolder(folder, true);
+                        app.updateFolder(folder, true, null);
                     }
                 });
             }
@@ -102,7 +102,7 @@ public class PasteCommand implements Command {
                     @Override
                     public void execute() {
                         app.getClipboard().clear();
-                        app.updateFolder(folder, true);
+                        app.updateFolder(folder, true, null);
                     }
                 });
             }
@@ -111,7 +111,7 @@ public class PasteCommand implements Command {
                     @Override
                     public void execute() {
                         app.getClipboard().clear();
-                        app.updateFolder(folder, true);
+                        app.updateFolder(folder, true, null);
                     }
                 });
             }
index 9cec918..e4a2262 100644 (file)
 package gr.grnet.pithos.web.client.commands;
 
 import com.google.gwt.core.client.Scheduler;
+
+import gr.grnet.pithos.web.client.DeleteFolderDialog;
 import gr.grnet.pithos.web.client.Pithos;
 import gr.grnet.pithos.web.client.foldertree.File;
 import gr.grnet.pithos.web.client.foldertree.Folder;
 import gr.grnet.pithos.web.client.foldertree.Resource;
+import gr.grnet.pithos.web.client.rest.DeleteRequest;
 import gr.grnet.pithos.web.client.rest.PostRequest;
 import gr.grnet.pithos.web.client.rest.PutRequest;
 import gr.grnet.pithos.web.client.rest.RestException;
@@ -79,7 +82,7 @@ public class ToTrashCommand implements Command{
                 @SuppressWarnings("unchecked")
                                @Override
                 public void execute() {
-                    app.updateFolder(((List<File>) resource).get(0).getParent(), true);
+                    app.updateFolder(((List<File>) resource).get(0).getParent(), true, null);
                 }
             });
         }
@@ -88,7 +91,7 @@ public class ToTrashCommand implements Command{
             trashFolder(toBeTrashed, new Command() {
                 @Override
                 public void execute() {
-                    app.updateFolder(toBeTrashed.getParent(), true);
+                    app.updateFolder(toBeTrashed.getParent(), true, null);
                 }
             });
 
@@ -96,7 +99,7 @@ public class ToTrashCommand implements Command{
        }
 
     private void trashFolder(final Folder f, final Command callback) {
-        String path = "/" + Pithos.TRASH_CONTAINER + "/" + f.getPrefix() + "/" + f.getName();
+        String path = "/" + Pithos.TRASH_CONTAINER + "/" + f.getPrefix();
         PutRequest createFolder = new PutRequest(app.getApiPath(), app.getUsername(), path) {
             @Override
             public void onSuccess(@SuppressWarnings("unused") Resource result) {
@@ -105,7 +108,32 @@ public class ToTrashCommand implements Command{
                     @Override
                     public void execute() {
                         Iterator<Folder> iterf = f.getSubfolders().iterator();
-                        trashSubfolders(iterf, callback);
+                        trashSubfolders(iterf, new Command() {
+                                                       
+                                                       @Override
+                                                       public void execute() {
+                                                               DeleteRequest deleteFolder = new DeleteRequest(app.getApiPath(), f.getOwner(), f.getUri()) {
+                                                                       
+                                                                       @Override
+                                                                       public void onSuccess(Resource result) {
+                                                                               if (callback != null)
+                                                                                       callback.execute();
+                                                                       }
+                                                                       
+                                                                       @Override
+                                                                       public void onError(Throwable t) {
+                                                           GWT.log("", t);
+                                                           if (t instanceof RestException) {
+                                                               app.displayError("Unable to delete folder: " + ((RestException) t).getHttpStatusText());
+                                                           }
+                                                           else
+                                                               app.displayError("System error unable to delete folder: "+t.getMessage());
+                                                                       }
+                                                               };
+                                                               deleteFolder.setHeader("X-Auth-Token", app.getToken());
+                                                               Scheduler.get().scheduleDeferred(deleteFolder);
+                                                       }
+                                               });
                     }
                 });
             }
@@ -161,8 +189,8 @@ public class ToTrashCommand implements Command{
             final Folder f = iter.next();
             trashFolder(f, callback);
         }
-        else  if (callback != null) {
-            callback.execute();
+        else  {
+               app.updateTrash(false, callback);
         }
     }
 }
index f9c3f06..76cba0a 100644 (file)
@@ -43,6 +43,7 @@ import com.google.gwt.safehtml.shared.SafeHtml;
 import com.google.gwt.user.cellview.client.CellTree;
 import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
 import com.google.gwt.user.cellview.client.TreeNode;
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.Tree;
 import gr.grnet.pithos.web.client.FolderContextMenu;
@@ -145,7 +146,7 @@ public class FolderTreeView extends Composite {
        return model.getSelection();
     }
 
-    public void updateFolder(Folder folder, boolean showfiles) {
-        model.updateFolder(folder, showfiles);
+    public void updateFolder(Folder folder, boolean showfiles, Command callback) {
+        model.updateFolder(folder, showfiles, callback);
     }
 }
index ea41fc3..4fc11d2 100644 (file)
@@ -121,7 +121,7 @@ public class FolderTreeViewModel implements TreeViewModel {
                    dataProviderMap.put(f, new ListDataProvider<Folder>());
                }
                final ListDataProvider<Folder> dataProvider = dataProviderMap.get(f);
-               fetchFolder(f, dataProvider, false);
+               fetchFolder(f, dataProvider, false, null);
                return new DefaultNodeInfo<Folder>(dataProvider, folderCell, selectionModel, null);
     }
 
@@ -177,18 +177,15 @@ public class FolderTreeViewModel implements TreeViewModel {
         return selectionModel.getSelectedObject();
     }
 
-    public void updateFolder(Folder folder, boolean showfiles) {
+    public void updateFolder(Folder folder, boolean showfiles, Command callback) {
         if (dataProviderMap.get(folder) == null) {
             dataProviderMap.put(folder, new ListDataProvider<Folder>());
         }
         final ListDataProvider<Folder> dataProvider = dataProviderMap.get(folder);
-        if (!folder.isTrash())
-            fetchFolder(folder, dataProvider, showfiles);
-        else
-            app.showFiles(folder);
+        fetchFolder(folder, dataProvider, showfiles, callback);
     }
 
-    public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles) {
+    public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles, final Command callback) {
         Scheduler.get().scheduleDeferred(new ScheduledCommand() {
             @Override
             public void execute() {
@@ -205,6 +202,8 @@ public class FolderTreeViewModel implements TreeViewModel {
                                 dataProvider.getList().clear();
                                 dataProvider.getList().addAll(_result.getSubfolders());
                                 app.getFolderTreeView().updateChildren(f);
+                                if (callback != null)
+                                       callback.execute();
                             }
                         });
                     }