]> git.argeo.org Git - lgpl/argeo-commons.git/blob - browser/NodeContentProvider.java
Prepare next development cycle
[lgpl/argeo-commons.git] / browser / NodeContentProvider.java
1 package org.argeo.jcr.ui.explorer.browser;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.jcr.Node;
7 import javax.jcr.Session;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
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.ui.explorer.model.RepositoriesNode;
16 import org.argeo.jcr.ui.explorer.model.SingleJcrNode;
17 import org.eclipse.jface.viewers.ITreeContentProvider;
18 import org.eclipse.jface.viewers.Viewer;
19
20 /**
21 * Implementation of the {@code ITreeContentProvider} to display multiple
22 * repository environment in a tree like structure
23 *
24 */
25 public class NodeContentProvider implements ITreeContentProvider {
26 private final static Log log = LogFactory.getLog(NodeContentProvider.class);
27
28 // Business Objects
29 private RepositoryRegister repositoryRegister;
30 private Session userSession;
31
32 // Utils
33 // private ItemComparator itemComparator = new ItemComparator();
34
35 public NodeContentProvider(Session userSession,
36 RepositoryRegister repositoryRegister) {
37 this.userSession = userSession;
38 this.repositoryRegister = repositoryRegister;
39 }
40
41 /**
42 * Sends back the first level of the Tree. Independent from inputElement
43 * that can be null
44 */
45 public Object[] getElements(Object inputElement) {
46 List<Object> objs = new ArrayList<Object>();
47 if (userSession != null) {
48 Node userHome = JcrUtils.getUserHome(userSession);
49 if (userHome != null)
50 // TODO : find a way to dynamically get alias for the node
51 objs.add(new SingleJcrNode(null, userHome, userSession
52 .getUserID(), ArgeoJcrConstants.ALIAS_NODE));
53 }
54 if (repositoryRegister != null)
55 objs.add(new RepositoriesNode("Repositories", repositoryRegister,
56 null));
57 return objs.toArray();
58 }
59
60 public Object[] getChildren(Object parentElement) {
61 // if (parentElement instanceof Node) {
62 // return childrenNodes((Node) parentElement);
63 // } else if (parentElement instanceof RepositoryNode) {
64 // return ((RepositoryNode) parentElement).getChildren();
65 // } else if (parentElement instanceof WorkspaceNode) {
66 // Session session = ((WorkspaceNode) parentElement).getSession();
67 // if (session == null)
68 // return new Object[0];
69 //
70 // try {
71 // return childrenNodes(session.getRootNode());
72 // } catch (RepositoryException e) {
73 // throw new ArgeoException("Cannot retrieve root node of "
74 // + session, e);
75 // }
76 // } else if (parentElement instanceof RepositoryRegister) {
77 // RepositoryRegister repositoryRegister = (RepositoryRegister)
78 // parentElement;
79 // List<RepositoryNode> nodes = new ArrayList<RepositoryNode>();
80 // Map<String, Repository> repositories = repositoryRegister
81 // .getRepositories();
82 // for (String name : repositories.keySet()) {
83 // nodes.add(new RepositoryNode(name, repositories.get(name)));
84 // }
85 // return nodes.toArray();
86
87 if (parentElement instanceof TreeParent)
88 return ((TreeParent) parentElement).getChildren();
89 else {
90 return new Object[0];
91 }
92 }
93
94 public Object getParent(Object element) {
95 if (element instanceof TreeParent) {
96 return ((TreeParent) element).getParent();
97 } else
98 return null;
99 }
100
101 public boolean hasChildren(Object element) {
102 if (element instanceof RepositoriesNode) {
103 RepositoryRegister rr = ((RepositoriesNode) element)
104 .getRepositoryRegister();
105 return rr.getRepositories().size() > 0;
106 } else if (element instanceof TreeParent) {
107 TreeParent tp = (TreeParent) element;
108 return tp.hasChildren();
109 // } else if (element instanceof RepositoryNode) {
110 // return ((RepositoryNode) element).hasChildren();
111 // } else if (element instanceof WorkspaceNode) {
112 // return ((WorkspaceNode) element).getSession() != null;
113 }
114 return false;
115 // } catch (RepositoryException e) {
116 // throw new ArgeoException("Cannot check children of " + element, e);
117 // }
118 }
119
120 public void dispose() {
121 }
122
123 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
124 }
125
126 // protected Object[] childrenNodes(Node parentNode) {
127 // try {
128 // List<Node> children = new ArrayList<Node>();
129 // NodeIterator nit = parentNode.getNodes();
130 // while (nit.hasNext()) {
131 // Node node = nit.nextNode();
132 // children.add(node);
133 // }
134 // Node[] arr = children.toArray(new Node[children.size()]);
135 // Arrays.sort(arr, itemComparator);
136 // return arr;
137 // } catch (RepositoryException e) {
138 // throw new ArgeoException("Cannot list children of " + parentNode, e);
139 // }
140 // }
141
142 }