]> 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
fix a few bugs
[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 private RepositoryRegister repositoryRegister;
33 private Session userSession;
34 private JcrKeyring jcrKeyring;
35
36 // Utils
37 private boolean sortChildren = true;
38 private TreeObjectsComparator itemComparator = new TreeObjectsComparator();
39
40 public NodeContentProvider(JcrKeyring jcrKeyring,
41 RepositoryRegister repositoryRegister) {
42 this.userSession = jcrKeyring != null ? jcrKeyring.getSession() : null;
43 this.jcrKeyring = jcrKeyring;
44 this.repositoryRegister = repositoryRegister;
45 }
46
47 /**
48 * Sends back the first level of the Tree. Independent from inputElement
49 * that can be null
50 */
51 public Object[] getElements(Object inputElement) {
52 List<Object> objs = new ArrayList<Object>();
53 if (userSession != null) {
54 Node userHome = JcrUtils.getUserHome(userSession);
55 if (userHome != null)
56 // TODO : find a way to dynamically get alias for the node
57 objs.add(new SingleJcrNode(null, userHome, userSession
58 .getUserID(), ArgeoJcrConstants.ALIAS_NODE));
59 }
60 if (repositoryRegister != null)
61 objs.add(new RepositoriesNode("Repositories", repositoryRegister,
62 null, jcrKeyring));
63 return objs.toArray();
64 }
65
66 public Object[] getChildren(Object parentElement) {
67 if (parentElement instanceof TreeParent) {
68 if (sortChildren) {
69 // TreeParent[] arr = (TreeParent[]) ((TreeParent)
70 // parentElement)
71 // .getChildren();
72 Object[] tmpArr = ((TreeParent) parentElement).getChildren();
73 TreeParent[] arr = new TreeParent[tmpArr.length];
74 for (int i = 0; i < tmpArr.length; i++)
75 arr[i] = (TreeParent) tmpArr[i];
76
77 Arrays.sort(arr, itemComparator);
78 return arr;
79 } else
80 return ((TreeParent) parentElement).getChildren();
81
82 } else {
83 return new Object[0];
84 }
85 }
86
87 public Object getParent(Object element) {
88 if (element instanceof TreeParent) {
89 return ((TreeParent) element).getParent();
90 } else
91 return null;
92 }
93
94 public boolean hasChildren(Object element) {
95 if (element instanceof RepositoriesNode) {
96 RepositoryRegister rr = ((RepositoriesNode) element)
97 .getRepositoryRegister();
98 return rr.getRepositories().size() > 0;
99 } else if (element instanceof TreeParent) {
100 TreeParent tp = (TreeParent) element;
101 return tp.hasChildren();
102 }
103 return false;
104 }
105
106 public void dispose() {
107 }
108
109 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
110 }
111 }