1 package org
.argeo
.slc
.client
.ui
.dist
.editors
;
3 import java
.util
.ArrayList
;
7 import javax
.jcr
.NodeIterator
;
8 import javax
.jcr
.Property
;
9 import javax
.jcr
.PropertyIterator
;
10 import javax
.jcr
.RepositoryException
;
11 import javax
.jcr
.Value
;
12 import javax
.jcr
.nodetype
.NodeType
;
14 import org
.argeo
.slc
.SlcException
;
15 import org
.argeo
.slc
.SlcNames
;
16 import org
.argeo
.slc
.SlcTypes
;
17 import org
.argeo
.slc
.client
.ui
.dist
.DistImages
;
18 import org
.argeo
.slc
.client
.ui
.dist
.utils
.DistUiHelpers
;
19 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
20 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
21 import org
.eclipse
.jface
.viewers
.TreeViewer
;
22 import org
.eclipse
.jface
.viewers
.Viewer
;
23 import org
.eclipse
.jface
.viewers
.ViewerCell
;
24 import org
.eclipse
.swt
.SWT
;
25 import org
.eclipse
.swt
.layout
.GridData
;
26 import org
.eclipse
.swt
.layout
.GridLayout
;
27 import org
.eclipse
.swt
.widgets
.Composite
;
28 import org
.eclipse
.swt
.widgets
.Tree
;
29 import org
.eclipse
.swt
.widgets
.TreeColumn
;
30 import org
.eclipse
.ui
.forms
.IManagedForm
;
31 import org
.eclipse
.ui
.forms
.editor
.FormEditor
;
32 import org
.eclipse
.ui
.forms
.editor
.FormPage
;
33 import org
.eclipse
.ui
.forms
.widgets
.ScrolledForm
;
35 /** List all properties of current bundle as a tree */
36 public class BundleRawPage
extends FormPage
implements SlcNames
, SlcTypes
{
37 // private final static Log log =
38 // LogFactory.getLog(ArtifactDetailsPage.class);
40 // Main business Objects
41 private Node currBundle
;
44 private TreeViewer complexTree
;
46 public BundleRawPage(FormEditor editor
, String title
, Node currentNode
) {
47 super(editor
, "id", title
);
48 this.currBundle
= currentNode
;
51 protected void createFormContent(IManagedForm managedForm
) {
52 ScrolledForm form
= managedForm
.getForm();
53 GridLayout layout
= new GridLayout(1, false);
54 layout
.marginWidth
= 5;
55 form
.getBody().setLayout(layout
);
56 createViewer(form
.getBody());
59 private void createViewer(Composite parent
) {
62 int style
= SWT
.BORDER
| SWT
.MULTI
| SWT
.FULL_SELECTION
;
63 Tree tree
= new Tree(parent
, style
);
64 GridData gd
= new GridData(GridData
.FILL_BOTH
);
65 gd
.grabExcessHorizontalSpace
= true;
66 gd
.grabExcessVerticalSpace
= true;
67 tree
.setLayoutData(gd
);
68 createColumn(tree
, "Attribute", SWT
.LEFT
, 200);
69 createColumn(tree
, "Value", SWT
.LEFT
, 200);
70 tree
.setLinesVisible(true);
71 tree
.setHeaderVisible(true);
73 complexTree
= new TreeViewer(tree
);
74 complexTree
.setContentProvider(new TreeContentProvider());
75 complexTree
.setLabelProvider(new TreeLabelProvider());
78 complexTree
.setInput(currBundle
);
79 // result.expandAll();
80 complexTree
.expandToLevel(2);
84 private static TreeColumn
createColumn(Tree parent
, String name
, int style
,
86 TreeColumn result
= new TreeColumn(parent
, style
);
88 result
.setWidth(width
);
89 result
.setMoveable(true);
90 result
.setResizable(true);
94 // View specific object
95 private class ViewSpecificItems
{
98 private boolean isFolder
;
101 public ViewSpecificItems(String key
, Object value
, boolean isFolder
) {
104 this.isFolder
= isFolder
;
107 public String
getKey() {
111 public void setNode(Node node
) {
115 public Node
getNode() {
119 public Object
getValue() {
123 public boolean isFolder() {
130 private class TreeLabelProvider
extends ColumnLabelProvider
implements
132 private static final long serialVersionUID
= -6385445983392621937L;
134 public void update(ViewerCell cell
) {
137 int colIndex
= cell
.getColumnIndex();
138 Object element
= cell
.getElement();
139 if (element
instanceof Property
) {
140 Property prop
= (Property
) element
;
142 cell
.setText(DistUiHelpers
.getLabelJcrName(prop
144 else if (colIndex
== 1)
145 cell
.setText(DistUiHelpers
.formatValueAsString(prop
148 } else if (element
instanceof ViewSpecificItems
) {
150 cell
.setText(((ViewSpecificItems
) element
).getKey());
151 else if (colIndex
== 1)
152 cell
.setText(DistUiHelpers
153 .formatAsString(((ViewSpecificItems
) element
)
156 } else if (element
instanceof Node
) {
157 Node node
= (Node
) element
;
159 if (node
.isNodeType(NodeType
.NT_FILE
)) {
160 cell
.setImage(DistImages
.IMG_FILE
);
161 cell
.setText(node
.getName());
162 } else if (node
.isNodeType(SLC_IMPORTED_PACKAGE
))
163 cell
.setText("Import package");
164 else if (node
.isNodeType(SLC_EXPORTED_PACKAGE
))
165 cell
.setText("Export package");
167 } else if (colIndex
== 1) {
168 if (node
.isNodeType(SLC_ARTIFACT
)) {
169 StringBuffer sb
= new StringBuffer("");
170 if (node
.hasProperty(SLC_ARTIFACT_CLASSIFIER
)) {
171 sb
.append(node
.getProperty(
172 SLC_ARTIFACT_CLASSIFIER
).getString());
175 if (node
.hasProperty(SLC_ARTIFACT_EXTENSION
))
176 sb
.append(node
.getProperty(
177 SLC_ARTIFACT_EXTENSION
).getString());
178 cell
.setText(sb
.toString());
179 } else if (node
.isNodeType(SLC_IMPORTED_PACKAGE
)
180 || node
.isNodeType(SLC_EXPORTED_PACKAGE
))
181 cell
.setText(node
.getProperty(SLC_NAME
).getString());
184 } catch (RepositoryException e
) {
185 throw new SlcException(
186 "unexpected error while getting artifact information",
192 private class TreeContentProvider
implements ITreeContentProvider
{
193 private static final long serialVersionUID
= -4315686158836938052L;
195 public Object
[] getElements(Object parent
) {
196 List
<Object
> elements
= new ArrayList
<Object
>();
199 Node node
= (Node
) parent
;
200 elements
= new ArrayList
<Object
>();
203 // elements.add(node.getProperty(SLC_GROUP_ID));
204 // elements.add(node.getProperty(SLC_ARTIFACT_ID));
205 // elements.add(node.getProperty(SLC_ARTIFACT_VERSION));
208 // boolean gotSource = false;
209 // // TODO: implement this check
210 // elements.add(new ViewSpecificItems("Sources available",
214 NodeIterator ni
= node
.getNodes();
215 while (ni
.hasNext()) {
216 Node child
= ni
.nextNode();
217 if (child
.isNodeType(SLC_ARTIFACT
)) {
218 // we skip sha1 files for the time being.
224 PropertyIterator pi
= node
.getProperties();
225 while (pi
.hasNext()) {
226 Property curProp
= pi
.nextProperty();
227 if (!curProp
.getName().startsWith("jcr:")
228 && !curProp
.isMultiple())
229 elements
.add(curProp
);
232 } catch (RepositoryException e
) {
233 throw new SlcException(
234 "Unexpected exception while listing node properties", e
);
236 return elements
.toArray();
239 public Object
getParent(Object child
) {
243 public Object
[] getChildren(Object parent
) {
244 Object
[] result
= null;
246 if (parent
instanceof Property
) {
247 Property prop
= (Property
) parent
;
248 if (prop
.isMultiple()) {
249 Value
[] values
= prop
.getValues();
252 } else if (parent
instanceof Node
) {
253 Node node
= (Node
) parent
;
254 if (node
.hasNodes()) {
255 List
<Object
> elements
= new ArrayList
<Object
>();
256 PropertyIterator pi
= node
.getProperties();
257 while (pi
.hasNext()) {
258 Property curProp
= pi
.nextProperty();
259 if (!curProp
.getName().startsWith("jcr:")
260 && !curProp
.isMultiple())
261 elements
.add(curProp
);
264 NodeIterator ni
= node
.getNodes();
265 while (ni
.hasNext()) {
266 Node curNode
= ni
.nextNode();
267 if (curNode
.isNodeType(SLC_IMPORTED_PACKAGE
)
268 || curNode
.isNodeType(SLC_EXPORTED_PACKAGE
)) {
269 ViewSpecificItems vsi
= new ViewSpecificItems(
270 "Bundle dependencies", "", true);
276 return elements
.toArray();
278 } else if (parent
instanceof ViewSpecificItems
279 && ((ViewSpecificItems
) parent
).isFolder()) {
280 NodeIterator ni
= ((ViewSpecificItems
) parent
).getNode()
282 List
<Node
> elements
= new ArrayList
<Node
>();
283 while (ni
.hasNext()) {
284 Node curNode
= ni
.nextNode();
285 if (curNode
.isNodeType(SLC_IMPORTED_PACKAGE
)
286 || curNode
.isNodeType(SLC_EXPORTED_PACKAGE
)) {
287 elements
.add(curNode
);
290 return elements
.toArray();
292 } catch (RepositoryException e
) {
293 throw new SlcException(
294 "Unexpected error getting multiple values property.", e
);
299 public boolean hasChildren(Object parent
) {
301 if (parent
instanceof Property
302 && ((Property
) parent
).isMultiple()) {
304 } else if (parent
instanceof Node
&& ((Node
) parent
).hasNodes()
305 && ((Node
) parent
).isNodeType(SLC_BUNDLE_ARTIFACT
)) {
307 } else if (parent
instanceof ViewSpecificItems
308 && ((ViewSpecificItems
) parent
).isFolder()) {
311 } catch (RepositoryException e
) {
312 throw new SlcException(
313 "Unexpected exception while checking if property is multiple",
319 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
322 public void dispose() {