Fixed initialization and display of shared trees
authorChristos Stathis <chstath@ebs.gr>
Thu, 29 Sep 2011 15:01:02 +0000 (18:01 +0300)
committerChristos Stathis <chstath@ebs.gr>
Thu, 29 Sep 2011 15:01:02 +0000 (18:01 +0300)
src/gr/grnet/pithos/web/client/Pithos.java
src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java
src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java

index 7ae6ad3..ec96178 100644 (file)
@@ -77,8 +77,6 @@ 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.http.client.URL;
-import com.google.gwt.i18n.client.DateTimeFormat;
-import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
 import com.google.gwt.json.client.JSONArray;
 import com.google.gwt.json.client.JSONObject;
 import com.google.gwt.json.client.JSONParser;
@@ -146,14 +144,6 @@ public class Pithos implements EntryPoint, ResizeHandler {
        otherSharedTreeView.updateFolder(f, showfiles);
     }
 
-    public void updateTag(Tag t) {
-        tagTreeView.updateTag(t);
-    }
-
-    public void updateTags() {
-        tagTreeViewModel.initialize(getAllTags());
-    }
-
     public List<Tag> getAllTags() {
         List<Tag> tagList = new ArrayList<Tag>();
         for (Folder f : account.getContainers()) {
@@ -232,21 +222,19 @@ public class Pithos implements EntryPoint, ResizeHandler {
      */
     private String token;
 
+    VerticalPanel trees;
+    
     SingleSelectionModel<Folder> folderTreeSelectionModel;
     FolderTreeViewModel folderTreeViewModel;
     FolderTreeView folderTreeView;
 
     SingleSelectionModel<Folder> mysharedTreeSelectionModel;
-    private MysharedTreeViewModel mysharedTreeViewModel;
-    MysharedTreeView mysharedTreeView;
+    MysharedTreeViewModel mysharedTreeViewModel;
+    MysharedTreeView mysharedTreeView = null;;
 
     protected SingleSelectionModel<Folder> otherSharedTreeSelectionModel;
-    private OtherSharedTreeViewModel otherSharedTreeViewModel;
-    OtherSharedTreeView otherSharedTreeView;
-
-    protected SingleSelectionModel<Tag> tagTreeSelectionModel;
-    private TagTreeViewModel tagTreeViewModel;
-    private TagTreeView tagTreeView;
+    OtherSharedTreeViewModel otherSharedTreeViewModel;
+    OtherSharedTreeView otherSharedTreeView = null;
 
     GroupTreeViewModel groupTreeViewModel;
     private GroupTreeView groupTreeView;
@@ -256,8 +244,7 @@ public class Pithos implements EntryPoint, ResizeHandler {
     
     Folder trash;
 
-    @SuppressWarnings("rawtypes")
-       private List<SingleSelectionModel> selectionModels = new ArrayList<SingleSelectionModel>();
+    @SuppressWarnings("rawtypes") List<SingleSelectionModel> selectionModels = new ArrayList<SingleSelectionModel>();
     
     Button upload;
     
@@ -349,40 +336,10 @@ public class Pithos implements EntryPoint, ResizeHandler {
         fileList = new FileList(this, images, folderTreeView);
         inner.add(fileList);
 
-        mysharedTreeSelectionModel = new SingleSelectionModel<Folder>();
-        mysharedTreeSelectionModel.addSelectionChangeHandler(new Handler() {
-            @Override
-            public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) {
-                if (mysharedTreeSelectionModel.getSelectedObject() != null) {
-                    deselectOthers(mysharedTreeView, mysharedTreeSelectionModel);
-                    upload.setEnabled(false);
-                    updateSharedFolder(mysharedTreeSelectionModel.getSelectedObject(), true);
-                }
-            }
-        });
-        selectionModels.add(mysharedTreeSelectionModel);
-        mysharedTreeViewModel = new MysharedTreeViewModel(this, mysharedTreeSelectionModel);
-        mysharedTreeView = new MysharedTreeView(mysharedTreeViewModel);
-
-        otherSharedTreeSelectionModel = new SingleSelectionModel<Folder>();
-        otherSharedTreeSelectionModel.addSelectionChangeHandler(new Handler() {
-            @Override
-            public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) {
-                if (otherSharedTreeSelectionModel.getSelectedObject() != null) {
-                    deselectOthers(otherSharedTreeView, otherSharedTreeSelectionModel);
-                    applyPermissions(otherSharedTreeSelectionModel.getSelectedObject());
-                    updateOtherSharedFolder(otherSharedTreeSelectionModel.getSelectedObject(), true);
-                }
-            }
-        });
-        selectionModels.add(otherSharedTreeSelectionModel);
-        otherSharedTreeViewModel = new OtherSharedTreeViewModel(this, otherSharedTreeSelectionModel);
-        otherSharedTreeView = new OtherSharedTreeView(otherSharedTreeViewModel);
-
         groupTreeViewModel = new GroupTreeViewModel(this);
         groupTreeView = new GroupTreeView(groupTreeViewModel);
 
-        VerticalPanel trees = new VerticalPanel();
+        trees = new VerticalPanel();
 
         upload = new Button("Upload File", new ClickHandler() {
             @Override
@@ -413,9 +370,6 @@ public class Pithos implements EntryPoint, ResizeHandler {
         trees.add(treeHeader);
 
         trees.add(folderTreeView);
-        trees.add(mysharedTreeView);
-        trees.add(otherSharedTreeView);
-//        trees.add(tagTreeView);
         trees.add(groupTreeView);
         // Add the left and right panels to the split panel.
         splitPanel.setLeftWidget(trees);
@@ -467,6 +421,7 @@ public class Pithos implements EntryPoint, ResizeHandler {
                                                }
                                    folderTreeViewModel.initialize(account);
                                    groupTreeViewModel.initialize();
+                                   createMySharedTree();
                                    showStatistics();
                                }
                                        }
@@ -1106,4 +1061,53 @@ public class Pithos implements EntryPoint, ResizeHandler {
        public void updateRootFolder(Command callback) {
                updateFolder(account.getPithos(), false, callback);
        }
+
+       void createMySharedTree() {
+               mysharedTreeSelectionModel = new SingleSelectionModel<Folder>();
+               mysharedTreeSelectionModel.addSelectionChangeHandler(new Handler() {
+                   @Override
+                   public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) {
+                       if (mysharedTreeSelectionModel.getSelectedObject() != null) {
+                           deselectOthers(mysharedTreeView, mysharedTreeSelectionModel);
+                           upload.setEnabled(false);
+                           updateSharedFolder(mysharedTreeSelectionModel.getSelectedObject(), true);
+                       }
+                   }
+               });
+               selectionModels.add(mysharedTreeSelectionModel);
+               mysharedTreeViewModel = new MysharedTreeViewModel(Pithos.this, mysharedTreeSelectionModel);
+               mysharedTreeViewModel.initialize(new Command() {
+                       
+                       @Override
+                       public void execute() {
+                           mysharedTreeView = new MysharedTreeView(mysharedTreeViewModel);
+                               trees.insert(mysharedTreeView, 3);
+                               createOtherSharedTree();
+                       }
+               });
+       }
+
+       void createOtherSharedTree() {
+               otherSharedTreeSelectionModel = new SingleSelectionModel<Folder>();
+               otherSharedTreeSelectionModel.addSelectionChangeHandler(new Handler() {
+                   @Override
+                   public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) {
+                       if (otherSharedTreeSelectionModel.getSelectedObject() != null) {
+                           deselectOthers(otherSharedTreeView, otherSharedTreeSelectionModel);
+                           applyPermissions(otherSharedTreeSelectionModel.getSelectedObject());
+                           updateOtherSharedFolder(otherSharedTreeSelectionModel.getSelectedObject(), true);
+                       }
+                   }
+               });
+               selectionModels.add(otherSharedTreeSelectionModel);
+               otherSharedTreeViewModel = new OtherSharedTreeViewModel(Pithos.this, otherSharedTreeSelectionModel);
+               otherSharedTreeViewModel.initialize(new Command() {
+                       
+                       @Override
+                       public void execute() {
+                           otherSharedTreeView = new OtherSharedTreeView(otherSharedTreeViewModel);
+                               trees.insert(otherSharedTreeView, 4);
+                       }
+               });
+       }
 }
index 5f8ef68..a78748c 100644 (file)
@@ -142,7 +142,7 @@ public class MysharedTreeViewModel implements TreeViewModel {
             }),  selectionModel2, null);
         }
         else if (value instanceof String) {
-               fetchSharedContainers();
+               fetchSharedContainers(null);
             return new DefaultNodeInfo<Folder>(firstLevelDataProvider, folderCell, selectionModel, null);
         }
         else {
@@ -171,7 +171,7 @@ public class MysharedTreeViewModel implements TreeViewModel {
                });
        }
 
