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
.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
;
32 /** Sends back the first level of the Tree. Independent from inputElement that can be null*/
33 public Object
[] getElements(Object inputElement
) {
34 List
<Object
> objs
= new ArrayList
<Object
>();
35 if (userSession
!= null)
36 objs
.add(JcrUtils
.getUserHome(userSession
));
37 if (repositoryRegister
!= null)
38 objs
.add(repositoryRegister
);
39 return objs
.toArray();
42 public Object
[] getChildren(Object parentElement
) {
43 if (parentElement
instanceof Node
) {
44 return childrenNodes((Node
) parentElement
);
45 } else if (parentElement
instanceof RepositoryNode
) {
46 return ((RepositoryNode
) parentElement
).getChildren();
47 } else if (parentElement
instanceof WorkspaceNode
) {
48 Session session
= ((WorkspaceNode
) parentElement
).getSession();
53 return childrenNodes(session
.getRootNode());
54 } catch (RepositoryException e
) {
55 throw new ArgeoException("Cannot retrieve root node of "
58 } else if (parentElement
instanceof RepositoryRegister
) {
59 RepositoryRegister repositoryRegister
= (RepositoryRegister
) parentElement
;
60 List
<RepositoryNode
> nodes
= new ArrayList
<RepositoryNode
>();
61 Map
<String
, Repository
> repositories
= repositoryRegister
63 for (String name
: repositories
.keySet()) {
64 nodes
.add(new RepositoryNode(name
, repositories
.get(name
)));
66 return nodes
.toArray();
72 public Object
getParent(Object element
) {
74 if (element
instanceof Node
) {
75 Node node
= (Node
) element
;
76 if(!node
.getPath().equals("/"))
77 return node
.getParent();
82 } catch (RepositoryException e
) {
87 public boolean hasChildren(Object element
) {
89 if (element
instanceof Node
) {
90 return ((Node
) element
).hasNodes();
91 } else if (element
instanceof RepositoryNode
) {
92 return ((RepositoryNode
) element
).hasChildren();
93 } else if (element
instanceof WorkspaceNode
) {
94 return ((WorkspaceNode
) element
).getSession() != null;
95 } else if (element
instanceof RepositoryRegister
) {
96 return ((RepositoryRegister
) element
).getRepositories().size() > 0;
99 } catch (RepositoryException e
) {
100 throw new ArgeoException("Cannot check children of " + element
, e
);
104 public void dispose() {
107 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
110 protected Object
[] childrenNodes(Node parentNode
) {
112 List
<Node
> children
= new ArrayList
<Node
>();
113 NodeIterator nit
= parentNode
.getNodes();
114 while (nit
.hasNext()) {
115 Node node
= nit
.nextNode();
118 Node
[] arr
= children
.toArray(new Node
[children
.size()]);
119 Arrays
.sort(arr
, itemComparator
);
121 } catch (RepositoryException e
) {
122 throw new ArgeoException("Cannot list children of " + parentNode
, e
);