]> git.argeo.org Git - lgpl/argeo-commons.git/blob - server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/NodeContentProvider.java
Update license headers
[lgpl/argeo-commons.git] / server / plugins / org.argeo.jcr.ui.explorer / src / main / java / org / argeo / jcr / ui / explorer / browser / NodeContentProvider.java
1 /*
2 * Copyright (C) 2007-2012 Argeo GmbH
3 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16 package org.argeo.jcr.ui.explorer.browser;
17
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.List;
21
22 import javax.jcr.Node;
23 import javax.jcr.RepositoryFactory;
24 import javax.jcr.Session;
25
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;
36
37 /**
38 * Implementation of the {@code ITreeContentProvider} to display multiple
39 * repository environment in a tree like structure
40 *
41 */
42 public class NodeContentProvider implements ITreeContentProvider {
43 final private RepositoryRegister repositoryRegister;
44 final private RepositoryFactory repositoryFactory;
45 /**
46 * A session of the logged in user on the default workspace of the node
47 * repository.
48 */
49 final private Session userSession;
50 final private Keyring keyring;
51 final private boolean sortChildren;
52
53 // reference for cleaning
54 private SingleJcrNode homeNode = null;
55 private RepositoriesNode repositoriesNode = null;
56
57 // Utils
58 private TreeObjectsComparator itemComparator = new TreeObjectsComparator();
59
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;
68 }
69
70 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
71 if (newInput == null)// dispose
72 return;
73
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
78 if (homeNode != null)
79 homeNode.dispose();
80 homeNode = new SingleJcrNode(null, userHome,
81 userSession.getUserID(), ArgeoJcrConstants.ALIAS_NODE);
82 }
83 }
84 if (repositoryRegister != null) {
85 if (repositoriesNode != null)
86 repositoriesNode.dispose();
87 repositoriesNode = new RepositoriesNode("Repositories",
88 repositoryRegister, repositoryFactory, null, userSession,
89 keyring);
90 }
91 }
92
93 /**
94 * Sends back the first level of the Tree. Independent from inputElement
95 * that can be null
96 */
97 public Object[] getElements(Object inputElement) {
98 List<Object> objs = new ArrayList<Object>();
99 if (homeNode != null)
100 objs.add(homeNode);
101 if (repositoriesNode != null)
102 objs.add(repositoriesNode);
103 return objs.toArray();
104 }
105
106 public Object[] getChildren(Object parentElement) {
107 if (parentElement instanceof TreeParent) {
108 if (sortChildren) {
109 // TreeParent[] arr = (TreeParent[]) ((TreeParent)
110 // parentElement)
111 // .getChildren();
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];
116
117 Arrays.sort(arr, itemComparator);
118 return arr;
119 } else
120 return ((TreeParent) parentElement).getChildren();
121
122 } else {
123 return new Object[0];
124 }
125 }
126
127 public Object getParent(Object element) {
128 if (element instanceof TreeParent) {
129 return ((TreeParent) element).getParent();
130 } else
131 return null;
132 }
133
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();
142 }
143 return false;
144 }
145
146 public void dispose() {
147 if (homeNode != null)
148 homeNode.dispose();
149 if (repositoriesNode != null) {
150 // logs out open sessions
151 // see https://bugzilla.argeo.org/show_bug.cgi?id=23
152 repositoriesNode.dispose();
153 }
154 }
155
156 }