1 package org
.argeo
.slc
.client
.ui
.dist
.editors
;
6 import javax
.jcr
.NodeIterator
;
7 import javax
.jcr
.RepositoryException
;
9 import org
.argeo
.eclipse
.ui
.dialogs
.ErrorFeedback
;
10 import org
.argeo
.jcr
.JcrUtils
;
11 import org
.argeo
.slc
.SlcException
;
12 import org
.argeo
.slc
.SlcNames
;
13 import org
.argeo
.slc
.SlcTypes
;
14 import org
.argeo
.slc
.client
.ui
.dist
.DistConstants
;
15 import org
.argeo
.slc
.client
.ui
.dist
.DistImages
;
16 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
17 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
18 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
19 import org
.eclipse
.jface
.viewers
.TableViewer
;
20 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
21 import org
.eclipse
.jface
.viewers
.TreeViewer
;
22 import org
.eclipse
.jface
.viewers
.TreeViewerColumn
;
23 import org
.eclipse
.jface
.viewers
.Viewer
;
24 import org
.eclipse
.swt
.SWT
;
25 import org
.eclipse
.swt
.graphics
.Image
;
26 import org
.eclipse
.swt
.layout
.GridData
;
27 import org
.eclipse
.swt
.layout
.GridLayout
;
28 import org
.eclipse
.swt
.widgets
.Composite
;
29 import org
.eclipse
.swt
.widgets
.Table
;
30 import org
.eclipse
.swt
.widgets
.Tree
;
31 import org
.eclipse
.ui
.forms
.IManagedForm
;
32 import org
.eclipse
.ui
.forms
.editor
.FormEditor
;
33 import org
.eclipse
.ui
.forms
.editor
.FormPage
;
34 import org
.eclipse
.ui
.forms
.widgets
.FormToolkit
;
35 import org
.eclipse
.ui
.forms
.widgets
.ScrolledForm
;
36 import org
.eclipse
.ui
.forms
.widgets
.Section
;
39 * Present main information of a given OSGI bundle
41 public class BundleDependencyPage
extends FormPage
implements SlcNames
{
42 // private final static Log log =
43 // LogFactory.getLog(ArtifactDetailsPage.class);
45 // Main business Objects
46 private Node currBundle
;
49 private FormToolkit toolkit
;
51 public BundleDependencyPage(FormEditor editor
, String title
,
53 super(editor
, "id", title
);
54 this.currBundle
= currentNode
;
57 protected void createFormContent(IManagedForm managedForm
) {
58 ScrolledForm form
= managedForm
.getForm();
59 toolkit
= managedForm
.getToolkit();
61 if (currBundle
.hasProperty(DistConstants
.SLC_BUNDLE_NAME
))
62 form
.setText(currBundle
.getProperty(
63 DistConstants
.SLC_BUNDLE_NAME
).getString());
64 Composite body
= form
.getBody();
65 GridLayout layout
= new GridLayout(1, false);
66 layout
.horizontalSpacing
= layout
.marginWidth
= 0;
67 layout
.verticalSpacing
= layout
.marginHeight
= 0;
68 body
.setLayout(layout
);
70 Composite part
= toolkit
.createComposite(body
);
71 createExportPackageSection(part
);
72 GridData gd
= new GridData(SWT
.FILL
, SWT
.TOP
, true, false);
74 part
.setLayoutData(gd
);
76 part
= toolkit
.createComposite(body
);
77 createImportPackageSection(part
);
78 gd
= new GridData(SWT
.FILL
, SWT
.FILL
, true, true);
79 // gd.heightHint = 200;
80 part
.setLayoutData(gd
);
82 part
= toolkit
.createComposite(body
);
83 createReqBundleSection(part
);
84 gd
= new GridData(SWT
.FILL
, SWT
.FILL
, true, true);
85 part
.setLayoutData(gd
);
87 managedForm
.reflow(true);
89 } catch (RepositoryException e
) {
90 throw new SlcException("unexpected error "
91 + "while creating bundle details page");
95 // Workaround to add an artificial level to the export package browser
96 private class LevelElem
{
98 private Object parent
;
100 public LevelElem(String label
, Object parent
) {
102 this.parent
= parent
;
105 public String
toString() {
109 public Object
getParent() {
114 /** Export Package Section */
115 private void createExportPackageSection(Composite parent
)
116 throws RepositoryException
{
117 parent
.setLayout(new GridLayout());
119 // Define the TableViewer
121 Section section
= addSection(parent
, "Export packages");
122 section
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
124 TreeViewer viewer
= new TreeViewer(section
, SWT
.H_SCROLL
| SWT
.V_SCROLL
126 final Tree tree
= viewer
.getTree();
127 tree
.setHeaderVisible(false);
128 tree
.setLinesVisible(true);
129 tree
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
131 TreeViewerColumn col
= new TreeViewerColumn(viewer
, SWT
.FILL
);
132 col
.getColumn().setWidth(400);
134 col
.setLabelProvider(new ColumnLabelProvider() {
135 private static final long serialVersionUID
= 1376400790495130862L;
138 public String
getText(Object element
) {
139 if (element
instanceof Node
)
140 return JcrUtils
.get((Node
) element
, SlcNames
.SLC_NAME
);
142 return element
.toString();
146 public Image
getImage(Object element
) {
147 if (element
instanceof Node
) {
149 Node node
= (Node
) element
;
150 if (node
.isNodeType(SlcTypes
.SLC_EXPORTED_PACKAGE
))
151 return DistImages
.IMG_PACKAGE
;
152 } catch (RepositoryException e
) {
153 throw new SlcException("Error retriving "
154 + "image for the labelProvider", e
);
161 viewer
.setContentProvider(new ITreeContentProvider() {
162 private static final long serialVersionUID
= 1898086304761992568L;
164 public void dispose() {
167 public void inputChanged(Viewer viewer
, Object oldInput
,
171 public Object
[] getElements(Object inputElement
) {
173 List
<Node
> nodes
= JcrUtils
.nodeIteratorToList(listNodes(
174 currBundle
, SlcTypes
.SLC_EXPORTED_PACKAGE
,
176 return nodes
.toArray();
177 } catch (RepositoryException e
) {
178 throw new SlcException("Cannot list children Nodes", e
);
182 public Object
[] getChildren(Object parentElement
) {
183 // Only 2 levels for the time being
185 if (parentElement
instanceof LevelElem
) {
186 Node node
= (Node
) ((LevelElem
) parentElement
)
188 List
<Node
> nodes
= JcrUtils
189 .nodeIteratorToList(listNodes(node
,
190 SlcTypes
.SLC_JAVA_PACKAGE
,
192 return nodes
.toArray();
193 } else if (parentElement
instanceof Node
) {
194 Node pNode
= (Node
) parentElement
;
195 if (pNode
.isNodeType(SlcTypes
.SLC_EXPORTED_PACKAGE
)) {
196 if (listNodes(pNode
, SlcTypes
.SLC_JAVA_PACKAGE
,
197 SlcNames
.SLC_NAME
).getSize() > 0) {
198 Object
[] result
= { new LevelElem("uses", pNode
) };
204 } catch (RepositoryException e
) {
205 throw new SlcException("Cannot list children Nodes", e
);
209 public Object
getParent(Object element
) {
214 public boolean hasChildren(Object element
) {
216 if (element
instanceof LevelElem
)
219 Node pNode
= (Node
) element
;
220 if (pNode
.isNodeType(SlcTypes
.SLC_EXPORTED_PACKAGE
)) {
221 return listNodes(pNode
, SlcTypes
.SLC_JAVA_PACKAGE
,
222 SlcNames
.SLC_NAME
).getSize() > 0;
226 } catch (RepositoryException e
) {
227 throw new SlcException("Cannot check children Nodes", e
);
232 section
.setClient(tree
);
233 viewer
.setInput("Initialize");
234 // work around a display problem : the tree table has only a few lines
235 // when the tree is not expended
236 // viewer.expandToLevel(2);
239 /** Import Package Section */
240 private void createImportPackageSection(Composite parent
)
241 throws RepositoryException
{
242 parent
.setLayout(new GridLayout());
244 // Define the TableViewer
245 // toolkit.createLabel(parent, "Import packages", SWT.NONE).setFont(
246 // EclipseUiUtils.getBoldFont(parent));
248 Section section
= addSection(parent
, "Import packages");
249 section
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
250 TableViewer viewer
= new TableViewer(section
, SWT
.H_SCROLL
251 | SWT
.V_SCROLL
| SWT
.BORDER
);
253 final Table table
= viewer
.getTable();
254 table
.setHeaderVisible(true);
255 table
.setLinesVisible(true);
256 table
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
259 TableViewerColumn col
= new TableViewerColumn(viewer
, SWT
.NONE
);
260 col
.getColumn().setWidth(350);
261 col
.getColumn().setText("Name");
262 col
.setLabelProvider(new ColumnLabelProvider() {
263 private static final long serialVersionUID
= -7836022945221936898L;
266 public String
getText(Object element
) {
267 return JcrUtils
.get((Node
) element
, SLC_NAME
);
270 public Image
getImage(Object element
) {
271 return DistImages
.IMG_PACKAGE
;
277 col
= new TableViewerColumn(viewer
, SWT
.NONE
);
278 col
.getColumn().setWidth(100);
279 col
.getColumn().setText("Version");
280 col
.setLabelProvider(new ColumnLabelProvider() {
281 private static final long serialVersionUID
= -8277731617775091641L;
284 public String
getText(Object element
) {
285 return JcrUtils
.get((Node
) element
, SLC_VERSION
);
290 col
= new TableViewerColumn(viewer
, SWT
.NONE
);
291 col
.getColumn().setWidth(100);
292 col
.getColumn().setText("Optional");
293 col
.setLabelProvider(new ColumnLabelProvider() {
294 private static final long serialVersionUID
= -2388533169594840688L;
297 public String
getText(Object element
) {
298 return JcrUtils
.get((Node
) element
, SLC_OPTIONAL
);
302 viewer
.setContentProvider(new TableContentProvider(
303 SlcTypes
.SLC_IMPORTED_PACKAGE
, SLC_NAME
));
304 section
.setClient(table
);
305 viewer
.setInput("Initialize");
308 /** Required Bundle Section */
309 private void createReqBundleSection(Composite parent
)
310 throws RepositoryException
{
311 parent
.setLayout(new GridLayout());
313 // Define the TableViewer
314 Section section
= addSection(parent
, "Required bundles");
315 section
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
317 // toolkit.createLabel(parent, "Required bundles", SWT.NONE).setFont(
318 // EclipseUiUtils.getBoldFont(parent));
319 TableViewer viewer
= new TableViewer(section
, SWT
.H_SCROLL
320 | SWT
.V_SCROLL
| SWT
.BORDER
);
322 final Table table
= viewer
.getTable();
323 table
.setHeaderVisible(true);
324 table
.setLinesVisible(true);
325 table
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
328 TableViewerColumn col
= new TableViewerColumn(viewer
, SWT
.NONE
);
329 col
.getColumn().setWidth(300);
330 col
.getColumn().setText("Name");
331 col
.setLabelProvider(new ColumnLabelProvider() {
332 private static final long serialVersionUID
= 4423640365819800247L;
335 public String
getText(Object element
) {
336 return JcrUtils
.get((Node
) element
, SLC_SYMBOLIC_NAME
);
340 public Image
getImage(Object element
) {
341 return DistImages
.IMG_BUNDLE
;
346 col
= new TableViewerColumn(viewer
, SWT
.NONE
);
347 col
.getColumn().setWidth(140);
348 col
.getColumn().setText("Version");
349 col
.setLabelProvider(new ColumnLabelProvider() {
350 private static final long serialVersionUID
= 1898477425996646270L;
353 public String
getText(Object element
) {
354 return JcrUtils
.get((Node
) element
, SLC_BUNDLE_VERSION
);
359 col
= new TableViewerColumn(viewer
, SWT
.NONE
);
360 col
.getColumn().setWidth(100);
361 col
.getColumn().setText("Optional");
362 col
.setLabelProvider(new ColumnLabelProvider() {
363 private static final long serialVersionUID
= -7029999152302445581L;
366 public String
getText(Object element
) {
367 return JcrUtils
.get((Node
) element
, SLC_OPTIONAL
);
371 viewer
.setContentProvider(new TableContentProvider(
372 SlcTypes
.SLC_REQUIRED_BUNDLE
, SLC_SYMBOLIC_NAME
));
373 section
.setClient(table
);
374 viewer
.setInput("Initialize");
378 * Build repository request
380 * FIXME Workaround for remote repository, the path to bundleartifact (for
382 * .../org/argeo/slc/org.argeo.slc.client.ui.dist/1.1.12/org.argeo.slc
383 * .client.ui.dist-1.1.12/ ) is not valid for method factory.childNode(); it
384 * fails parsing the "1.1.12" part, trying to cast it as a BigDecimal
387 private NodeIterator
listNodes(Node parent
, String nodeType
, String orderBy
)
388 throws RepositoryException
{
389 // QueryManager queryManager = currBundle.getSession().getWorkspace()
390 // .getQueryManager();
391 // QueryObjectModelFactory factory = queryManager.getQOMFactory();
393 // final String nodeSelector = "nodes";
394 // Selector source = factory.selector(nodeType, nodeSelector);
396 // Constraint childOf = factory.childNode(nodeSelector,
397 // parent.getPath());
400 // factory.ascending(factory.propertyValue(nodeSelector,
402 // Ordering[] orderings = { order };
404 // QueryObjectModel query = factory.createQuery(source, childOf,
407 // QueryResult result = query.execute();
409 String pattern
= null;
410 if (SlcTypes
.SLC_EXPORTED_PACKAGE
.equals(nodeType
))
411 pattern
= "slc:Export-Package*";
412 else if (SlcTypes
.SLC_JAVA_PACKAGE
.equals(nodeType
))
413 pattern
= "slc:uses*";
414 else if (SlcTypes
.SLC_IMPORTED_PACKAGE
.equals(nodeType
))
415 pattern
= "slc:Import-Package*";
416 else if (SlcTypes
.SLC_REQUIRED_BUNDLE
.equals(nodeType
))
417 pattern
= "slc:Require-Bundle*";
419 return parent
.getNodes(pattern
);
422 private class TableContentProvider
implements IStructuredContentProvider
{
423 private static final long serialVersionUID
= 4133284637336320455L;
424 private String nodeType
;
425 private String orderBy
;
427 TableContentProvider(String nodeType
, String orderBy
) {
428 this.nodeType
= nodeType
;
429 this.orderBy
= orderBy
;
432 public void dispose() {
435 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
438 public Object
[] getElements(Object arg0
) {
440 List
<Node
> nodes
= JcrUtils
.nodeIteratorToList(listNodes(
441 currBundle
, nodeType
, orderBy
));
442 return nodes
.toArray();
443 } catch (RepositoryException e
) {
444 ErrorFeedback
.show("Cannot list children Nodes", e
);
451 private Section
addSection(Composite parent
, String title
) {
452 Section section
= toolkit
.createSection(parent
, Section
.TITLE_BAR
);
453 section
.setText(title
);
454 section
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));