Various experiments with asynchronous data providers
authorChristos Stathis <chstath@gmail.com>
Sat, 15 Oct 2011 20:33:38 +0000 (23:33 +0300)
committerChristos Stathis <chstath@gmail.com>
Sat, 15 Oct 2011 20:33:38 +0000 (23:33 +0300)
src/gr/grnet/pithos/web/client/Pithos.java
src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java
src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java

index 83fd0fd..b8f577d 100644 (file)
@@ -886,6 +886,7 @@ public class Pithos implements EntryPoint, ResizeHandler {
             DeleteRequest deleteFolder = new DeleteRequest(getApiPath(), getUsername(), path) {
                 @Override
                 public void onSuccess(@SuppressWarnings("unused") Resource result) {
+//                     folderTreeSelectionModel.setSelected(folder.getParent(), true);
                     updateFolder(folder.getParent(), true, new Command() {
                                                
                                                @Override
index 273d028..363cb74 100644 (file)
@@ -52,21 +52,43 @@ import com.google.gwt.user.client.ui.Tree;
 
 public class FolderTreeView extends Composite implements TreeView {
 
-    public void updateChildren(Folder folder) {
+       public boolean isFolderOpen(Folder folder) {
         TreeNode root = ((CellTree) getWidget()).getRootTreeNode();
-        updateChildren(root, folder);
+        return isFolderOpen(root, folder);
+       }
+       
+       private boolean isFolderOpen(TreeNode node, Folder folder) {
+        for (int i=0; i<node.getChildCount(); i++) {
+            if (folder.equals(node.getChildValue(i))) {
+                return node.isChildOpen(i);
+            }
+            else {
+                if (node.isChildOpen(i)) {
+                    TreeNode n = node.setChildOpen(i, true);
+                    return isFolderOpen(n, folder);
+                }
+            }
+       }
+        return false;
+       }
+       
+    public void openFolder(Folder folder) {
+        TreeNode root = ((CellTree) getWidget()).getRootTreeNode();
+        openFolder(root, folder);
     }
 
-    private void updateChildren(TreeNode node, Folder folder) {
+    private void openFolder(TreeNode node, Folder folder) {
         for (int i=0; i<node.getChildCount(); i++) {
             if (folder.equals(node.getChildValue(i))) {
-                node.setChildOpen(i, false, false);
-                node.setChildOpen(i, true, false);
+               node.setChildOpen(i, false, true);
+               node.setChildOpen(i, true, true);
+               break;
             }
             else {
                 if (node.isChildOpen(i)) {
                     TreeNode n = node.setChildOpen(i, true);
-                    updateChildren(n, folder);
+                    openFolder(n, folder);
+                    break;
                 }
             }
        }
index e38fd12..98861dd 100644 (file)
@@ -198,12 +198,20 @@ public class FolderTreeViewModel implements TreeViewModel {
 
                                @Override
                                protected void onRangeChanged(HasData<Folder> display) {
-                               fetchFolder(folder, this, showfiles, callback);
+                               fetchFolder(folder, this, showfiles, null);
                                }
             });
         }
         final AsyncDataProvider<Folder> dataProvider = dataProviderMap.get(folder);
-        fetchFolder(folder, dataProvider, showfiles, callback);
+        fetchFolder(folder, dataProvider, showfiles, new Command() {
+                       
+                       @Override
+                       public void execute() {
+                               app.getFolderTreeView().openFolder(folder);
+                               if (callback != null)
+                                       callback.execute();
+                       }
+               });
     }
 
     public void fetchFolder(final Folder f, final AsyncDataProvider<Folder> dataProvider, final boolean showfiles, final Command callback) {