]> 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
commons: improve maven, new RPM structure
[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.eclipse.ui.specific.EclipseUiSpecificUtils;
7 import org.argeo.osgi.ui.explorer.OsgiExplorerImages;
8 import org.argeo.osgi.ui.explorer.OsgiExplorerPlugin;
9 import org.eclipse.jface.viewers.ColumnLabelProvider;
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 EclipseUiSpecificUtils.enableToolTipSupport(viewer);
36
37 // ID
38 TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
39 column.getColumn().setWidth(30);
40 column.getColumn().setText("ID");
41 column.getColumn().setAlignment(SWT.RIGHT);
42 column.setLabelProvider(new ColumnLabelProvider() {
43 public String getText(Object element) {
44 return Long.toString(((Bundle) element).getBundleId());
45 }
46 });
47 new ColumnViewerComparator<Bundle>(column, new Comparator<Bundle>() {
48 public int compare(Bundle o1, Bundle o2) {
49 return (int) (o1.getBundleId() - o2.getBundleId());
50 }
51 });
52
53 // State
54 column = new TableViewerColumn(viewer, SWT.NONE);
55 column.getColumn().setWidth(18);
56 column.getColumn().setText("State");
57 column.setLabelProvider(new StateLabelProvider());
58 new ColumnViewerComparator<Bundle>(column, new Comparator<Bundle>() {
59 public int compare(Bundle o1, Bundle o2) {
60 return o1.getState() - o2.getState();
61 }
62 });
63
64 // Symbolic name
65 column = new TableViewerColumn(viewer, SWT.NONE);
66 column.getColumn().setWidth(300);
67 column.getColumn().setText("Symbolic Name");
68 column.setLabelProvider(new ColumnLabelProvider() {
69 public String getText(Object element) {
70 return ((Bundle) element).getSymbolicName();
71 }
72 });
73 new ColumnViewerComparator<Bundle>(column, new Comparator<Bundle>() {
74 public int compare(Bundle o1, Bundle o2) {
75 return o1.getSymbolicName().compareTo(o2.getSymbolicName());
76 }
77 });
78
79 // Version
80 column = new TableViewerColumn(viewer, SWT.NONE);
81 column.getColumn().setWidth(150);
82 column.getColumn().setText("Version");
83 column.setLabelProvider(new ColumnLabelProvider() {
84 public String getText(Object element) {
85 return ((Bundle) element).getVersion().toString();
86 }
87 });
88 new ColumnViewerComparator<Bundle>(column, new Comparator<Bundle>() {
89 public int compare(Bundle o1, Bundle o2) {
90 return o1.getVersion().compareTo(o2.getVersion());
91 }
92 });
93
94 viewer.setInput(OsgiExplorerPlugin.getDefault().getBundle()
95 .getBundleContext());
96
97 }
98
99 @Override
100 public void setFocus() {
101 if (viewer != null)
102 viewer.getControl().setFocus();
103 }
104
105 /** Content provider managing the array of bundles */
106 private static class BundleContentProvider implements
107 IStructuredContentProvider {
108 public Object[] getElements(Object inputElement) {
109 if (inputElement instanceof BundleContext) {
110 BundleContext bc = (BundleContext) inputElement;
111 return bc.getBundles();
112 }
113 return null;
114 }
115
116 public void dispose() {
117 }
118
119 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
120 }
121
122 }
123
124 /** Label provider for the state column */
125 private static class StateLabelProvider extends ColumnLabelProvider {
126 @Override
127 public Image getImage(Object element) {
128 Integer state = ((Bundle) element).getState();
129 switch (state) {
130 case Bundle.UNINSTALLED:
131 return OsgiExplorerImages.INSTALLED;
132 case Bundle.INSTALLED:
133 return OsgiExplorerImages.INSTALLED;
134 case Bundle.RESOLVED:
135 return OsgiExplorerImages.RESOLVED;
136 case Bundle.STARTING:
137 return OsgiExplorerImages.STARTING;
138 case Bundle.STOPPING:
139 return OsgiExplorerImages.STARTING;
140 case Bundle.ACTIVE:
141 return OsgiExplorerImages.ACTIVE;
142 default:
143 return null;
144 }
145 }
146
147 @Override
148 public String getText(Object element) {
149 return null;
150 }
151
152 @Override
153 public String getToolTipText(Object element) {
154 Bundle bundle = (Bundle) element;
155 Integer state = bundle.getState();
156 switch (state) {
157 case Bundle.UNINSTALLED:
158 return "UNINSTALLED";
159 case Bundle.INSTALLED:
160 return "INSTALLED";
161 case Bundle.RESOLVED:
162 return "RESOLVED";
163 case Bundle.STARTING:
164 String activationPolicy = bundle.getHeaders()
165 .get(Constants.BUNDLE_ACTIVATIONPOLICY).toString();
166 if (activationPolicy != null
167 && activationPolicy.equals(Constants.ACTIVATION_LAZY))
168 return "<<LAZY>>";
169 return "STARTING";
170 case Bundle.STOPPING:
171 return "STOPPING";
172 case Bundle.ACTIVE:
173 return "ACTIVE";
174 default:
175 return null;
176 }
177 }
178
179 }
180 }