1 package org
.argeo
.jcr
.ui
.explorer
.browser
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Arrays
;
8 import javax
.jcr
.RepositoryFactory
;
9 import javax
.jcr
.Session
;
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
.security
.JcrKeyring
;
16 import org
.argeo
.jcr
.ui
.explorer
.model
.RepositoriesNode
;
17 import org
.argeo
.jcr
.ui
.explorer
.model
.SingleJcrNode
;
18 import org
.argeo
.jcr
.ui
.explorer
.utils
.TreeObjectsComparator
;
19 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
20 import org
.eclipse
.jface
.viewers
.Viewer
;
23 * Implementation of the {@code ITreeContentProvider} to display multiple
24 * repository environment in a tree like structure
27 public class NodeContentProvider
implements ITreeContentProvider
{
28 // private final static Log log =
29 // LogFactory.getLog(NodeContentProvider.class);
32 final private RepositoryRegister repositoryRegister
;
33 final private RepositoryFactory repositoryFactory
;
34 final private Session userSession
;
35 final private JcrKeyring jcrKeyring
;
36 final private boolean sortChildren
;
38 // reference for cleaning
39 private SingleJcrNode homeNode
= null;
40 private RepositoriesNode repositoriesNode
= null;
43 private TreeObjectsComparator itemComparator
= new TreeObjectsComparator();
45 public NodeContentProvider(JcrKeyring jcrKeyring
,
46 RepositoryRegister repositoryRegister
,
47 RepositoryFactory repositoryFactory
, Boolean sortChildren
) {
48 this.userSession
= jcrKeyring
!= null ? jcrKeyring
.getSession() : null;
49 this.jcrKeyring
= jcrKeyring
;
50 this.repositoryRegister
= repositoryRegister
;
51 this.repositoryFactory
= repositoryFactory
;
52 this.sortChildren
= sortChildren
;
55 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
56 if (newInput
== null)// dispose
59 if (userSession
!= null) {
60 Node userHome
= JcrUtils
.getUserHome(userSession
);
61 if (userHome
!= null) {
62 // TODO : find a way to dynamically get alias for the node
65 homeNode
= new SingleJcrNode(null, userHome
,
66 userSession
.getUserID(), ArgeoJcrConstants
.ALIAS_NODE
);
69 if (repositoryRegister
!= null) {
70 if (repositoriesNode
!= null)
71 repositoriesNode
.dispose();
72 repositoriesNode
= new RepositoriesNode("Repositories",
73 repositoryRegister
, repositoryFactory
, null, jcrKeyring
);
78 * Sends back the first level of the Tree. Independent from inputElement
81 public Object
[] getElements(Object inputElement
) {
82 List
<Object
> objs
= new ArrayList
<Object
>();
85 if (repositoriesNode
!= null)
86 objs
.add(repositoriesNode
);
87 return objs
.toArray();
90 public Object
[] getChildren(Object parentElement
) {
91 if (parentElement
instanceof TreeParent
) {
93 // TreeParent[] arr = (TreeParent[]) ((TreeParent)
96 Object
[] tmpArr
= ((TreeParent
) parentElement
).getChildren();
97 TreeParent
[] arr
= new TreeParent
[tmpArr
.length
];
98 for (int i
= 0; i
< tmpArr
.length
; i
++)
99 arr
[i
] = (TreeParent
) tmpArr
[i
];
101 Arrays
.sort(arr
, itemComparator
);
104 return ((TreeParent
) parentElement
).getChildren();
107 return new Object
[0];
111 public Object
getParent(Object element
) {
112 if (element
instanceof TreeParent
) {
113 return ((TreeParent
) element
).getParent();
118 public boolean hasChildren(Object element
) {
119 if (element
instanceof RepositoriesNode
) {
120 RepositoryRegister rr
= ((RepositoriesNode
) element
)
121 .getRepositoryRegister();
122 return rr
.getRepositories().size() > 0;
123 } else if (element
instanceof TreeParent
) {
124 TreeParent tp
= (TreeParent
) element
;
125 return tp
.hasChildren();
130 public void dispose() {
131 if (homeNode
!= null)
133 if (repositoriesNode
!= null) {
134 // logs out open sessions
135 // see https://bugzilla.argeo.org/show_bug.cgi?id=23
136 repositoriesNode
.dispose();