/*
- * Copyright (C) 2007-2012 Mathieu Baudier
+ * 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.
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();
}