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
;
20 public class NodeContentProvider
implements ITreeContentProvider
{
21 private ItemComparator itemComparator
= new ItemComparator();
23 private RepositoryRegister repositoryRegister
;
24 private Session userSession
;
26 public NodeContentProvider(Session userSession
,
27 RepositoryRegister repositoryRegister
) {
28 this.userSession
= userSession
;
29 this.repositoryRegister
= repositoryRegister
;
33 * Sends back the first level of the Tree. Independent from inputElement
36 public Object
[] getElements(Object inputElement
) {
37 List
<Object
> objs
= new ArrayList
<Object
>();
38 if (userSession
!= null) {
39 Node userHome
= JcrUtils
.getUserHome(userSession
);
43 if (repositoryRegister
!= null)
44 objs
.add(repositoryRegister
);
45 return objs
.toArray();
48 public Object
[] getChildren(Object parentElement
) {
49 if (parentElement
instanceof Node
) {
50 return childrenNodes((Node
) parentElement
);
51 } else if (parentElement
instanceof RepositoryNode
) {
52 return ((RepositoryNode
) parentElement
).getChildren();
53 } else if (parentElement
instanceof WorkspaceNode
) {
54 Session session
= ((WorkspaceNode
) parentElement
).getSession();
59 return childrenNodes(session
.getRootNode());
60 } catch (RepositoryException e
) {
61 throw new ArgeoException("Cannot retrieve root node of "
64 } else if (parentElement
instanceof RepositoryRegister
) {
65 RepositoryRegister repositoryRegister
= (RepositoryRegister
) parentElement
;
66 List
<RepositoryNode
> nodes
= new ArrayList
<RepositoryNode
>();
67 Map
<String
, Repository
> repositories
= repositoryRegister
69 for (String name
: repositories
.keySet()) {
70 nodes
.add(new RepositoryNode(name
, repositories
.get(name
)));
72 return nodes
.toArray();
78 public Object
getParent(Object element
) {
80 if (element
instanceof Node
) {
81 Node node
= (Node
) element
;
82 if (!node
.getPath().equals("/"))
83 return node
.getParent();
88 } catch (RepositoryException e
) {
93 public boolean hasChildren(Object element
) {
95 if (element
instanceof Node
) {
96 return ((Node
) element
).hasNodes();
97 } else if (element
instanceof RepositoryNode
) {
98 return ((RepositoryNode
) element
).hasChildren();
99 } else if (element
instanceof WorkspaceNode
) {
100 return ((WorkspaceNode
) element
).getSession() != null;
101 } else if (element
instanceof RepositoryRegister
) {
102 return ((RepositoryRegister
) element
).getRepositories().size() > 0;
105 } catch (RepositoryException e
) {
106 throw new ArgeoException("Cannot check children of " + element
, e
);
110 public void dispose() {
113 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
116 protected Object
[] childrenNodes(Node parentNode
) {
118 List
<Node
> children
= new ArrayList
<Node
>();
119 NodeIterator nit
= parentNode
.getNodes();
120 while (nit
.hasNext()) {
121 Node node
= nit
.nextNode();
124 Node
[] arr
= children
.toArray(new Node
[children
.size()]);
125 Arrays
.sort(arr
, itemComparator
);
127 } catch (RepositoryException e
) {
128 throw new ArgeoException("Cannot list children of " + parentNode
, e
);