]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/editors/BundleRawPage.java
Adapt to changes in Argeo Commons.
[gpl/argeo-slc.git] / org.argeo.slc.client.ui.dist / src / org / argeo / slc / client / ui / dist / editors / BundleRawPage.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.slc.client.ui.dist.editors;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import javax.jcr.Node;
22 import javax.jcr.NodeIterator;
23 import javax.jcr.Property;
24 import javax.jcr.PropertyIterator;
25 import javax.jcr.RepositoryException;
26 import javax.jcr.Value;
27 import javax.jcr.nodetype.NodeType;
28
29 import org.argeo.slc.SlcException;
30 import org.argeo.slc.SlcNames;
31 import org.argeo.slc.SlcTypes;
32 import org.argeo.slc.client.ui.dist.DistImages;
33 import org.argeo.slc.client.ui.dist.utils.DistUiHelpers;
34 import org.eclipse.jface.viewers.ColumnLabelProvider;
35 import org.eclipse.jface.viewers.ITreeContentProvider;
36 import org.eclipse.jface.viewers.TreeViewer;
37 import org.eclipse.jface.viewers.Viewer;
38 import org.eclipse.jface.viewers.ViewerCell;
39 import org.eclipse.swt.SWT;
40 import org.eclipse.swt.layout.GridData;
41 import org.eclipse.swt.layout.GridLayout;
42 import org.eclipse.swt.widgets.Composite;
43 import org.eclipse.swt.widgets.Tree;
44 import org.eclipse.swt.widgets.TreeColumn;
45 import org.eclipse.ui.forms.IManagedForm;
46 import org.eclipse.ui.forms.editor.FormEditor;
47 import org.eclipse.ui.forms.editor.FormPage;
48 import org.eclipse.ui.forms.widgets.ScrolledForm;
49
50 /** List all properties of current bundle as a tree */
51 public class BundleRawPage extends FormPage implements SlcNames, SlcTypes {
52 // private final static Log log =
53 // LogFactory.getLog(ArtifactDetailsPage.class);
54
55 // Main business Objects
56 private Node currBundle;
57
58 // This page widgets
59 private TreeViewer complexTree;
60
61 public BundleRawPage(FormEditor editor, String title, Node currentNode) {
62 super(editor, "id", title);
63 this.currBundle = currentNode;
64 }
65
66 protected void createFormContent(IManagedForm managedForm) {
67 ScrolledForm form = managedForm.getForm();
68 GridLayout layout = new GridLayout(1, false);
69 layout.marginWidth = 5;
70 form.getBody().setLayout(layout);
71 createViewer(form.getBody());
72 }
73
74 private void createViewer(Composite parent) {
75
76 // Create the viewer
77 int style = SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION;
78 Tree tree = new Tree(parent, style);
79 GridData gd = new GridData(GridData.FILL_BOTH);
80 gd.grabExcessHorizontalSpace = true;
81 gd.grabExcessVerticalSpace = true;
82 tree.setLayoutData(gd);
83 createColumn(tree, "Attribute", SWT.LEFT, 200);
84 createColumn(tree, "Value", SWT.LEFT, 200);
85 tree.setLinesVisible(true);
86 tree.setHeaderVisible(true);
87
88 complexTree = new TreeViewer(tree);
89 complexTree.setContentProvider(new TreeContentProvider());
90 complexTree.setLabelProvider(new TreeLabelProvider());
91
92 // Initialize
93 complexTree.setInput(currBundle);
94 // result.expandAll();
95 complexTree.expandToLevel(2);
96
97 }
98
99 private static TreeColumn createColumn(Tree parent, String name, int style,
100 int width) {
101 TreeColumn result = new TreeColumn(parent, style);
102 result.setText(name);
103 result.setWidth(width);
104 result.setMoveable(true);
105 result.setResizable(true);
106 return result;
107 }
108
109 // View specific object
110 private class ViewSpecificItems {
111 private String key;
112 private Object value;
113 private boolean isFolder;
114 private Node curNode;
115
116 public ViewSpecificItems(String key, Object value, boolean isFolder) {
117 this.key = key;
118 this.value = value;
119 this.isFolder = isFolder;
120 }
121
122 public String getKey() {
123 return key;
124 }
125
126 public void setNode(Node node) {
127 this.curNode = node;
128 }
129
130 public Node getNode() {
131 return curNode;
132 }
133
134 public Object getValue() {
135 return value;
136 }
137
138 public boolean isFolder() {
139 return isFolder;
140 }
141
142 }
143
144 // providers
145 private class TreeLabelProvider extends ColumnLabelProvider implements
146 SlcTypes, SlcNames {
147 private static final long serialVersionUID = -6385445983392621937L;
148
149 public void update(ViewerCell cell) {
150 try {
151
152 int colIndex = cell.getColumnIndex();
153 Object element = cell.getElement();
154 if (element instanceof Property) {
155 Property prop = (Property) element;
156 if (colIndex == 0)
157 cell.setText(DistUiHelpers.getLabelJcrName(prop
158 .getName()));
159 else if (colIndex == 1)
160 cell.setText(DistUiHelpers.formatValueAsString(prop
161 .getValue()));
162
163 } else if (element instanceof ViewSpecificItems) {
164 if (colIndex == 0)
165 cell.setText(((ViewSpecificItems) element).getKey());
166 else if (colIndex == 1)
167 cell.setText(DistUiHelpers
168 .formatAsString(((ViewSpecificItems) element)
169 .getValue()));
170
171 } else if (element instanceof Node) {
172 Node node = (Node) element;
173 if (colIndex == 0) {
174 if (node.isNodeType(NodeType.NT_FILE)) {
175 cell.setImage(DistImages.IMG_FILE);
176 cell.setText(node.getName());
177 } else if (node.isNodeType(SLC_IMPORTED_PACKAGE))
178 cell.setText("Import package");
179 else if (node.isNodeType(SLC_EXPORTED_PACKAGE))
180 cell.setText("Export package");
181
182 } else if (colIndex == 1) {
183 if (node.isNodeType(SLC_ARTIFACT)) {
184 StringBuffer sb = new StringBuffer("");
185 if (node.hasProperty(SLC_ARTIFACT_CLASSIFIER)) {
186 sb.append(node.getProperty(
187 SLC_ARTIFACT_CLASSIFIER).getString());
188 sb.append(" ");
189 }
190 if (node.hasProperty(SLC_ARTIFACT_EXTENSION))
191 sb.append(node.getProperty(
192 SLC_ARTIFACT_EXTENSION).getString());
193 cell.setText(sb.toString());
194 } else if (node.isNodeType(SLC_IMPORTED_PACKAGE)
195 || node.isNodeType(SLC_EXPORTED_PACKAGE))
196 cell.setText(node.getProperty(SLC_NAME).getString());
197 }
198 }
199 } catch (RepositoryException e) {
200 throw new SlcException(
201 "unexpected error while getting artifact information",
202 e);
203 }
204 }
205 }
206
207 private class TreeContentProvider implements ITreeContentProvider {
208 private static final long serialVersionUID = -4315686158836938052L;
209
210 public Object[] getElements(Object parent) {
211 List<Object> elements = new ArrayList<Object>();
212
213 try {
214 Node node = (Node) parent;
215 elements = new ArrayList<Object>();
216
217 // Maven coordinates
218 // elements.add(node.getProperty(SLC_GROUP_ID));
219 // elements.add(node.getProperty(SLC_ARTIFACT_ID));
220 // elements.add(node.getProperty(SLC_ARTIFACT_VERSION));
221
222 // Meta information
223 // boolean gotSource = false;
224 // // TODO: implement this check
225 // elements.add(new ViewSpecificItems("Sources available",
226 // gotSource));
227
228 // Jars
229 NodeIterator ni = node.getNodes();
230 while (ni.hasNext()) {
231 Node child = ni.nextNode();
232 if (child.isNodeType(SLC_ARTIFACT)) {
233 // we skip sha1 files for the time being.
234 elements.add(child);
235 }
236 }
237
238 // Properties
239 PropertyIterator pi = node.getProperties();
240 while (pi.hasNext()) {
241 Property curProp = pi.nextProperty();
242 if (!curProp.getName().startsWith("jcr:")
243 && !curProp.isMultiple())
244 elements.add(curProp);
245 }
246
247 } catch (RepositoryException e) {
248 throw new SlcException(
249 "Unexpected exception while listing node properties", e);
250 }
251 return elements.toArray();
252 }
253
254 public Object getParent(Object child) {
255 return null;
256 }
257
258 public Object[] getChildren(Object parent) {
259 Object[] result = null;
260 try {
261 if (parent instanceof Property) {
262 Property prop = (Property) parent;
263 if (prop.isMultiple()) {
264 Value[] values = prop.getValues();
265 return values;
266 }
267 } else if (parent instanceof Node) {
268 Node node = (Node) parent;
269 if (node.hasNodes()) {
270 List<Object> elements = new ArrayList<Object>();
271 PropertyIterator pi = node.getProperties();
272 while (pi.hasNext()) {
273 Property curProp = pi.nextProperty();
274 if (!curProp.getName().startsWith("jcr:")
275 && !curProp.isMultiple())
276 elements.add(curProp);
277 }
278
279 NodeIterator ni = node.getNodes();
280 while (ni.hasNext()) {
281 Node curNode = ni.nextNode();
282 if (curNode.isNodeType(SLC_IMPORTED_PACKAGE)
283 || curNode.isNodeType(SLC_EXPORTED_PACKAGE)) {
284 ViewSpecificItems vsi = new ViewSpecificItems(
285 "Bundle dependencies", "", true);
286 vsi.setNode(node);
287 elements.add(vsi);
288 break;
289 }
290 }
291 return elements.toArray();
292 }
293 } else if (parent instanceof ViewSpecificItems
294 && ((ViewSpecificItems) parent).isFolder()) {
295 NodeIterator ni = ((ViewSpecificItems) parent).getNode()
296 .getNodes();
297 List<Node> elements = new ArrayList<Node>();
298 while (ni.hasNext()) {
299 Node curNode = ni.nextNode();
300 if (curNode.isNodeType(SLC_IMPORTED_PACKAGE)
301 || curNode.isNodeType(SLC_EXPORTED_PACKAGE)) {
302 elements.add(curNode);
303 }
304 }
305 return elements.toArray();
306 }
307 } catch (RepositoryException e) {
308 throw new SlcException(
309 "Unexpected error getting multiple values property.", e);
310 }
311 return result;
312 }
313
314 public boolean hasChildren(Object parent) {
315 try {
316 if (parent instanceof Property
317 && ((Property) parent).isMultiple()) {
318 return true;
319 } else if (parent instanceof Node && ((Node) parent).hasNodes()
320 && ((Node) parent).isNodeType(SLC_BUNDLE_ARTIFACT)) {
321 return true;
322 } else if (parent instanceof ViewSpecificItems
323 && ((ViewSpecificItems) parent).isFolder()) {
324 return true;
325 }
326 } catch (RepositoryException e) {
327 throw new SlcException(
328 "Unexpected exception while checking if property is multiple",
329 e);
330 }
331 return false;
332 }
333
334 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
335 }
336
337 public void dispose() {
338 }
339 }
340 }