1 package org
.argeo
.eclipse
.ui
.jcr
.browser
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Arrays
;
9 import javax
.jcr
.NodeIterator
;
10 import javax
.jcr
.Repository
;
11 import javax
.jcr
.RepositoryException
;
12 import javax
.jcr
.Session
;
14 import org
.argeo
.ArgeoException
;
15 import org
.argeo
.jcr
.RepositoryRegister
;
16 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
17 import org
.eclipse
.jface
.viewers
.Viewer
;
19 public class NodeContentProvider
implements ITreeContentProvider
{
20 private ItemComparator itemComparator
= new ItemComparator();
22 public Object
[] getElements(Object inputElement
) {
23 return getChildren(inputElement
);
26 public Object
[] getChildren(Object parentElement
) {
27 if (parentElement
instanceof Node
) {
28 return childrenNodes((Node
) parentElement
);
29 } else if (parentElement
instanceof RepositoryNode
) {
30 return ((RepositoryNode
) parentElement
).getChildren();
31 } else if (parentElement
instanceof WorkspaceNode
) {
32 Session session
= ((WorkspaceNode
) parentElement
).getSession();
37 return childrenNodes(session
.getRootNode());
38 } catch (RepositoryException e
) {
39 throw new ArgeoException("Cannot retrieve root node of "
42 } else if (parentElement
instanceof RepositoryRegister
) {
43 RepositoryRegister repositoryRegister
= (RepositoryRegister
) parentElement
;
44 List
<RepositoryNode
> nodes
= new ArrayList
<RepositoryNode
>();
45 Map
<String
, Repository
> repositories
= repositoryRegister
47 for (String name
: repositories
.keySet()) {
48 nodes
.add(new RepositoryNode(name
, repositories
.get(name
)));
50 return nodes
.toArray();
56 public Object
getParent(Object element
) {
58 if (element
instanceof Node
) {
59 Node node
= (Node
) element
;
60 return node
.getParent();
63 } catch (RepositoryException e
) {
68 public boolean hasChildren(Object element
) {
70 if (element
instanceof Node
) {
71 return ((Node
) element
).hasNodes();
72 } else if (element
instanceof RepositoryNode
) {
73 return ((RepositoryNode
) element
).hasChildren();
74 } else if (element
instanceof WorkspaceNode
) {
75 return ((WorkspaceNode
) element
).getSession() != null;
78 } catch (RepositoryException e
) {
79 throw new ArgeoException("Cannot check children of " + element
, e
);
83 public void dispose() {
86 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
89 protected Object
[] childrenNodes(Node parentNode
) {
91 List
<Node
> children
= new ArrayList
<Node
>();
92 NodeIterator nit
= parentNode
.getNodes();
93 while (nit
.hasNext()) {
94 Node node
= nit
.nextNode();
97 Node
[] arr
= children
.toArray(new Node
[children
.size()]);
98 Arrays
.sort(arr
, itemComparator
);
100 } catch (RepositoryException e
) {
101 throw new ArgeoException("Cannot list children of " + parentNode
, e
);