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