1 package org
.argeo
.jcr
.ui
.explorer
.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
.JcrUtils
;
16 import org
.argeo
.jcr
.RepositoryRegister
;
17 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
18 import org
.eclipse
.jface
.viewers
.Viewer
;
21 * Implementation of the {@code ITreeContentProvider} to display multiple
22 * repository environment in a tree like structure
25 public class NodeContentProvider
implements ITreeContentProvider
{
26 private ItemComparator itemComparator
= new ItemComparator();
28 private RepositoryRegister repositoryRegister
;
29 private Session userSession
;
31 public NodeContentProvider(Session userSession
,
32 RepositoryRegister repositoryRegister
) {
33 this.userSession
= userSession
;
34 this.repositoryRegister
= repositoryRegister
;
38 * Sends back the first level of the Tree. Independent from inputElement
41 public Object
[] getElements(Object inputElement
) {
42 List
<Object
> objs
= new ArrayList
<Object
>();
43 if (userSession
!= null) {
44 Node userHome
= JcrUtils
.getUserHome(userSession
);
48 if (repositoryRegister
!= null)
49 objs
.add(repositoryRegister
);
50 return objs
.toArray();
53 public Object
[] getChildren(Object parentElement
) {
54 if (parentElement
instanceof Node
) {
55 return childrenNodes((Node
) parentElement
);
56 } else if (parentElement
instanceof RepositoryNode
) {
57 return ((RepositoryNode
) parentElement
).getChildren();
58 } else if (parentElement
instanceof WorkspaceNode
) {
59 Session session
= ((WorkspaceNode
) parentElement
).getSession();
64 return childrenNodes(session
.getRootNode());
65 } catch (RepositoryException e
) {
66 throw new ArgeoException("Cannot retrieve root node of "
69 } else if (parentElement
instanceof RepositoryRegister
) {
70 RepositoryRegister repositoryRegister
= (RepositoryRegister
) parentElement
;
71 List
<RepositoryNode
> nodes
= new ArrayList
<RepositoryNode
>();
72 Map
<String
, Repository
> repositories
= repositoryRegister
74 for (String name
: repositories
.keySet()) {
75 nodes
.add(new RepositoryNode(name
, repositories
.get(name
)));
77 return nodes
.toArray();
83 public Object
getParent(Object element
) {
85 if (element
instanceof Node
) {
86 Node node
= (Node
) element
;
87 if (!node
.getPath().equals("/"))
88 return node
.getParent();
93 } catch (RepositoryException e
) {
98 public boolean hasChildren(Object element
) {
100 if (element
instanceof Node
) {
101 return ((Node
) element
).hasNodes();
102 } else if (element
instanceof RepositoryNode
) {
103 return ((RepositoryNode
) element
).hasChildren();
104 } else if (element
instanceof WorkspaceNode
) {
105 return ((WorkspaceNode
) element
).getSession() != null;
106 } else if (element
instanceof RepositoryRegister
) {
107 return ((RepositoryRegister
) element
).getRepositories().size() > 0;
110 } catch (RepositoryException e
) {
111 throw new ArgeoException("Cannot check children of " + element
, e
);
115 public void dispose() {
118 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
121 protected Object
[] childrenNodes(Node parentNode
) {
123 List
<Node
> children
= new ArrayList
<Node
>();
124 NodeIterator nit
= parentNode
.getNodes();
125 while (nit
.hasNext()) {
126 Node node
= nit
.nextNode();
129 Node
[] arr
= children
.toArray(new Node
[children
.size()]);
130 Arrays
.sort(arr
, itemComparator
);
132 } catch (RepositoryException e
) {
133 throw new ArgeoException("Cannot list children of " + parentNode
, e
);