X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fplugins%2Forg.argeo.jcr.ui.explorer%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2Fui%2Fexplorer%2Futils%2FJcrUiUtils.java;h=ca32113ed52f523c544c7a897aff73b3ec720e5a;hb=4ae398701e9b425766ae3e974bda7460adc9cc68;hp=c7287cf85b3f3ae60278e195115cb8c53af8f737;hpb=c0b7b3f9d1781d074ab35d24017042fa9415e1e4;p=lgpl%2Fargeo-commons.git diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrUiUtils.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrUiUtils.java index c7287cf85..ca32113ed 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrUiUtils.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrUiUtils.java @@ -1,3 +1,18 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.argeo.jcr.ui.explorer.utils; import javax.jcr.Node; @@ -5,30 +20,51 @@ import javax.jcr.RepositoryException; import org.argeo.ArgeoException; import org.argeo.eclipse.ui.TreeParent; -import org.argeo.jcr.ui.explorer.model.SingleJcrNode; -import org.argeo.jcr.ui.explorer.model.WorkspaceNode; +import org.argeo.jcr.ui.explorer.model.RepositoriesElem; +import org.argeo.jcr.ui.explorer.model.RepositoryElem; +import org.argeo.jcr.ui.explorer.model.SingleJcrNodeElem; +import org.argeo.jcr.ui.explorer.model.WorkspaceElem; -/** 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 SingleJcrNodeElem) { + curNode = ((SingleJcrNodeElem) element).getNode(); + } else if (element instanceof WorkspaceElem) { + curNode = ((WorkspaceElem) element).getRootNode(); + } + + if (curNode != null + && element.getChildren().length != curNode.getNodes() + .getSize()) + doRefresh = true; + else if (element instanceof RepositoryElem) { + RepositoryElem rn = (RepositoryElem) element; + if (rn.isConnected()) { + String[] wkpNames = rn.getAccessibleWorkspaceNames(); + if (element.getChildren().length != wkpNames.length) + doRefresh = true; + } + } else if (element instanceof RepositoriesElem) { + doRefresh = true; + // Always force refresh for RepositoriesElem : the condition + // below does not take remote repository into account and it is + // not trivial to do so. + + // RepositoriesElem rn = (RepositoriesElem) element; + // if (element.getChildren().length != + // rn.getRepositoryRegister() + // .getRepositories().size()) + // doRefresh = true; + } + if (doRefresh) { element.clearChildren(); element.getChildren(); } @@ -38,6 +74,14 @@ public class JcrUiUtils { re); } } + + /** + * Insure that a model element is inline with the underlying data by + * cleaning the corresponding subtree and building it again. + */ + public static void forceRebuild(TreeParent element) { + // TODO implement this method if needed. + } /** * Workaround to get the alias of the repository that contains the given * element. As we cannot browse the UI tree upward we recursively browse it