]> git.argeo.org Git - lgpl/argeo-commons.git/blob - osgi/plugins/org.argeo.osgi.ui.explorer/src/main/java/org/argeo/osgi/ui/explorer/views/BundlesView.java
workaround for the view to start : done by mbaudier via VPN to bsinou work station
[lgpl/argeo-commons.git] / osgi / plugins / org.argeo.osgi.ui.explorer / src / main / java / org / argeo / osgi / ui / explorer / views / BundlesView.java
1 package org.argeo.osgi.ui.explorer.views;
2
3 import java.util.Comparator;
4
5 import org.argeo.eclipse.ui.ColumnViewerComparator;
6 import org.argeo.osgi.ui.explorer.OsgiExplorerImages;
7 import org.argeo.osgi.ui.explorer.OsgiExplorerPlugin;
8 import org.eclipse.jface.viewers.ColumnLabelProvider;
9 import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
10 import org.eclipse.jface.viewers.IStructuredContentProvider;
11 import org.eclipse.jface.viewers.TableViewer;
12 import org.eclipse.jface.viewers.TableViewerColumn;
13 import org.eclipse.jface.viewers.Viewer;
14 import org.eclipse.swt.SWT;
15 import org.eclipse.swt.graphics.Image;
16 import org.eclipse.swt.widgets.Composite;
17 import org.eclipse.ui.part.ViewPart;
18 import org.osgi.framework.Bundle;
19 import org.osgi.framework.BundleContext;
20 import org.osgi.framework.Constants;
21
22 /**
23 * Overview of the bundles as a table. Equivalent to Equinox 'ss' console
24 * command.
25 */
26 public class BundlesView extends ViewPart {
27 private TableViewer viewer;
28
29 @Override
30 public void createPartControl(Composite parent) {
31 viewer = new TableViewer(parent);
32 viewer.setContentProvider(new BundleContentProvider());
33 viewer.getTable().setHeaderVisible(true);
34
35 // FIXME methodNotFound issue in RAP when built in Maven against RCP
36 try {
37 ColumnViewerToolTipSupport.enableFor(viewer);
38 } catch (Error e) {
39 //String prop = Table.ENABLE_CELL_TOOLTIP;
40 String prop = "org.eclipse.swt.widgets.Table#enableCellToolTip";
41 viewer.getControl().setData(prop, Boolean.TRUE);
42 }
43
44 // ID
45 TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
46 column.getColumn().setWidth(30);
47 column.getColumn().setText("ID");
48 column.getColumn().setAlignment(SWT.RIGHT);
49 column.setLabelProvider(new ColumnLabelProvider() {
50 public String getText(Object element) {
51 return Long.toString(((Bundle) element).getBundleId());
52 }
53 });
54 new ColumnViewerComparator<Bundle>(column, new Comparator<Bundle>() {
55 public int compare(Bundle o1, Bundle o2) {
56 return (int) (o1.getBundleId() - o2.getBundleId());
57 }
58 });
59
60 // State
61 column = new TableViewerColumn(viewer, SWT.NONE);
62 column.getColumn().setWidth(18);
63 column.getColumn().setText("State");
64 column.setLabelProvider(new StateLabelProvider());
65 new ColumnViewerComparator<Bundle>(column, new Comparator<Bundle>() {
66 public int compare(Bundle o1, Bundle o2) {
67 return o1.getState() - o2.getState();
68 }
69 });
70
71 // Symbolic name
72 column = new TableViewerColumn(viewer, SWT.NONE);
73 column.getColumn().setWidth(300);
74 column.getColumn().setText("Symbolic Name");
75 column.setLabelProvider(new ColumnLabelProvider() {
76 public String getText(Object element) {
77 return ((Bundle) element).getSymbolicName();
78 }
79 });
80 new ColumnViewerComparator<Bundle>(column, new Comparator<Bundle>() {
81 public int compare(Bundle o1, Bundle o2) {
82 return o1.getSymbolicName().compareTo(o2.getSymbolicName());
83 }
84 });
85
86 // Version
87 column = new TableViewerColumn(viewer, SWT.NONE);
88 column.getColumn().setWidth(150);
89 column.getColumn().setText("Version");
90 column.setLabelProvider(new ColumnLabelProvider() {
91 public String getText(Object element) {
92 return ((Bundle) element).getVersion().toString();
93 }
94 });
95 new ColumnViewerComparator<Bundle>(column, new Comparator<Bundle>() {
96 public int compare(Bundle o1, Bundle o2) {
97 return o1.getVersion().compareTo(o2.getVersion());
98 }
99 });
100
101 viewer.setInput(OsgiExplorerPlugin.getDefault().getBundle()
102 .getBundleContext());
103
104 }
105
106 @Override
107 public void setFocus() {
108 if (viewer != null)
109 viewer.getControl().setFocus();
110 }
111
112 /** Content provider managing the array of bundles */
113 private static class BundleContentProvider implements
114 IStructuredContentProvider {
115 public Object[] getElements(Object inputElement) {
116 if (inputElement instanceof BundleContext) {
117 BundleContext bc = (BundleContext) inputElement;
118 return bc.getBundles();
119 }
120 return null;
121 }
122
123 public void dispose() {
124 }
125
126 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
127 }
128
129 }
130
131 /** Label provider for the state column */
132 private static class StateLabelProvider extends ColumnLabelProvider {
133 @Override
134 public Image getImage(Object element) {
135 Integer state = ((Bundle) element).getState();
136 switch (state) {
137 case Bundle.UNINSTALLED:
138 return OsgiExplorerImages.INSTALLED;
139 case Bundle.INSTALLED:
140 return OsgiExplorerImages.INSTALLED;
141 case Bundle.RESOLVED:
142 return OsgiExplorerImages.RESOLVED;
143 case Bundle.STARTING:
144 return OsgiExplorerImages.STARTING;
145 case Bundle.STOPPING:
146 return OsgiExplorerImages.STARTING;
147 case Bundle.ACTIVE:
148 return OsgiExplorerImages.ACTIVE;
149 default:
150 return null;
151 }
152 }
153
154 @Override
155 public String getText(Object element) {
156 return null;
157 }
158
159 @Override
160 public String getToolTipText(Object element) {
161 Bundle bundle = (Bundle) element;
162 Integer state = bundle.getState();
163 switch (state) {
164 case Bundle.UNINSTALLED:
165 return "UNINSTALLED";
166 case Bundle.INSTALLED:
167 return "INSTALLED";
168 case Bundle.RESOLVED:
169 return "RESOLVED";
170 case Bundle.STARTING:
171 String activationPolicy = bundle.getHeaders()
172 .get(Constants.BUNDLE_ACTIVATIONPOLICY).toString();
173 if (activationPolicy != null
174 && activationPolicy.equals(Constants.ACTIVATION_LAZY))
175 return "<<LAZY>>";
176 return "STARTING";
177 case Bundle.STOPPING:
178 return "STOPPING";
179 case Bundle.ACTIVE:
180 return "ACTIVE";
181 default:
182 return null;
183 }
184 }
185
186 }
187 }