-       private void fetchSharedContainers() {
+       private void fetchSharedContainers(final Command callback) {
        final List<Folder> containers = app.getAccount().getContainers();
        final ListDataProvider<Folder> tempProvider = new ListDataProvider<Folder>();
        Iterator<Folder> iter = containers.iterator();
@@ -181,17 +181,23 @@ public class MysharedTreeViewModel implements TreeViewModel {
                        public void execute() {
                                firstLevelDataProvider.getList().clear();
                                firstLevelDataProvider.getList().addAll(tempProvider.getList());
+                               if (callback != null)
+                                       callback.execute();
                        }
                });
        }
 
        @Override
     public boolean isLeaf(Object o) {
-        if (o instanceof Folder) {
+               if (o == null)
+                       return false;
+               else if (o instanceof Folder) {
             Folder f = (Folder) o;
             return f.getSubfolders().isEmpty();
         }
-        return false;
+               else {
+                       return firstLevelDataProvider.getList().isEmpty();
+               }
     }
 
     protected void fetchFolder(final Iterator<Folder> iter, final ListDataProvider<Folder> dataProvider, final Command callback) {
@@ -290,4 +296,8 @@ public class MysharedTreeViewModel implements TreeViewModel {
         getFolder.setHeader("X-Auth-Token", app.getToken());
         Scheduler.get().scheduleDeferred(getFolder);
     }
+
+       public void initialize(Command callback) {
+               fetchSharedContainers(callback);
+       }
 }
index aa11a69..e6dd0a2 100644 (file)
@@ -73,6 +73,7 @@ import com.google.gwt.view.client.TreeViewModel;
 
 public class OtherSharedTreeViewModel implements TreeViewModel {
 
+       private static final String treeTitle = "Other 's shared";
     protected Pithos app;
 
     private Cell<Folder> folderCell = new AbstractCell<Folder>(ContextMenuEvent.getType().getName()) {
@@ -113,7 +114,7 @@ public class OtherSharedTreeViewModel implements TreeViewModel {
     @Override
     public <T> NodeInfo<?> getNodeInfo(T value) {
         if (value == null) {
-            rootDataProvider.getList().add("Other 's Shared");
+            rootDataProvider.getList().add(treeTitle);
             final SingleSelectionModel<String> selectionModel2 = new SingleSelectionModel<String>();
             selectionModel2.addSelectionChangeHandler(new Handler() {
 
@@ -144,8 +145,8 @@ public class OtherSharedTreeViewModel implements TreeViewModel {
             }),  selectionModel2, null);
         }
         else if (value instanceof String) {
-               if (value.equals("Other 's Shared")) {
-                       fetchSharingUsers();
+               if (value.equals(treeTitle)) {
+                       fetchSharingUsers(null);
                    final SingleSelectionModel<String> selectionModel3 = new SingleSelectionModel<String>();
                    selectionModel3.addSelectionChangeHandler(new Handler() {
 
@@ -185,7 +186,7 @@ public class OtherSharedTreeViewModel implements TreeViewModel {
                                userDataProviderMap.put(username, new ListDataProvider<Folder>());
                        }
                        final ListDataProvider<Folder> dataProvider = userDataProviderMap.get(username);
-                       fetchSharedContainers(username, dataProvider);
+                       fetchSharedContainers(username, dataProvider, null);
                        return new DefaultNodeInfo<Folder>(dataProvider, folderCell, selectionModel, null);
         }
         else {
@@ -199,7 +200,7 @@ public class OtherSharedTreeViewModel implements TreeViewModel {
         }
     }
 
-    private void fetchSharingUsers() {
+    private void fetchSharingUsers(final Command callback) {
         GetRequest<SharingUsers> getSharingUsers = new GetRequest<SharingUsers>(SharingUsers.class, app.getApiPath(), "", "?format=json") {
             @Override
             public void onSuccess(final SharingUsers _result) {
@@ -208,6 +209,8 @@ public class OtherSharedTreeViewModel implements TreeViewModel {
                 for (String name : _result.getUsers()) {
                        sharedFiles.put(name, new HashSet<File>());
                 }
+                Iterator<String> iter = _result.getUsers().iterator();
+                fetchSharedContainers(iter, callback);
             }
 
             @Override
@@ -228,16 +231,46 @@ public class OtherSharedTreeViewModel implements TreeViewModel {
         Scheduler.get().scheduleDeferred(getSharingUsers);
        }
 
+       protected void fetchSharedContainers(final Iterator<String> iter, final Command callback) {
+               if (iter.hasNext()) {
+                       String username = iter.next();
+                       if (userDataProviderMap.get(username) == null) {
+                               userDataProviderMap.put(username, new ListDataProvider<Folder>());
+                       }
+                       final ListDataProvider<Folder> dataProvider = userDataProviderMap.get(username);
+                       fetchSharedContainers(username, dataProvider, new Command() {
+                               
+                               @Override
+                               public void execute() {
+                                       fetchSharedContainers(iter, callback);
+                                       
+                               }
+                       });
+               }
+               else
+                       if (callback != null)
+                               callback.execute();
+       }
+
        @Override
     public boolean isLeaf(Object o) {
-        if (o instanceof Folder) {
+               if (o == null)
+                       return false;
+               else if (o instanceof Folder) {
             Folder f = (Folder) o;
             return f.getSubfolders().isEmpty();
         }
-        return false;
+               else {
+                       if (o.equals(treeTitle))
+                               return userLevelDataProvider.getList().isEmpty();
+                       ListDataProvider<Folder> dp = userDataProviderMap.get(o);
+                       if (dp != null)
+                               return dp.getList().isEmpty();
+                       return true;
+               }
     }
 
-       private void fetchSharedContainers(final String username, final ListDataProvider<Folder> dataProvider) {
+       private void fetchSharedContainers(final String username, final ListDataProvider<Folder> dataProvider, final Command callback) {
                GetRequest<AccountResource> getUserSharedContainers = new GetRequest<AccountResource>(AccountResource.class, app.getApiPath(), username, "?format=json") {
 
                        @Override
@@ -250,6 +283,8 @@ public class OtherSharedTreeViewModel implements TreeViewModel {
                                        public void execute() {
                                                dataProvider.getList().clear();
                                                dataProvider.getList().addAll(tempProvider.getList());
+                                               if (callback != null)
+                                                       callback.execute();
                                        }
                                });
                        }
@@ -404,4 +439,8 @@ public class OtherSharedTreeViewModel implements TreeViewModel {
         getFolder.setHeader("X-Auth-Token", app.getToken());
         Scheduler.get().scheduleDeferred(getFolder);
     }
+    
+    public void initialize(Command callback) {
+       fetchSharingUsers(callback);
+    }
 }