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
.RepositoryRegister
;
29 import org
.argeo
.jcr
.UserJcrUtils
;
30 import org
.argeo
.jcr
.ui
.explorer
.model
.RepositoriesNode
;
31 import org
.argeo
.jcr
.ui
.explorer
.model
.SingleJcrNode
;
32 import org
.argeo
.jcr
.ui
.explorer
.utils
.TreeObjectsComparator
;
33 import org
.argeo
.util
.security
.Keyring
;
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 final private RepositoryRegister repositoryRegister
;
44 final private RepositoryFactory repositoryFactory
;
46 * A session of the logged in user on the default workspace of the node
49 final private Session userSession
;
50 final private Keyring keyring
;
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(Session userSession
, Keyring keyring
,
61 RepositoryRegister repositoryRegister
,
62 RepositoryFactory repositoryFactory
, Boolean sortChildren
) {
63 this.userSession
= userSession
;
64 this.keyring
= keyring
;
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
= UserJcrUtils
.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, userSession
,
94 * Sends back the first level of the Tree. Independent from inputElement
97 public Object
[] getElements(Object inputElement
) {
98 List
<Object
> objs
= new ArrayList
<Object
>();
101 if (repositoriesNode
!= null)
102 objs
.add(repositoriesNode
);
103 return objs
.toArray();
106 public Object
[] getChildren(Object parentElement
) {
107 if (parentElement
instanceof TreeParent
) {
109 // TreeParent[] arr = (TreeParent[]) ((TreeParent)
112 Object
[] tmpArr
= ((TreeParent
) parentElement
).getChildren();
113 TreeParent
[] arr
= new TreeParent
[tmpArr
.length
];
114 for (int i
= 0; i
< tmpArr
.length
; i
++)
115 arr
[i
] = (TreeParent
) tmpArr
[i
];
117 Arrays
.sort(arr
, itemComparator
);
120 return ((TreeParent
) parentElement
).getChildren();
123 return new Object
[0];
127 public Object
getParent(Object element
) {
128 if (element
instanceof TreeParent
) {
129 return ((TreeParent
) element
).getParent();
134 public boolean hasChildren(Object element
) {
135 if (element
instanceof RepositoriesNode
) {
136 RepositoryRegister rr
= ((RepositoriesNode
) element
)
137 .getRepositoryRegister();
138 return rr
.getRepositories().size() > 0;
139 } else if (element
instanceof TreeParent
) {
140 TreeParent tp
= (TreeParent
) element
;
141 return tp
.hasChildren();
146 public void dispose() {
147 if (homeNode
!= null)
149 if (repositoriesNode
!= null) {
150 // logs out open sessions
151 // see https://bugzilla.argeo.org/show_bug.cgi?id=23
152 repositoriesNode
.dispose();