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
.argeo
.eclipse
.ui
.TreeParent
;
11 import org
.argeo
.jcr
.ArgeoJcrConstants
;
12 import org
.argeo
.jcr
.JcrUtils
;
13 import org
.argeo
.jcr
.RepositoryRegister
;
14 import org
.argeo
.jcr
.security
.JcrKeyring
;
15 import org
.argeo
.jcr
.ui
.explorer
.model
.RepositoriesNode
;
16 import org
.argeo
.jcr
.ui
.explorer
.model
.SingleJcrNode
;
17 import org
.argeo
.jcr
.ui
.explorer
.utils
.TreeObjectsComparator
;
18 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
19 import org
.eclipse
.jface
.viewers
.Viewer
;
22 * Implementation of the {@code ITreeContentProvider} to display multiple
23 * repository environment in a tree like structure
26 public class NodeContentProvider
implements ITreeContentProvider
{
27 // private final static Log log =
28 // LogFactory.getLog(NodeContentProvider.class);
31 final private RepositoryRegister repositoryRegister
;
32 final private Session userSession
;
33 final private JcrKeyring jcrKeyring
;
34 final private boolean sortChildren
;
36 // reference for cleaning
37 private SingleJcrNode homeNode
= null;
38 private RepositoriesNode repositoriesNode
= null;
41 private TreeObjectsComparator itemComparator
= new TreeObjectsComparator();
43 public NodeContentProvider(JcrKeyring jcrKeyring
,
44 RepositoryRegister repositoryRegister
, Boolean sortChildren
) {
45 this.userSession
= jcrKeyring
!= null ? jcrKeyring
.getSession() : null;
46 this.jcrKeyring
= jcrKeyring
;
47 this.repositoryRegister
= repositoryRegister
;
48 this.sortChildren
= sortChildren
;
51 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
52 if (userSession
!= null) {
53 Node userHome
= JcrUtils
.getUserHome(userSession
);
54 if (userHome
!= null) {
55 // TODO : find a way to dynamically get alias for the node
58 homeNode
= new SingleJcrNode(null, userHome
,
59 userSession
.getUserID(), ArgeoJcrConstants
.ALIAS_NODE
);
62 if (repositoryRegister
!= null) {
63 if (repositoriesNode
!= null)
64 repositoriesNode
.dispose();
65 repositoriesNode
= new RepositoriesNode("Repositories",
66 repositoryRegister
, null, jcrKeyring
);
71 * Sends back the first level of the Tree. Independent from inputElement
74 public Object
[] getElements(Object inputElement
) {
75 List
<Object
> objs
= new ArrayList
<Object
>();
78 if (repositoriesNode
!= null)
79 objs
.add(repositoriesNode
);
80 return objs
.toArray();
83 public Object
[] getChildren(Object parentElement
) {
84 if (parentElement
instanceof TreeParent
) {
86 // TreeParent[] arr = (TreeParent[]) ((TreeParent)
89 Object
[] tmpArr
= ((TreeParent
) parentElement
).getChildren();
90 TreeParent
[] arr
= new TreeParent
[tmpArr
.length
];
91 for (int i
= 0; i
< tmpArr
.length
; i
++)
92 arr
[i
] = (TreeParent
) tmpArr
[i
];
94 Arrays
.sort(arr
, itemComparator
);
97 return ((TreeParent
) parentElement
).getChildren();
100 return new Object
[0];
104 public Object
getParent(Object element
) {
105 if (element
instanceof TreeParent
) {
106 return ((TreeParent
) element
).getParent();
111 public boolean hasChildren(Object element
) {
112 if (element
instanceof RepositoriesNode
) {
113 RepositoryRegister rr
= ((RepositoriesNode
) element
)
114 .getRepositoryRegister();
115 return rr
.getRepositories().size() > 0;
116 } else if (element
instanceof TreeParent
) {
117 TreeParent tp
= (TreeParent
) element
;
118 return tp
.hasChildren();
123 public void dispose() {
124 if (homeNode
!= null)
126 if (repositoriesNode
!= null) {
127 // logs out open sessions
128 // see https://bugzilla.argeo.org/show_bug.cgi?id=23
129 repositoriesNode
.dispose();