+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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;
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;
+ if (rn.isConnected()) {
+ String[] wkpNames = rn.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();
}
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