Fixed tree refresh bugs in groups tree
authorChristos Stathis <chstath@gmail.com>
Tue, 13 Sep 2011 20:40:04 +0000 (23:40 +0300)
committerChristos Stathis <chstath@gmail.com>
Tue, 13 Sep 2011 20:40:04 +0000 (23:40 +0300)
src/gr/grnet/pithos/web/client/Pithos.java
src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java
src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java
src/gr/grnet/pithos/web/client/foldertree/AccountResource.java
src/gr/grnet/pithos/web/client/grouptree/GroupTreeView.java
src/gr/grnet/pithos/web/client/grouptree/GroupTreeViewModel.java

index 60643d7..a58e95c 100644 (file)
@@ -44,6 +44,7 @@ import gr.grnet.pithos.web.client.foldertree.Resource;
 import gr.grnet.pithos.web.client.grouptree.Group;
 import gr.grnet.pithos.web.client.grouptree.GroupTreeView;
 import gr.grnet.pithos.web.client.grouptree.GroupTreeViewModel;
+import gr.grnet.pithos.web.client.grouptree.User;
 import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeView;
 import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeViewModel;
 import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeView;
@@ -933,4 +934,9 @@ public class Pithos implements EntryPoint, ResizeHandler {
                account.addGroup(newGroup);
                groupTreeView.updateGroupNode(null);
        }
+
+       public void removeGroup(Group group) {
+               account.removeGroup(group);
+               updateGroupsNode();
+       }
 }
index eaa4d3e..e6073eb 100644 (file)
@@ -34,7 +34,6 @@
  */
 package gr.grnet.pithos.web.client.commands;
 
-import gr.grnet.pithos.web.client.MessagePanel.Images;
 import gr.grnet.pithos.web.client.Pithos;
 import gr.grnet.pithos.web.client.foldertree.Resource;
 import gr.grnet.pithos.web.client.grouptree.Group;
@@ -78,7 +77,7 @@ public class DeleteGroupCommand implements Command {
                                
                                @Override
                                public void onSuccess(Resource result) {
-                                       app.updateGroupsNode();
+                                       app.removeGroup(group);
                                }
                                
                                @Override
index 4c925dd..e4286a0 100644 (file)
@@ -93,8 +93,12 @@ public class RemoveUserCommand implements Command {
                };
                updateGroup.setHeader("X-Auth-Token", app.getToken());
                String groupMembers = "";
-               for (String u : group.getMembers())
-                       groupMembers += (u + ",");
+               if (!group.getMembers().isEmpty()) {
+                       for (String u : group.getMembers())
+                               groupMembers += (u + ",");
+               }
+               else
+                       groupMembers = "~";
                updateGroup.setHeader("X-Account-Group-" + group.getName(), groupMembers);
                Scheduler.get().scheduleDeferred(updateGroup);
        }
index 3b33d21..de26365 100644 (file)
@@ -235,4 +235,8 @@ public class AccountResource extends Resource {
        public void addGroup(Group newGroup) {
                groups.add(newGroup);
        }
+
+       public void removeGroup(Group group) {
+               groups.remove(group);
+       }
 }
index 5a066ab..1ac877d 100644 (file)
@@ -63,15 +63,15 @@ public class GroupTreeView extends Composite {
 
     private void updateChildren(TreeNode node, Group group) {
         for (int i=0; i<node.getChildCount(); i++) {
-            if (node.isChildOpen(i)) {
-                if (group.equals(node.getChildValue(i))) {
-                    node.setChildOpen(i, false, true);
-                    node.setChildOpen(i, true, true);
-                }
-                else {
-                    TreeNode n = node.setChildOpen(i, true);
-                    updateChildren(n, group);
-                }
+            if (group.equals(node.getChildValue(i))) {
+                node.setChildOpen(i, false, true);
+                node.setChildOpen(i, true, true);
+            }
+            else {
+                if (node.isChildOpen(i)) {
+                       TreeNode n = node.setChildOpen(i, true);
+                       updateChildren(n, group);
+                }      
             }
         }
     }
@@ -136,6 +136,7 @@ public class GroupTreeView extends Composite {
     }
 
     public void updateGroupNode(Group group) {
+       model.updateGroupNode(group);
        updateChildren(group);
     }
 }
index 9f6163d..742bfe8 100644 (file)
@@ -131,6 +131,7 @@ public class GroupTreeViewModel implements TreeViewModel {
             return new DefaultNodeInfo<String>(rootDataProvider, rootCell,  null, null);
         }
         else if (value instanceof String) {
+               groupsDataProvider.getList().clear();
                groupsDataProvider.getList().addAll(app.getAccount().getGroups());
             return new DefaultNodeInfo<Group>(groupsDataProvider, groupCell, null, null);
         }
@@ -154,12 +155,29 @@ public class GroupTreeViewModel implements TreeViewModel {
         }
         else if (o instanceof Group)
                return ((Group) o).getMembers().isEmpty();
-        else
+        else if (o != null)
                return true;
+        return false;
     }
        
        public void initialize() {
        rootDataProvider.getList().clear();
        rootDataProvider.getList().add("Groups");
        }
+
+       public void updateGroupNode(Group group) {
+               if (group == null) {
+                       groupsDataProvider.getList().clear();
+                       groupsDataProvider.getList().addAll(app.getAccount().getGroups());
+               }
+               else {
+                       if (userDataProviderMap.get(group) == null) {
+                               userDataProviderMap.put(group, new ListDataProvider<User>());
+                       }
+                       final ListDataProvider<User> dataProvider = userDataProviderMap.get(group);
+                       dataProvider.getList().clear();
+                       for (String u : group.getMembers())
+                               dataProvider.getList().add(new User(u, group));
+               }
+       }
 }