1 package org
.argeo
.jcr
.ui
.explorer
.browser
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Arrays
;
8 import javax
.jcr
.Session
;
10 import org
.apache
.commons
.logging
.Log
;
11 import org
.apache
.commons
.logging
.LogFactory
;
12 import org
.argeo
.eclipse
.ui
.TreeParent
;
13 import org
.argeo
.jcr
.ArgeoJcrConstants
;
14 import org
.argeo
.jcr
.JcrUtils
;
15 import org
.argeo
.jcr
.RepositoryRegister
;
16 import org
.argeo
.jcr
.security
.JcrKeyring
;
17 import org
.argeo
.jcr
.ui
.explorer
.model
.RepositoriesNode
;
18 import org
.argeo
.jcr
.ui
.explorer
.model
.SingleJcrNode
;
19 import org
.argeo
.jcr
.ui
.explorer
.utils
.TreeObjectsComparator
;
20 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
21 import org
.eclipse
.jface
.viewers
.Viewer
;
24 * Implementation of the {@code ITreeContentProvider} to display multiple
25 * repository environment in a tree like structure
28 public class NodeContentProvider
implements ITreeContentProvider
{
29 private final static Log log
= LogFactory
.getLog(NodeContentProvider
.class);
32 final private RepositoryRegister repositoryRegister
;
33 final private Session userSession
;
34 final private JcrKeyring jcrKeyring
;
35 final private boolean sortChildren
;
38 private TreeObjectsComparator itemComparator
= new TreeObjectsComparator();
40 public NodeContentProvider(JcrKeyring jcrKeyring
,
41 RepositoryRegister repositoryRegister
, Boolean sortChildren
) {
42 this.userSession
= jcrKeyring
!= null ? jcrKeyring
.getSession() : null;
43 this.jcrKeyring
= jcrKeyring
;
44 this.repositoryRegister
= repositoryRegister
;
45 this.sortChildren
= sortChildren
;
49 * Sends back the first level of the Tree. Independent from inputElement
52 public Object
[] getElements(Object inputElement
) {
53 List
<Object
> objs
= new ArrayList
<Object
>();
54 if (userSession
!= null) {
55 Node userHome
= JcrUtils
.getUserHome(userSession
);
57 // TODO : find a way to dynamically get alias for the node
58 objs
.add(new SingleJcrNode(null, userHome
, userSession
59 .getUserID(), ArgeoJcrConstants
.ALIAS_NODE
));
61 if (repositoryRegister
!= null)
62 objs
.add(new RepositoriesNode("Repositories", repositoryRegister
,
64 return objs
.toArray();
67 public Object
[] getChildren(Object parentElement
) {
68 if (parentElement
instanceof TreeParent
) {
70 // TreeParent[] arr = (TreeParent[]) ((TreeParent)
73 Object
[] tmpArr
= ((TreeParent
) parentElement
).getChildren();
74 TreeParent
[] arr
= new TreeParent
[tmpArr
.length
];
75 for (int i
= 0; i
< tmpArr
.length
; i
++)
76 arr
[i
] = (TreeParent
) tmpArr
[i
];
78 Arrays
.sort(arr
, itemComparator
);
81 return ((TreeParent
) parentElement
).getChildren();
88 public Object
getParent(Object element
) {
89 if (element
instanceof TreeParent
) {
90 return ((TreeParent
) element
).getParent();
95 public boolean hasChildren(Object element
) {
96 if (element
instanceof RepositoriesNode
) {
97 RepositoryRegister rr
= ((RepositoriesNode
) element
)
98 .getRepositoryRegister();
99 return rr
.getRepositories().size() > 0;
100 } else if (element
instanceof TreeParent
) {
101 TreeParent tp
= (TreeParent
) element
;
102 return tp
.hasChildren();
107 public void dispose() {
110 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {