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 (newInput
== null)// dispose
55 if (userSession
!= null) {
56 Node userHome
= JcrUtils
.getUserHome(userSession
);
57 if (userHome
!= null) {
58 // TODO : find a way to dynamically get alias for the node
61 homeNode
= new SingleJcrNode(null, userHome
,
62 userSession
.getUserID(), ArgeoJcrConstants
.ALIAS_NODE
);
65 if (repositoryRegister
!= null) {
66 if (repositoriesNode
!= null)
67 repositoriesNode
.dispose();
68 repositoriesNode
= new RepositoriesNode("Repositories",
69 repositoryRegister
, null, jcrKeyring
);
74 * Sends back the first level of the Tree. Independent from inputElement
77 public Object
[] getElements(Object inputElement
) {
78 List
<Object
> objs
= new ArrayList
<Object
>();
81 if (repositoriesNode
!= null)
82 objs
.add(repositoriesNode
);
83 return objs
.toArray();
86 public Object
[] getChildren(Object parentElement
) {
87 if (parentElement
instanceof TreeParent
) {
89 // TreeParent[] arr = (TreeParent[]) ((TreeParent)
92 Object
[] tmpArr
= ((TreeParent
) parentElement
).getChildren();
93 TreeParent
[] arr
= new TreeParent
[tmpArr
.length
];
94 for (int i
= 0; i
< tmpArr
.length
; i
++)
95 arr
[i
] = (TreeParent
) tmpArr
[i
];
97 Arrays
.sort(arr
, itemComparator
);
100 return ((TreeParent
) parentElement
).getChildren();
103 return new Object
[0];
107 public Object
getParent(Object element
) {
108 if (element
instanceof TreeParent
) {
109 return ((TreeParent
) element
).getParent();
114 public boolean hasChildren(Object element
) {
115 if (element
instanceof RepositoriesNode
) {
116 RepositoryRegister rr
= ((RepositoriesNode
) element
)
117 .getRepositoryRegister();
118 return rr
.getRepositories().size() > 0;
119 } else if (element
instanceof TreeParent
) {
120 TreeParent tp
= (TreeParent
) element
;
121 return tp
.hasChildren();
126 public void dispose() {
127 if (homeNode
!= null)
129 if (repositoriesNode
!= null) {
130 // logs out open sessions
131 // see https://bugzilla.argeo.org/show_bug.cgi?id=23
132 repositoriesNode
.dispose();