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