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