Fixed FELIX-3140 : Display link for component id within the bundle details and service details view
https://issues.apache.org/jira/browse/FELIX-3140
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1610409 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/webconsole-plugins/ds/pom.xml b/webconsole-plugins/ds/pom.xml
index 76ac481..75309ca 100644
--- a/webconsole-plugins/ds/pom.xml
+++ b/webconsole-plugins/ds/pom.xml
@@ -96,7 +96,7 @@
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.webconsole</artifactId>
- <version>3.1.0</version>
+ <version>4.2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/Activator.java b/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/Activator.java
index ae665c9..da31234 100644
--- a/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/Activator.java
+++ b/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/Activator.java
@@ -36,6 +36,7 @@
private SimpleWebConsolePlugin plugin;
private ServiceRegistration printerRegistration;
+ private ServiceRegistration infoRegistration;
/**
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
@@ -77,8 +78,10 @@
if (plugin == null)
{
this.plugin = plugin = new WebConsolePlugin().register(context);
+ final Object service = context.getService(reference);
printerRegistration = context.registerService(ConfigurationPrinter.SERVICE,
- new ComponentConfigurationPrinter(context.getService(reference)), null);
+ new ComponentConfigurationPrinter(service), null);
+ infoRegistration = new InfoProvider(context.getBundle(), service).register(context);
}
return context.getService(reference);
@@ -104,6 +107,13 @@
reg.unregister();
printerRegistration = null;
}
+ // unregister info provider too
+ reg = infoRegistration;
+ if (reg != null)
+ {
+ reg.unregister();
+ infoRegistration = null;
+ }
}
}
diff --git a/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/InfoProvider.java b/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/InfoProvider.java
new file mode 100644
index 0000000..c190fb7
--- /dev/null
+++ b/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/InfoProvider.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.webconsole.plugins.ds.internal;
+
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import org.apache.felix.scr.Component;
+import org.apache.felix.scr.ScrService;
+import org.apache.felix.webconsole.bundleinfo.BundleInfo;
+import org.apache.felix.webconsole.bundleinfo.BundleInfoProvider;
+import org.apache.felix.webconsole.bundleinfo.BundleInfoType;
+import org.apache.felix.webconsole.i18n.LocalizationHelper;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+class InfoProvider implements BundleInfoProvider
+{
+
+ private final LocalizationHelper localization;
+
+ private final ScrService scrService;
+
+ InfoProvider(Bundle bundle, Object scrService)
+ {
+ this.scrService = (ScrService) scrService;
+ localization = new LocalizationHelper(bundle);
+ }
+
+ /**
+ * @see org.apache.felix.webconsole.bundleinfo.BundleInfoProvider#getName(java.util.Locale)
+ */
+ public String getName(Locale locale)
+ {
+ return localization.getResourceBundle(locale).getString("info.name"); //$NON-NLS-1$;;
+ }
+
+ /**
+ * @see org.apache.felix.webconsole.bundleinfo.BundleInfoProvider#getBundleInfo(org.osgi.framework.Bundle,
+ * java.lang.String, java.util.Locale)
+ */
+ public BundleInfo[] getBundleInfo(Bundle bundle, String webConsoleRoot, Locale locale)
+ {
+
+ final Component[] components = scrService.getComponents(bundle);
+ if (null == components || components.length == 0)
+ {
+ return NO_INFO;
+ }
+
+ BundleInfo[] ret = new BundleInfo[components.length];
+ for (int i = 0; i < components.length; i++)
+ {
+ ret[i] = toInfo(components[i], webConsoleRoot, locale);
+ }
+ return ret;
+ }
+
+ private BundleInfo toInfo(Component component, String webConsoleRoot, Locale locale)
+ {
+ final ResourceBundle bundle = localization.getResourceBundle(locale);
+ final String state = ComponentConfigurationPrinter.toStateString(component.getState());
+ final String name = component.getName();
+ final String descr = bundle.getString("info.descr"); //$NON-NLS-1$;
+ String key = bundle.getString("info.key"); //$NON-NLS-1$;
+ // Component #{0} {1}, state {2}
+ key = MessageFormat.format(key, new Object[] { String.valueOf(component.getId()), //
+ name != null ? name : "", //$NON-NLS-1$
+ state, //
+ });
+ return new BundleInfo(key, webConsoleRoot + "/components/" + component.getId(), //$NON-NLS-1$
+ BundleInfoType.LINK, descr);
+ }
+
+ ServiceRegistration register(BundleContext context)
+ {
+ return context.registerService(BundleInfoProvider.class.getName(), this, null);
+ }
+
+}
diff --git a/webconsole-plugins/ds/src/main/resources/OSGI-INF/l10n/bundle.properties b/webconsole-plugins/ds/src/main/resources/OSGI-INF/l10n/bundle.properties
index d6518c6..3d6be1b 100644
--- a/webconsole-plugins/ds/src/main/resources/OSGI-INF/l10n/bundle.properties
+++ b/webconsole-plugins/ds/src/main/resources/OSGI-INF/l10n/bundle.properties
@@ -47,3 +47,6 @@
scr.title.actions=Actions
scr.title.status=Status
scr.title.name=Name
+info.name=Declarative Service Components
+info.key=Component #{0} {1}, state {2}
+info.descr=This Declarative Service Component is provided by the bundle. Click to see more details in "Components" plugin.
diff --git a/webconsole-plugins/ds/src/main/resources/OSGI-INF/l10n/bundle_bg.properties b/webconsole-plugins/ds/src/main/resources/OSGI-INF/l10n/bundle_bg.properties
index 33732de..a4b9199 100644
--- a/webconsole-plugins/ds/src/main/resources/OSGI-INF/l10n/bundle_bg.properties
+++ b/webconsole-plugins/ds/src/main/resources/OSGI-INF/l10n/bundle_bg.properties
@@ -47,3 +47,6 @@
scr.title.actions=Действия
scr.title.status=Статус
scr.title.name=Име
+info.name=Компоненти
+info.key=Компонент #{0} {1}, статус {2}
+info.descr=Този компонент се предоставя от текущият бъндъл. Кликнете за повече детайли в "Компоненти" плъгина.