]> git.argeo.org Git - lgpl/argeo-commons.git/blob - server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/NodeContentProvider.java
Use RepositoryFactory in JCR browser
[lgpl/argeo-commons.git] / server / plugins / org.argeo.jcr.ui.explorer / src / main / java / org / argeo / jcr / ui / explorer / browser / NodeContentProvider.java
1 package org.argeo.jcr.ui.explorer.browser;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.List;
6
7 import javax.jcr.Node;
8 import javax.jcr.RepositoryFactory;
9 import javax.jcr.Session;
10
11 import org.argeo.eclipse.ui.TreeParent;
12 import org.argeo.jcr.ArgeoJcrConstants;
13 import org.argeo.jcr.JcrUtils;
14 import org.argeo.jcr.RepositoryRegister;
15 import org.argeo.jcr.security.JcrKeyring;
16 import org.argeo.jcr.ui.explorer.model.RepositoriesNode;
17 import org.argeo.jcr.ui.explorer.model.SingleJcrNode;
18 import org.argeo.jcr.ui.explorer.utils.TreeObjectsComparator;
19 import org.eclipse.jface.viewers.ITreeContentProvider;
20 import org.eclipse.jface.viewers.Viewer;
21
22 /**
23 * Implementation of the {@code ITreeContentProvider} to display multiple
24 * repository environment in a tree like structure
25 *
26 */
27 public class NodeContentProvider implements ITreeContentProvider {
28 // private final static Log log =
29 // LogFactory.getLog(NodeContentProvider.class);
30
31 // Business Objects
32 final private RepositoryRegister repositoryRegister;
33 final private RepositoryFactory repositoryFactory;
34 final private Session userSession;
35 final private JcrKeyring jcrKeyring;
36 final private boolean sortChildren;
37
38 // reference for cleaning
39 private SingleJcrNode homeNode = null;
40 private RepositoriesNode repositoriesNode = null;
41
42 // Utils
43 private TreeObjectsComparator itemComparator = new TreeObjectsComparator();
44
45 public NodeContentProvider(JcrKeyring jcrKeyring,
46 RepositoryRegister repositoryRegister,
47 RepositoryFactory repositoryFactory, Boolean sortChildren) {
48 this.userSession = jcrKeyring != null ? jcrKeyring.getSession() : null;
49 this.jcrKeyring = jcrKeyring;
50 this.repositoryRegister = repositoryRegister;
51 this.repositoryFactory = repositoryFactory;
52 this.sortChildren = sortChildren;
53 }
54
55 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
56 if (newInput == null)// dispose
57 return;
58
59 if (userSession != null) {
60 Node userHome = JcrUtils.getUserHome(userSession);
61 if (userHome != null) {
62 // TODO : find a way to dynamically get alias for the node
63 if (homeNode != null)
64 homeNode.dispose();
65 homeNode = new SingleJcrNode(null, userHome,
66 userSession.getUserID(), ArgeoJcrConstants.ALIAS_NODE);
67 }
68 }
69 if (repositoryRegister != null) {
70 if (repositoriesNode != null)
71 repositoriesNode.dispose();
72 repositoriesNode = new RepositoriesNode("Repositories",
73 repositoryRegister, repositoryFactory, null, jcrKeyring);
74 }
75 }
76
77 /**
78 * Sends back the first level of the Tree. Independent from inputElement
79 * that can be null
80 */
81 public Object[] getElements(Object inputElement) {
82 List<Object> objs = new ArrayList<Object>();
83 if (homeNode != null)
84 objs.add(homeNode);
85 if (repositoriesNode != null)
86 objs.add(repositoriesNode);
87 return objs.toArray();
88 }
89
90 public Object[] getChildren(Object parentElement) {
91 if (parentElement instanceof TreeParent) {
92 if (sortChildren) {
93 // TreeParent[] arr = (TreeParent[]) ((TreeParent)
94 // parentElement)
95 // .getChildren();
96 Object[] tmpArr = ((TreeParent) parentElement).getChildren();
97 TreeParent[] arr = new TreeParent[tmpArr.length];
98 for (int i = 0; i < tmpArr.length; i++)
99 arr[i] = (TreeParent) tmpArr[i];
100
101 Arrays.sort(arr, itemComparator);
102 return arr;
103 } else
104 return ((TreeParent) parentElement).getChildren();
105
106 } else {
107 return new Object[0];
108 }
109 }
110
111 public Object getParent(Object element) {
112 if (element instanceof TreeParent) {
113 return ((TreeParent) element).getParent();
114 } else
115 return null;
116 }
117
118 public boolean hasChildren(Object element) {
119 if (element instanceof RepositoriesNode) {
120 RepositoryRegister rr = ((RepositoriesNode) element)
121 .getRepositoryRegister();
122 return rr.getRepositories().size() > 0;
123 } else if (element instanceof TreeParent) {
124 TreeParent tp = (TreeParent) element;
125 return tp.hasChildren();
126 }
127 return false;
128 }
129
130 public void dispose() {
131 if (homeNode != null)
132 homeNode.dispose();
133 if (repositoriesNode != null) {
134 // logs out open sessions
135 // see https://bugzilla.argeo.org/show_bug.cgi?id=23
136 repositoriesNode.dispose();
137 }
138 }
139
140 }