fix bug 85 : JCR explorer refresh was not implemented for TreeParent objects of type...
authorBruno Sinou <bsinou@argeo.org>
Mon, 9 Jul 2012 16:09:50 +0000 (16:09 +0000)
committerBruno Sinou <bsinou@argeo.org>
Mon, 9 Jul 2012 16:09:50 +0000 (16:09 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@5426 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrUiUtils.java

index 756748bb4b4042a03ccc42770b7615812d60cb47..414bd1a7b123974e22fb92a5c523c861d6d12ad4 100644 (file)
@@ -20,30 +20,44 @@ import javax.jcr.RepositoryException;
 
 import org.argeo.ArgeoException;
 import org.argeo.eclipse.ui.TreeParent;
+import org.argeo.jcr.ui.explorer.model.RepositoriesNode;
+import org.argeo.jcr.ui.explorer.model.RepositoryNode;
 import org.argeo.jcr.ui.explorer.model.SingleJcrNode;
 import org.argeo.jcr.ui.explorer.model.WorkspaceNode;
 
-/** Centralizes some useful methods to build Uis with JCR */
+/** Centralizes some useful methods to build UIs with JCR */
 public class JcrUiUtils {
 
-       /** Insure that the UI componant is not stale, refresh if needed */
+       /** Insure that the UI component is not stale, refresh if needed */
        public static void forceRefreshIfNeeded(TreeParent element) {
-               Node curNode;
+               Node curNode = null;
 
-               if (element instanceof SingleJcrNode)
-                       curNode = ((SingleJcrNode) element).getNode();
-               else if (element instanceof WorkspaceNode)
-                       curNode = ((WorkspaceNode) element).getRootNode();
-               else
-                       return;
-               // TODO implement specific methods for other cases
+               boolean doRefresh = false;
 
                try {
-                       // we mainly rely on nb of children
-                       if (element.getChildren().length == curNode.getNodes().getSize())
-                               return;
-                       else {
-                               // get rid of children of UI object
+                       if (element instanceof SingleJcrNode) {
+                               curNode = ((SingleJcrNode) element).getNode();
+                       } else if (element instanceof WorkspaceNode) {
+                               curNode = ((WorkspaceNode) element).getRootNode();
+                       }
+
+                       if (curNode != null
+                                       && element.getChildren().length != curNode.getNodes()
+                                                       .getSize())
+                               doRefresh = true;
+                       else if (element instanceof RepositoryNode) {
+                               RepositoryNode rn = (RepositoryNode) element;
+                               String[] wkpNames = rn.getDefaultSession().getWorkspace()
+                                               .getAccessibleWorkspaceNames();
+                               if (element.getChildren().length != wkpNames.length)
+                                       doRefresh = true;
+                       } else if (element instanceof RepositoriesNode) {
+                               RepositoriesNode rn = (RepositoriesNode) element;
+                               if (element.getChildren().length != rn.getRepositoryRegister()
+                                               .getRepositories().size())
+                                       doRefresh = true;
+                       }
+                       if (doRefresh) {
                                element.clearChildren();
                                element.getChildren();
                        }