1 package org
.argeo
.jcr
.ui
.explorer
.browser
;
3 import java
.util
.ArrayList
;
7 import javax
.jcr
.Session
;
9 import org
.apache
.commons
.logging
.Log
;
10 import org
.apache
.commons
.logging
.LogFactory
;
11 import org
.argeo
.eclipse
.ui
.TreeParent
;
12 import org
.argeo
.jcr
.ArgeoJcrConstants
;
13 import org
.argeo
.jcr
.JcrUtils
;
14 import org
.argeo
.jcr
.RepositoryRegister
;
15 import org
.argeo
.jcr
.ui
.explorer
.model
.RepositoriesNode
;
16 import org
.argeo
.jcr
.ui
.explorer
.model
.SingleJcrNode
;
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 final static Log log
= LogFactory
.getLog(NodeContentProvider
.class);
29 private RepositoryRegister repositoryRegister
;
30 private Session userSession
;
33 // private ItemComparator itemComparator = new ItemComparator();
35 public NodeContentProvider(Session userSession
,
36 RepositoryRegister repositoryRegister
) {
37 this.userSession
= userSession
;
38 this.repositoryRegister
= repositoryRegister
;
42 * Sends back the first level of the Tree. Independent from inputElement
45 public Object
[] getElements(Object inputElement
) {
46 List
<Object
> objs
= new ArrayList
<Object
>();
47 if (userSession
!= null) {
48 Node userHome
= JcrUtils
.getUserHome(userSession
);
50 // TODO : find a way to dynamically get alias for the node
51 objs
.add(new SingleJcrNode(null, userHome
, userSession
52 .getUserID(), ArgeoJcrConstants
.ALIAS_NODE
));
54 if (repositoryRegister
!= null)
55 objs
.add(new RepositoriesNode("Repositories", repositoryRegister
,
57 return objs
.toArray();
60 public Object
[] getChildren(Object parentElement
) {
61 // if (parentElement instanceof Node) {
62 // return childrenNodes((Node) parentElement);
63 // } else if (parentElement instanceof RepositoryNode) {
64 // return ((RepositoryNode) parentElement).getChildren();
65 // } else if (parentElement instanceof WorkspaceNode) {
66 // Session session = ((WorkspaceNode) parentElement).getSession();
67 // if (session == null)
68 // return new Object[0];
71 // return childrenNodes(session.getRootNode());
72 // } catch (RepositoryException e) {
73 // throw new ArgeoException("Cannot retrieve root node of "
76 // } else if (parentElement instanceof RepositoryRegister) {
77 // RepositoryRegister repositoryRegister = (RepositoryRegister)
79 // List<RepositoryNode> nodes = new ArrayList<RepositoryNode>();
80 // Map<String, Repository> repositories = repositoryRegister
81 // .getRepositories();
82 // for (String name : repositories.keySet()) {
83 // nodes.add(new RepositoryNode(name, repositories.get(name)));
85 // return nodes.toArray();
87 if (parentElement
instanceof TreeParent
)
88 return ((TreeParent
) parentElement
).getChildren();
94 public Object
getParent(Object element
) {
95 if (element
instanceof TreeParent
) {
96 return ((TreeParent
) element
).getParent();
101 public boolean hasChildren(Object element
) {
102 if (element
instanceof RepositoriesNode
) {
103 RepositoryRegister rr
= ((RepositoriesNode
) element
)
104 .getRepositoryRegister();
105 return rr
.getRepositories().size() > 0;
106 } else if (element
instanceof TreeParent
) {
107 TreeParent tp
= (TreeParent
) element
;
108 return tp
.hasChildren();
109 // } else if (element instanceof RepositoryNode) {
110 // return ((RepositoryNode) element).hasChildren();
111 // } else if (element instanceof WorkspaceNode) {
112 // return ((WorkspaceNode) element).getSession() != null;
115 // } catch (RepositoryException e) {
116 // throw new ArgeoException("Cannot check children of " + element, e);
120 public void dispose() {
123 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
126 // protected Object[] childrenNodes(Node parentNode) {
128 // List<Node> children = new ArrayList<Node>();
129 // NodeIterator nit = parentNode.getNodes();
130 // while (nit.hasNext()) {
131 // Node node = nit.nextNode();
132 // children.add(node);
134 // Node[] arr = children.toArray(new Node[children.size()]);
135 // Arrays.sort(arr, itemComparator);
137 // } catch (RepositoryException e) {
138 // throw new ArgeoException("Cannot list children of " + parentNode, e);