]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/JcrBrowserUtils.java
Move MVC provider.
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / jcr / JcrBrowserUtils.java
1 package org.argeo.cms.ui.jcr;
2
3 import javax.jcr.Node;
4 import javax.jcr.Property;
5 import javax.jcr.PropertyType;
6 import javax.jcr.RepositoryException;
7
8 import org.argeo.cms.ui.jcr.model.RepositoriesElem;
9 import org.argeo.cms.ui.jcr.model.RepositoryElem;
10 import org.argeo.cms.ui.jcr.model.SingleJcrNodeElem;
11 import org.argeo.cms.ui.jcr.model.WorkspaceElem;
12 import org.argeo.eclipse.ui.EclipseUiException;
13 import org.argeo.eclipse.ui.TreeParent;
14
15 /** Useful methods to manage the JCR Browser */
16 public class JcrBrowserUtils {
17
18 public static String getPropertyTypeAsString(Property prop) {
19 try {
20 return PropertyType.nameFromValue(prop.getType());
21 } catch (RepositoryException e) {
22 throw new EclipseUiException("Cannot check type for " + prop, e);
23 }
24 }
25
26 /** Insure that the UI component is not stale, refresh if needed */
27 public static void forceRefreshIfNeeded(TreeParent element) {
28 Node curNode = null;
29
30 boolean doRefresh = false;
31
32 try {
33 if (element instanceof SingleJcrNodeElem) {
34 curNode = ((SingleJcrNodeElem) element).getNode();
35 } else if (element instanceof WorkspaceElem) {
36 curNode = ((WorkspaceElem) element).getRootNode();
37 }
38
39 if (curNode != null && element.getChildren().length != curNode.getNodes().getSize())
40 doRefresh = true;
41 else if (element instanceof RepositoryElem) {
42 RepositoryElem rn = (RepositoryElem) element;
43 if (rn.isConnected()) {
44 String[] wkpNames = rn.getAccessibleWorkspaceNames();
45 if (element.getChildren().length != wkpNames.length)
46 doRefresh = true;
47 }
48 } else if (element instanceof RepositoriesElem) {
49 doRefresh = true;
50 // Always force refresh for RepositoriesElem : the condition
51 // below does not take remote repository into account and it is
52 // not trivial to do so.
53
54 // RepositoriesElem rn = (RepositoriesElem) element;
55 // if (element.getChildren().length !=
56 // rn.getRepositoryRegister()
57 // .getRepositories().size())
58 // doRefresh = true;
59 }
60 if (doRefresh) {
61 element.clearChildren();
62 element.getChildren();
63 }
64 } catch (RepositoryException re) {
65 throw new EclipseUiException("Unexpected error while synchronising the UI with the JCR repository", re);
66 }
67 }
68 }