2 * Copyright (C) 2007-2012 Mathieu Baudier
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.argeo
.jcr
.ui
.explorer
.browser
;
18 import java
.util
.ArrayList
;
19 import java
.util
.Arrays
;
20 import java
.util
.List
;
22 import javax
.jcr
.Node
;
23 import javax
.jcr
.RepositoryFactory
;
24 import javax
.jcr
.Session
;
26 import org
.argeo
.eclipse
.ui
.TreeParent
;
27 import org
.argeo
.jcr
.ArgeoJcrConstants
;
28 import org
.argeo
.jcr
.ArgeoJcrUtils
;
29 import org
.argeo
.jcr
.RepositoryRegister
;
30 import org
.argeo
.jcr
.security
.JcrKeyring
;
31 import org
.argeo
.jcr
.ui
.explorer
.model
.RepositoriesNode
;
32 import org
.argeo
.jcr
.ui
.explorer
.model
.SingleJcrNode
;
33 import org
.argeo
.jcr
.ui
.explorer
.utils
.TreeObjectsComparator
;
34 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
35 import org
.eclipse
.jface
.viewers
.Viewer
;
38 * Implementation of the {@code ITreeContentProvider} to display multiple
39 * repository environment in a tree like structure
42 public class NodeContentProvider
implements ITreeContentProvider
{
43 // private final static Log log =
44 // LogFactory.getLog(NodeContentProvider.class);
47 final private RepositoryRegister repositoryRegister
;
48 final private RepositoryFactory repositoryFactory
;
49 final private Session userSession
;
50 final private JcrKeyring jcrKeyring
;
51 final private boolean sortChildren
;
53 // reference for cleaning
54 private SingleJcrNode homeNode
= null;
55 private RepositoriesNode repositoriesNode
= null;
58 private TreeObjectsComparator itemComparator
= new TreeObjectsComparator();
60 public NodeContentProvider(JcrKeyring jcrKeyring
,
61 RepositoryRegister repositoryRegister
,
62 RepositoryFactory repositoryFactory
, Boolean sortChildren
) {
63 this.userSession
= jcrKeyring
!= null ? jcrKeyring
.getSession() : null;
64 this.jcrKeyring
= jcrKeyring
;
65 this.repositoryRegister
= repositoryRegister
;
66 this.repositoryFactory
= repositoryFactory
;
67 this.sortChildren
= sortChildren
;
70 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
71 if (newInput
== null)// dispose
74 if (userSession
!= null) {
75 Node userHome
= ArgeoJcrUtils
.getUserHome(userSession
);
76 if (userHome
!= null) {
77 // TODO : find a way to dynamically get alias for the node
80 homeNode
= new SingleJcrNode(null, userHome
,
81 userSession
.getUserID(), ArgeoJcrConstants
.ALIAS_NODE
);
84 if (repositoryRegister
!= null) {
85 if (repositoriesNode
!= null)
86 repositoriesNode
.dispose();
87 repositoriesNode
= new RepositoriesNode("Repositories",
88 repositoryRegister
, repositoryFactory
, null, jcrKeyring
);
93 * Sends back the first level of the Tree. Independent from inputElement
96 public Object
[] getElements(Object inputElement
) {
97 List
<Object
> objs
= new ArrayList
<Object
>();
100 if (repositoriesNode
!= null)
101 objs
.add(repositoriesNode
);
102 return objs
.toArray();
105 public Object
[] getChildren(Object parentElement
) {
106 if (parentElement
instanceof TreeParent
) {
108 // TreeParent[] arr = (TreeParent[]) ((TreeParent)
111 Object
[] tmpArr
= ((TreeParent
) parentElement
).getChildren();
112 TreeParent
[] arr
= new TreeParent
[tmpArr
.length
];
113 for (int i
= 0; i
< tmpArr
.length
; i
++)
114 arr
[i
] = (TreeParent
) tmpArr
[i
];
116 Arrays
.sort(arr
, itemComparator
);
119 return ((TreeParent
) parentElement
).getChildren();
122 return new Object
[0];
126 public Object
getParent(Object element
) {
127 if (element
instanceof TreeParent
) {
128 return ((TreeParent
) element
).getParent();
133 public boolean hasChildren(Object element
) {
134 if (element
instanceof RepositoriesNode
) {
135 RepositoryRegister rr
= ((RepositoriesNode
) element
)
136 .getRepositoryRegister();
137 return rr
.getRepositories().size() > 0;
138 } else if (element
instanceof TreeParent
) {
139 TreeParent tp
= (TreeParent
) element
;
140 return tp
.hasChildren();
145 public void dispose() {
146 if (homeNode
!= null)
148 if (repositoriesNode
!= null) {
149 // logs out open sessions
150 // see https://bugzilla.argeo.org/show_bug.cgi?id=23
151 repositoriesNode
.dispose();