1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.argeo.cms.ui.jcr;
17
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.List;
21
22 import javax.jcr.Node;
23 import javax.jcr.NodeIterator;
24 import javax.jcr.RepositoryException;
25
26 import org.argeo.eclipse.ui.EclipseUiException;
27 import org.argeo.eclipse.ui.jcr.util.JcrItemsComparator;
28 import org.eclipse.jface.viewers.ITreeContentProvider;
29 import org.eclipse.jface.viewers.Viewer;
30
31
32
33
34
35 public class JcrTreeContentProvider implements ITreeContentProvider {
36 private static final long serialVersionUID = -2128326504754297297L;
37
38 private JcrItemsComparator itemComparator = new JcrItemsComparator();
39
40
41
42
43
44 public Object[] getElements(Object inputElement) {
45 Node rootNode = (Node) inputElement;
46 return childrenNodes(rootNode);
47 }
48
49 public Object[] getChildren(Object parentElement) {
50 return childrenNodes((Node) parentElement);
51 }
52
53 public Object getParent(Object element) {
54 try {
55 Node node = (Node) element;
56 if (!node.getPath().equals("/"))
57 return node.getParent();
58 else
59 return null;
60 } catch (RepositoryException e) {
61 return null;
62 }
63 }
64
65 public boolean hasChildren(Object element) {
66 try {
67 return ((Node) element).hasNodes();
68 } catch (RepositoryException e) {
69 throw new EclipseUiException("Cannot check children existence on " + element, e);
70 }
71 }
72
73 protected Object[] childrenNodes(Node parentNode) {
74 try {
75 List<Node> children = new ArrayList<Node>();
76 NodeIterator nit = parentNode.getNodes();
77 while (nit.hasNext()) {
78 Node node = nit.nextNode();
79
80
81
82 children.add(node);
83 }
84 Node[] arr = children.toArray(new Node[0]);
85 Arrays.sort(arr, itemComparator);
86 return arr;
87 } catch (RepositoryException e) {
88 throw new EclipseUiException("Cannot list children of " + parentNode, e);
89 }
90 }
91
92 public void dispose() {
93 }
94
95 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
96 }
97 }