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