Fixed another NSE
Signed-off-by: Andreas Pieber <anpieber@gmail.com>
git-svn-id: https://svn.apache.org/repos/asf/karaf/sandbox/pieber/karaf-webconsole/trunk@1161375 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/blueprint/src/main/java/org/apache/karaf/webconsole/blueprint/internal/details/DetailsPage.java b/blueprint/src/main/java/org/apache/karaf/webconsole/blueprint/internal/details/DetailsPage.java
index 212a1e8..a3d7c5f 100644
--- a/blueprint/src/main/java/org/apache/karaf/webconsole/blueprint/internal/details/DetailsPage.java
+++ b/blueprint/src/main/java/org/apache/karaf/webconsole/blueprint/internal/details/DetailsPage.java
@@ -1,7 +1,9 @@
package org.apache.karaf.webconsole.blueprint.internal.details;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import org.apache.karaf.webconsole.core.BasePage;
@@ -9,6 +11,7 @@
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.ops4j.pax.wicket.api.PaxWicketBean;
import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
@@ -25,53 +28,94 @@
private BundleContext context;
public DetailsPage(PageParameters params) {
- final Bundle bundle = context.getBundle(params.getLong("bundleId"));
-
- ServiceReference[] references = bundle.getRegisteredServices();
- ServiceReference reference = null;
-
- for (ServiceReference ref : references) {
- String[] classes = (String[]) ref.getProperty("objectClass");
- for (String clazz : classes) {
- if ("org.osgi.service.blueprint.container.BlueprintContainer".equals(clazz)) {
- reference = ref;
- break;
- }
- }
- }
-
- if (reference == null) {
- add(new ListView("components") {
- @Override
- protected void populateItem(ListItem item) {
- // do nothing :)
- }
- });
+ IModel<List<MetadataWrappper>> model = new MetadataModel(params);
+ if (model.getObject() == null) {
+ fillEmptyListView();
return;
}
+ fillListViewWithMetaModel(model);
+ }
- final BlueprintContainer container = (BlueprintContainer) context.getService(reference);
-
- LoadableDetachableModel<List<ComponentMetadata>> model = new LoadableDetachableModel<List<ComponentMetadata>>() {
+ private void fillEmptyListView() {
+ add(new ListView("components") {
@Override
- protected List<ComponentMetadata> load() {
- return new ArrayList<ComponentMetadata>(container.getMetadata(ComponentMetadata.class));
- }
- };
-
- add(new ListView<ComponentMetadata>("components", model) {
- @Override
- protected void populateItem(ListItem<ComponentMetadata> item) {
- ComponentMetadata metadata = item.getModelObject();
-
- Class<?>[] interfaces = metadata.getClass().getInterfaces();
-
- item.add(new Label("componentId", metadata.getId()));
- item.add(new Label("type", Arrays.toString(interfaces)));
+ protected void populateItem(ListItem item) {
+ // do nothing :)
}
});
+ }
- context.ungetService(reference);
+ private void fillListViewWithMetaModel(IModel<List<MetadataWrappper>> model) {
+ add(new ListView<MetadataWrappper>("components", model) {
+ @Override
+ protected void populateItem(ListItem<MetadataWrappper> item) {
+ MetadataWrappper metadata = item.getModelObject();
+ item.add(new Label("componentId", metadata.id));
+ item.add(new Label("type", metadata.interfaces));
+ }
+ });
+ }
+
+ private class MetadataModel extends LoadableDetachableModel<List<MetadataWrappper>> {
+
+ private PageParameters pageParams;
+
+ public MetadataModel(PageParameters pageParams) {
+ this.pageParams = pageParams;
+ }
+
+ @Override
+ protected List<MetadataWrappper> load() {
+ ServiceReference reference = null;
+ try {
+ reference = retrieveReference();
+ if (reference == null) {
+ return null;
+ }
+ return extractMetadata(reference);
+ } finally {
+ if (reference != null) {
+ context.ungetService(reference);
+ }
+ }
+ }
+
+ private List<MetadataWrappper> extractMetadata(ServiceReference reference) {
+ BlueprintContainer container = (BlueprintContainer) context.getService(reference);
+ List<MetadataWrappper> extractedMetadata = new ArrayList<DetailsPage.MetadataWrappper>();
+ Collection<ComponentMetadata> metadata = container.getMetadata(ComponentMetadata.class);
+ for (ComponentMetadata originalMetadata : metadata) {
+ extractedMetadata.add(new MetadataWrappper(originalMetadata));
+ }
+ return extractedMetadata;
+ }
+
+ private ServiceReference retrieveReference() {
+ ServiceReference reference = null;
+ Bundle bundle = context.getBundle(pageParams.getLong("bundleId"));
+ ServiceReference[] references = bundle.getRegisteredServices();
+ for (ServiceReference ref : references) {
+ String[] classes = (String[]) ref.getProperty("objectClass");
+ for (String clazz : classes) {
+ if ("org.osgi.service.blueprint.container.BlueprintContainer".equals(clazz)) {
+ reference = ref;
+ break;
+ }
+ }
+ }
+ return reference;
+ }
+ }
+
+ private static class MetadataWrappper implements Serializable {
+ private String id;
+ private String interfaces;
+
+ public MetadataWrappper(ComponentMetadata metadata) {
+ id = metadata.getId();
+ interfaces = Arrays.toString(metadata.getClass().getInterfaces());
+ }
+
}
}