]> git.argeo.org Git - lgpl/argeo-commons.git/blob - OsgiConfigurationsView.java
759b3e9558848c6855284442090e9293ee618bb8
[lgpl/argeo-commons.git] / OsgiConfigurationsView.java
1 package org.argeo.cms.e4.monitoring;
2
3 import java.io.IOException;
4 import java.util.ArrayList;
5 import java.util.Arrays;
6 import java.util.Comparator;
7 import java.util.Dictionary;
8 import java.util.List;
9
10 import javax.annotation.PostConstruct;
11
12 import org.argeo.cms.CmsException;
13 import org.argeo.util.LangUtils;
14 import org.eclipse.jface.viewers.ColumnLabelProvider;
15 import org.eclipse.jface.viewers.ITreeContentProvider;
16 import org.eclipse.jface.viewers.TreeViewer;
17 import org.eclipse.jface.viewers.TreeViewerColumn;
18 import org.eclipse.jface.viewers.Viewer;
19 import org.eclipse.swt.SWT;
20 import org.eclipse.swt.graphics.Image;
21 import org.eclipse.swt.widgets.Composite;
22 import org.osgi.framework.BundleContext;
23 import org.osgi.framework.Constants;
24 import org.osgi.framework.FrameworkUtil;
25 import org.osgi.framework.InvalidSyntaxException;
26 import org.osgi.service.cm.Configuration;
27 import org.osgi.service.cm.ConfigurationAdmin;
28
29 public class OsgiConfigurationsView {
30 private final static BundleContext bc = FrameworkUtil.getBundle(OsgiConfigurationsView.class).getBundleContext();
31
32 @PostConstruct
33 public void createPartControl(Composite parent) {
34 ConfigurationAdmin configurationAdmin = bc.getService(bc.getServiceReference(ConfigurationAdmin.class));
35
36 TreeViewer viewer = new TreeViewer(parent);
37 // viewer.getTree().setHeaderVisible(true);
38
39 TreeViewerColumn tvc = new TreeViewerColumn(viewer, SWT.NONE);
40 tvc.getColumn().setWidth(400);
41 tvc.setLabelProvider(new ColumnLabelProvider() {
42 private static final long serialVersionUID = 835407996597566763L;
43
44 @Override
45 public String getText(Object element) {
46 if (element instanceof Configuration) {
47 return ((Configuration) element).getPid();
48 } else if (element instanceof Prop) {
49 return ((Prop) element).key;
50 }
51 return super.getText(element);
52 }
53
54 @Override
55 public Image getImage(Object element) {
56 if (element instanceof Configuration)
57 return OsgiExplorerImages.CONFIGURATION;
58 return null;
59 }
60
61 });
62
63 tvc = new TreeViewerColumn(viewer, SWT.NONE);
64 tvc.getColumn().setWidth(400);
65 tvc.setLabelProvider(new ColumnLabelProvider() {
66 private static final long serialVersionUID = 6999659261190014687L;
67
68 @Override
69 public String getText(Object element) {
70 if (element instanceof Configuration) {
71 // return ((Configuration) element).getFactoryPid();
72 return null;
73 } else if (element instanceof Prop) {
74 return ((Prop) element).value.toString();
75 }
76 return super.getText(element);
77 }
78 });
79
80 viewer.setContentProvider(new ConfigurationsContentProvider());
81 viewer.setInput(configurationAdmin);
82 }
83
84 static class ConfigurationsContentProvider implements ITreeContentProvider {
85 private static final long serialVersionUID = -4892768279440981042L;
86 private ConfigurationComparator configurationComparator = new ConfigurationComparator();
87
88 @Override
89 public void dispose() {
90 }
91
92 @Override
93 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
94 }
95
96 @Override
97 public Object[] getElements(Object inputElement) {
98 ConfigurationAdmin configurationAdmin = (ConfigurationAdmin) inputElement;
99 try {
100 Configuration[] configurations = configurationAdmin.listConfigurations(null);
101 Arrays.sort(configurations, configurationComparator);
102 return configurations;
103 } catch (IOException | InvalidSyntaxException e) {
104 throw new CmsException("Cannot list configurations", e);
105 }
106 }
107
108 @Override
109 public Object[] getChildren(Object parentElement) {
110 if (parentElement instanceof Configuration) {
111 List<Prop> res = new ArrayList<>();
112 Configuration configuration = (Configuration) parentElement;
113 Dictionary<String, Object> props = configuration.getProperties();
114 keys: for (String key : LangUtils.keys(props)) {
115 if (Constants.SERVICE_PID.equals(key))
116 continue keys;
117 if (ConfigurationAdmin.SERVICE_FACTORYPID.equals(key))
118 continue keys;
119 res.add(new Prop(configuration, key, props.get(key)));
120 }
121 return res.toArray(new Prop[res.size()]);
122 }
123 return null;
124 }
125
126 @Override
127 public Object getParent(Object element) {
128 if (element instanceof Prop)
129 return ((Prop) element).configuration;
130 return null;
131 }
132
133 @Override
134 public boolean hasChildren(Object element) {
135 if (element instanceof Configuration)
136 return true;
137 return false;
138 }
139
140 }
141
142 static class Prop {
143 final Configuration configuration;
144 final String key;
145 final Object value;
146
147 public Prop(Configuration configuration, String key, Object value) {
148 this.configuration = configuration;
149 this.key = key;
150 this.value = value;
151 }
152
153 }
154
155 static class ConfigurationComparator implements Comparator<Configuration> {
156
157 @Override
158 public int compare(Configuration o1, Configuration o2) {
159 return o1.getPid().compareTo(o2.getPid());
160 }
161
162 }
163 }