]> git.argeo.org Git - lgpl/argeo-commons.git/blob - providers/SingleNodeAsTreeContentProvider.java
Prepare next development cycle
[lgpl/argeo-commons.git] / providers / SingleNodeAsTreeContentProvider.java
1 package org.argeo.jcr.ui.explorer.providers;
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.NodeIterator;
9 import javax.jcr.RepositoryException;
10
11 import org.argeo.ArgeoException;
12 import org.argeo.eclipse.ui.jcr.utils.JcrItemsComparator;
13 import org.eclipse.jface.viewers.ITreeContentProvider;
14 import org.eclipse.jface.viewers.Viewer;
15
16 /**
17 * Implementation of the {@code ITreeContentProvider} in order to display a
18 * single JCR node and its children in a tree like structure
19 *
20 */
21 public class SingleNodeAsTreeContentProvider implements ITreeContentProvider {
22 // private Node rootNode;
23 private JcrItemsComparator itemComparator = new JcrItemsComparator();
24
25 /**
26 * Sends back the first level of the Tree. input element must be a single
27 * node object
28 */
29 public Object[] getElements(Object inputElement) {
30 try {
31 Node rootNode = (Node) inputElement;
32 List<Node> result = new ArrayList<Node>();
33 NodeIterator ni = rootNode.getNodes();
34 while (ni.hasNext()) {
35 result.add(ni.nextNode());
36 }
37
38 return result.toArray();
39 } catch (RepositoryException re) {
40 throw new ArgeoException(
41 "Unexpected error while getting child nodes for children editor page ",
42 re);
43 }
44 }
45
46 public Object[] getChildren(Object parentElement) {
47 return childrenNodes((Node) parentElement);
48 }
49
50 public Object getParent(Object element) {
51 try {
52 Node node = (Node) element;
53 if (!node.getPath().equals("/"))
54 return node.getParent();
55 else
56 return null;
57 } catch (RepositoryException e) {
58 return null;
59 }
60 }
61
62 public boolean hasChildren(Object element) {
63 try {
64 return ((Node) element).hasNodes();
65 } catch (RepositoryException e) {
66 throw new ArgeoException("Cannot check children of " + element, e);
67 }
68 }
69
70 public void dispose() {
71 }
72
73 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
74 }
75
76 protected Object[] childrenNodes(Node parentNode) {
77 try {
78 List<Node> children = new ArrayList<Node>();
79 NodeIterator nit = parentNode.getNodes();
80 while (nit.hasNext()) {
81 Node node = nit.nextNode();
82 children.add(node);
83 }
84 Node[] arr = children.toArray(new Node[children.size()]);
85 Arrays.sort(arr, itemComparator);
86 return arr;
87 } catch (RepositoryException e) {
88 throw new ArgeoException("Cannot list children of " + parentNode, e);
89 }
90 }
91 }