FELIX-4786 : Update to latest DS implementation
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1656929 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/webconsole-plugins/ds/pom.xml b/webconsole-plugins/ds/pom.xml
index f00b417..0fe858b 100644
--- a/webconsole-plugins/ds/pom.xml
+++ b/webconsole-plugins/ds/pom.xml
@@ -71,6 +71,15 @@
</instructions>
</configuration>
</plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
</plugins>
</build>
@@ -84,13 +93,13 @@
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
- <version>4.0.0</version>
+ <version>6.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
- <version>4.1.0</version>
+ <version>5.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -115,7 +124,7 @@
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr</artifactId>
- <version>1.6.0</version>
+ <version>1.8.3-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
diff --git a/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/ComponentConfigurationPrinter.java b/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/ComponentConfigurationPrinter.java
index 2bad03f..628a966 100644
--- a/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/ComponentConfigurationPrinter.java
+++ b/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/ComponentConfigurationPrinter.java
@@ -19,102 +19,120 @@
package org.apache.felix.webconsole.plugins.ds.internal;
import java.io.PrintWriter;
+import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Dictionary;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;
import org.apache.felix.inventory.Format;
import org.apache.felix.inventory.InventoryPrinter;
-import org.apache.felix.scr.Component;
-import org.apache.felix.scr.Reference;
-import org.apache.felix.scr.ScrService;
import org.apache.felix.webconsole.WebConsoleUtil;
import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceReference;
+import org.osgi.framework.dto.ServiceReferenceDTO;
import org.osgi.service.component.ComponentConstants;
+import org.osgi.service.component.runtime.ServiceComponentRuntime;
+import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
+import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO;
+import org.osgi.service.component.runtime.dto.ReferenceDTO;
+import org.osgi.service.component.runtime.dto.SatisfiedReferenceDTO;
/**
- * ComponentConfigurationPrinter prints the available SCR services.
+ * ComponentConfigurationPrinter prints the available SCR services.
*/
class ComponentConfigurationPrinter implements InventoryPrinter
{
- private final ScrService scrService;
+ private final ServiceComponentRuntime scrService;
ComponentConfigurationPrinter(Object scrService)
{
- this.scrService = (ScrService)scrService;
+ this.scrService = (ServiceComponentRuntime)scrService;
}
/**
* @see org.apache.felix.inventory.InventoryPrinter#print(java.io.PrintWriter, org.apache.felix.inventory.Format, boolean)
*/
+ @Override
public void print(PrintWriter pw, Format format, boolean isZip)
{
- printComponents(pw, scrService.getComponents());
+ final List<ComponentDescriptionDTO> descriptions = new ArrayList<ComponentDescriptionDTO>();
+ final List<ComponentConfigurationDTO> configurations = new ArrayList<ComponentConfigurationDTO>();
+
+ final Collection<ComponentDescriptionDTO> descs = scrService.getComponentDescriptionDTOs();
+ for(final ComponentDescriptionDTO d : descs)
+ {
+ for(final ComponentConfigurationDTO cfg : scrService.getComponentConfigurationDTOs(d))
+ {
+ configurations.add(cfg);
+ }
+ descriptions.add(d);
+ }
+ Collections.sort(configurations, Util.COMPONENT_COMPARATOR);
+
+ printComponents(pw, configurations);
}
-
-
+
+
private static final void printComponents(final PrintWriter pw,
- final Component[] components)
+ final List<ComponentConfigurationDTO> configurations)
{
- if (components == null || components.length == 0)
+ if (configurations.size() == 0)
{
pw.println("Status: No Components Registered");
}
else
{
// order components by id
- TreeMap componentMap = new TreeMap();
- for (int i = 0; i < components.length; i++)
+ TreeMap<Long, ComponentConfigurationDTO> componentMap = new TreeMap<Long, ComponentConfigurationDTO>();
+ for(final ComponentConfigurationDTO cfg : configurations)
{
- Component component = components[i];
- componentMap.put(new Long(component.getId()), component);
+ componentMap.put(new Long(cfg.id), cfg);
}
// render components
- for (Iterator ci = componentMap.values().iterator(); ci.hasNext();)
+ for (final ComponentConfigurationDTO cfg : componentMap.values())
{
- Component component = (Component) ci.next();
- component(pw, component);
+ component(pw, cfg);
}
}
}
- private static final void component(PrintWriter pw, Component component)
+ private static final void component(PrintWriter pw, final ComponentConfigurationDTO cfg)
{
- pw.print(component.getId());
+ pw.print(cfg.id);
pw.print("=[");
- pw.print(component.getName());
+ pw.print(cfg.description.name);
pw.println("]");
- pw.println(" Bundle" + component.getBundle().getSymbolicName() + " ("
- + component.getBundle().getBundleId() + ")");
- pw.println(" State=" + toStateString(component.getState()));
+ pw.println(" Bundle" + cfg.description.bundle.symbolicName + " ("
+ + cfg.description.bundle.id + ")");
+ pw.println(" State=" + toStateString(cfg.state));
pw.println(" DefaultState="
- + (component.isDefaultEnabled() ? "enabled" : "disabled"));
- pw.println(" Activation=" + (component.isImmediate() ? "immediate" : "delayed"));
+ + (cfg.description.defaultEnabled ? "enabled" : "disabled"));
+ pw.println(" Activation=" + (cfg.description.immediate ? "immediate" : "delayed"));
- listServices(pw, component);
- listReferences(pw, component);
- listProperties(pw, component);
+ listServices(pw, cfg);
+ listReferences(pw, cfg);
+ listProperties(pw, cfg);
pw.println();
}
- private static void listServices(PrintWriter pw, Component component)
+ private static void listServices(PrintWriter pw, final ComponentConfigurationDTO cfg)
{
- String[] services = component.getServices();
+ String[] services = cfg.description.serviceInterfaces;
if (services == null)
{
return;
}
- pw.println(" ServiceType="
- + (component.isServiceFactory() ? "service factory" : "service"));
+ pw.println(" ServiceType=" + cfg.description.scope);
StringBuffer buf = new StringBuffer();
for (int i = 0; i < services.length; i++)
@@ -129,76 +147,82 @@
pw.println(" Services=" + buf);
}
- private static final void listReferences(PrintWriter pw, Component component)
+ private static SatisfiedReferenceDTO findReference(final ComponentConfigurationDTO component, final String name)
{
- Reference[] refs = component.getReferences();
- if (refs != null)
+ for(final SatisfiedReferenceDTO dto : component.satisfiedReferences)
{
- for (int i = 0; i < refs.length; i++)
+ if ( dto.name.equals(name))
{
+ return dto;
+ }
+ }
+ return null;
+ }
- pw.println(" Reference=" + refs[i].getName() + ", "
- + (refs[i].isSatisfied() ? "Satisfied" : "Unsatisfied"));
+ private static final void listReferences(PrintWriter pw, final ComponentConfigurationDTO cfg)
+ {
+ for(final ReferenceDTO dto : cfg.description.references)
+ {
+ final SatisfiedReferenceDTO satisfiedRef = findReference(cfg, dto.name);
- pw.println(" Service Name: " + refs[i].getServiceName());
+ pw.println(" Reference=" + dto.name + ", "
+ + (satisfiedRef != null ? "Satisfied" : "Unsatisfied"));
- if (refs[i].getTarget() != null)
+ pw.println(" Service Name: " + dto.interfaceName);
+
+ if (dto.target != null)
+ {
+ pw.println(" Target Filter: " + dto.target);
+ }
+
+ pw.println(" Cardinality: " + dto.cardinality);
+ pw.println(" Policy: " + dto.policy);
+ pw.println(" Policy Option: " + dto.policyOption);
+
+ // list bound services
+ if ( satisfiedRef != null )
+ {
+ for(final ServiceReferenceDTO sref : satisfiedRef.boundServices )
{
- pw.println(" Target Filter: " + refs[i].getTarget());
- }
+ pw.print(" Bound Service: ID ");
+ pw.print(sref.properties.get(Constants.SERVICE_ID));
- pw.println(" Multiple: "
- + (refs[i].isMultiple() ? "multiple" : "single"));
- pw.println(" Optional: "
- + (refs[i].isOptional() ? "optional" : "mandatory"));
- pw.println(" Policy: " + (refs[i].isStatic() ? "static" : "dynamic"));
-
- // list bound services
- ServiceReference[] boundRefs = refs[i].getServiceReferences();
- if (boundRefs != null && boundRefs.length > 0)
- {
- for (int j = 0; j < boundRefs.length; j++)
+ String name = (String) sref.properties.get(ComponentConstants.COMPONENT_NAME);
+ if (name == null)
{
- pw.print(" Bound Service: ID ");
- pw.print(boundRefs[j].getProperty(Constants.SERVICE_ID));
-
- String name = (String) boundRefs[j].getProperty(ComponentConstants.COMPONENT_NAME);
+ name = (String) sref.properties.get(Constants.SERVICE_PID);
if (name == null)
{
- name = (String) boundRefs[j].getProperty(Constants.SERVICE_PID);
- if (name == null)
- {
- name = (String) boundRefs[j].getProperty(Constants.SERVICE_DESCRIPTION);
- }
+ name = (String) sref.properties.get(Constants.SERVICE_DESCRIPTION);
}
- if (name != null)
- {
- pw.print(" (");
- pw.print(name);
- pw.print(")");
- }
- pw.println();
}
+ if (name != null)
+ {
+ pw.print(" (");
+ pw.print(name);
+ pw.print(")");
+ }
+ pw.println();
}
- else
- {
- pw.println(" No Services bound");
- }
+ }
+ else
+ {
+ pw.println(" No Services bound");
}
}
}
- private static final void listProperties(PrintWriter pw, Component component)
+ private static final void listProperties(PrintWriter pw, final ComponentConfigurationDTO cfg)
{
- Dictionary props = component.getProperties();
+ Map<String, Object> props = cfg.properties;
if (props != null)
{
pw.println(" Properties=");
- TreeSet keys = new TreeSet(Util.list(props.keys()));
- for (Iterator ki = keys.iterator(); ki.hasNext();)
+ TreeSet<String> keys = new TreeSet<String>(props.keySet());
+ for (Iterator<String> ki = keys.iterator(); ki.hasNext();)
{
- String key = (String) ki.next();
+ String key = ki.next();
Object value = props.get(key);
value = WebConsoleUtil.toString(value);
if (value.getClass().isArray())
@@ -214,34 +238,16 @@
{
switch (state)
{
- case Component.STATE_DISABLED:
- return "disabled";
- case Component.STATE_ENABLING:
- return "enabling";
- case Component.STATE_ENABLED:
- return "enabled";
- case Component.STATE_UNSATISFIED:
- return "unsatisfied";
- case Component.STATE_ACTIVATING:
- return "activating";
- case Component.STATE_ACTIVE:
+ case ComponentConfigurationDTO.ACTIVE:
return "active";
- case Component.STATE_REGISTERED:
- return "registered";
- case Component.STATE_FACTORY:
- return "factory";
- case Component.STATE_DEACTIVATING:
- return "deactivating";
- case Component.STATE_DISABLING:
- return "disabling";
- case Component.STATE_DISPOSING:
- return "disposing";
- case Component.STATE_DESTROYED:
- return "destroyed/disposed";
+ case ComponentConfigurationDTO.SATISFIED:
+ return "satisfied";
+ case ComponentConfigurationDTO.UNSATISFIED_CONFIGURATION:
+ return "unsatisfied (configuration)";
+ case ComponentConfigurationDTO.UNSATISFIED_REFERENCE:
+ return "unsatisfied (reference)";
default:
return String.valueOf(state);
}
}
-
-
}
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
index c190fb7..2ef23e4 100644
--- 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
@@ -19,11 +19,13 @@
package org.apache.felix.webconsole.plugins.ds.internal;
import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
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;
@@ -31,23 +33,27 @@
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.component.runtime.ServiceComponentRuntime;
+import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
+import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO;
class InfoProvider implements BundleInfoProvider
{
private final LocalizationHelper localization;
- private final ScrService scrService;
+ private final ServiceComponentRuntime scrService;
InfoProvider(Bundle bundle, Object scrService)
{
- this.scrService = (ScrService) scrService;
+ this.scrService = (ServiceComponentRuntime) scrService;
localization = new LocalizationHelper(bundle);
}
/**
* @see org.apache.felix.webconsole.bundleinfo.BundleInfoProvider#getName(java.util.Locale)
*/
+ @Override
public String getName(Locale locale)
{
return localization.getResourceBundle(locale).getString("info.name"); //$NON-NLS-1$;;
@@ -57,36 +63,51 @@
* @see org.apache.felix.webconsole.bundleinfo.BundleInfoProvider#getBundleInfo(org.osgi.framework.Bundle,
* java.lang.String, java.util.Locale)
*/
+ @Override
public BundleInfo[] getBundleInfo(Bundle bundle, String webConsoleRoot, Locale locale)
{
+ final List<ComponentDescriptionDTO> descriptions = new ArrayList<ComponentDescriptionDTO>();
+ final List<ComponentConfigurationDTO> configurations = new ArrayList<ComponentConfigurationDTO>();
- final Component[] components = scrService.getComponents(bundle);
- if (null == components || components.length == 0)
+ final Collection<ComponentDescriptionDTO> descs = scrService.getComponentDescriptionDTOs();
+ for(final ComponentDescriptionDTO d : descs)
+ {
+ for(final ComponentConfigurationDTO cfg : scrService.getComponentConfigurationDTOs(d))
+ {
+ configurations.add(cfg);
+ }
+ descriptions.add(d);
+ }
+ Collections.sort(configurations, Util.COMPONENT_COMPARATOR);
+
+ if (configurations.size() == 0)
{
return NO_INFO;
}
- BundleInfo[] ret = new BundleInfo[components.length];
- for (int i = 0; i < components.length; i++)
+ BundleInfo[] ret = new BundleInfo[configurations.size()];
+ int i=0;
+ for (final ComponentConfigurationDTO cfg : configurations)
{
- ret[i] = toInfo(components[i], webConsoleRoot, locale);
+ ret[i] = toInfo(cfg, webConsoleRoot, locale);
+ i++;
}
return ret;
}
- private BundleInfo toInfo(Component component, String webConsoleRoot, Locale locale)
+ private BundleInfo toInfo(final ComponentConfigurationDTO cfg, String webConsoleRoot, Locale locale)
{
final ResourceBundle bundle = localization.getResourceBundle(locale);
- final String state = ComponentConfigurationPrinter.toStateString(component.getState());
- final String name = component.getName();
+ final String state = ComponentConfigurationPrinter.toStateString(cfg.state);
+ final String name = cfg.description.name;
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()), //
+ key = MessageFormat.format(key, new Object[] { String.valueOf(cfg.id), //
name != null ? name : "", //$NON-NLS-1$
state, //
});
- return new BundleInfo(key, webConsoleRoot + "/components/" + component.getId(), //$NON-NLS-1$
+ return new BundleInfo(key, webConsoleRoot + "/components/" + cfg.id, //$NON-NLS-1$
BundleInfoType.LINK, descr);
}
diff --git a/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/Util.java b/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/Util.java
index 8e96845..e78cd74 100644
--- a/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/Util.java
+++ b/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/Util.java
@@ -20,23 +20,22 @@
import java.util.Comparator;
import java.util.Enumeration;
-import org.apache.felix.scr.Component;
+import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
class Util
{
- static final Comparator COMPONENT_COMPARATOR = new Comparator()
+ static final Comparator<ComponentConfigurationDTO> COMPONENT_COMPARATOR = new Comparator<ComponentConfigurationDTO>()
{
- public int compare(Object o0, Object o1)
+ @Override
+ public int compare(ComponentConfigurationDTO c0, ComponentConfigurationDTO c1)
{
- final Component c0 = (Component) o0;
- final Component c1 = (Component) o1;
- final int nameCmp = c0.getName().compareTo(c1.getName());
+ final int nameCmp = c0.description.name.compareTo(c1.description.name);
if (nameCmp != 0)
{
return nameCmp;
}
- return (c0.getId() < c1.getId()) ? -1 : ((c0.getId() > c1.getId()) ? 1 : 0);
+ return (c0.id < c1.id) ? -1 : ((c0.id > c1.id) ? 1 : 0);
}
};
diff --git a/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/WebConsolePlugin.java b/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/WebConsolePlugin.java
index 822718a..a9b50f7 100644
--- a/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/WebConsolePlugin.java
+++ b/webconsole-plugins/ds/src/main/java/org/apache/felix/webconsole/plugins/ds/internal/WebConsolePlugin.java
@@ -19,18 +19,18 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.util.Arrays;
-import java.util.Dictionary;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
import java.util.TreeSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.felix.scr.Component;
-import org.apache.felix.scr.Reference;
-import org.apache.felix.scr.ScrService;
import org.apache.felix.webconsole.DefaultVariableResolver;
import org.apache.felix.webconsole.SimpleWebConsolePlugin;
import org.apache.felix.webconsole.WebConsoleUtil;
@@ -40,10 +40,14 @@
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.component.ComponentConstants;
+import org.osgi.service.component.runtime.ServiceComponentRuntime;
+import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
+import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO;
+import org.osgi.service.component.runtime.dto.ReferenceDTO;
+import org.osgi.service.component.runtime.dto.SatisfiedReferenceDTO;
import org.osgi.service.metatype.MetaTypeInformation;
import org.osgi.service.metatype.MetaTypeService;
@@ -68,7 +72,7 @@
//private static final String OPERATION_CONFIGURE = "configure";
// needed services
- static final String SCR_SERVICE = "org.apache.felix.scr.ScrService"; //$NON-NLS-1$
+ static final String SCR_SERVICE = ServiceComponentRuntime.class.getName(); //$NON-NLS-1$
private static final String META_TYPE_NAME = "org.osgi.service.metatype.MetaTypeService"; //$NON-NLS-1$
private static final String CONFIGURATION_ADMIN_NAME = "org.osgi.service.cm.ConfigurationAdmin"; //$NON-NLS-1$
@@ -84,6 +88,7 @@
TEMPLATE = readTemplateFile("/res/plugin.html"); //$NON-NLS-1$
}
+ @Override
public String getCategory()
{
return CATEGORY;
@@ -92,6 +97,7 @@
/**
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
+ @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException
{
@@ -109,22 +115,23 @@
String op = request.getParameter(OPERATION);
if (OPERATION_ENABLE.equals(op))
{
- reqInfo.component.enable();
+ getScrService().enableComponent(reqInfo.component.description);
}
else if (OPERATION_DISABLE.equals(op))
{
- reqInfo.component.disable();
+ getScrService().disableComponent(reqInfo.component.description);
}
final PrintWriter pw = response.getWriter();
response.setContentType("application/json"); //$NON-NLS-1$
response.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
- renderResult(pw, null);
+ renderResult(pw, reqInfo, null);
}
/**
* @see org.apache.felix.webconsole.AbstractWebConsolePlugin#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
+ @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
@@ -143,7 +150,7 @@
response.setContentType("application/json"); //$NON-NLS-1$
response.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
- this.renderResult(response.getWriter(), reqInfo.component);
+ this.renderResult(response.getWriter(), reqInfo, reqInfo.component);
// nothing more to do
return;
@@ -155,6 +162,7 @@
/**
* @see org.apache.felix.webconsole.AbstractWebConsolePlugin#renderContent(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
+ @Override
protected void renderContent(HttpServletRequest request, HttpServletResponse response)
throws IOException
{
@@ -163,7 +171,7 @@
StringWriter w = new StringWriter();
PrintWriter w2 = new PrintWriter(w);
- renderResult(w2, reqInfo.component);
+ renderResult(w2, reqInfo, reqInfo.component);
// prepare variables
DefaultVariableResolver vars = ((DefaultVariableResolver) WebConsoleUtil.getVariableResolver(request));
@@ -174,7 +182,7 @@
}
- private void renderResult(final PrintWriter pw, final Component component)
+ private void renderResult(final PrintWriter pw, RequestInfo info, final ComponentConfigurationDTO component)
throws IOException
{
final JSONWriter jw = new JSONWriter(pw);
@@ -182,7 +190,7 @@
{
jw.object();
- final ScrService scrService = getScrService();
+ final ServiceComponentRuntime scrService = getScrService();
if (scrService == null)
{
jw.key("status"); //$NON-NLS-1$
@@ -190,28 +198,23 @@
}
else
{
- final Component[] components = scrService.getComponents();
-
- if (components == null || components.length == 0)
+ if (info.configurations.size() == 0)
{
jw.key("status"); //$NON-NLS-1$
jw.value(0);
}
else
{
- // order components by name
- sortComponents(components);
-
final StringBuffer buffer = new StringBuffer();
- buffer.append(components.length);
+ buffer.append(info.configurations.size());
buffer.append(" component"); //$NON-NLS-1$
- if (components.length != 1)
+ if (info.configurations.size() != 1)
{
buffer.append('s');
}
buffer.append(" installed."); //$NON-NLS-1$
jw.key("status"); //$NON-NLS-1$
- jw.value(components.length);
+ jw.value(info.configurations.size());
// render components
jw.key("data"); //$NON-NLS-1$
@@ -222,9 +225,9 @@
}
else
{
- for (int i = 0; i < components.length; i++)
+ for (final ComponentConfigurationDTO cfg : info.configurations)
{
- component(jw, components[i], false);
+ component(jw, cfg, false);
}
}
jw.endArray();
@@ -239,17 +242,12 @@
}
}
- private void sortComponents(Component[] components)
- {
- Arrays.sort(components, Util.COMPONENT_COMPARATOR);
- }
-
- private void component(JSONWriter jw, Component component, boolean details)
+ private void component(JSONWriter jw, ComponentConfigurationDTO component, boolean details)
throws JSONException
{
- String id = String.valueOf(component.getId());
- String name = component.getName();
- int state = component.getState();
+ String id = String.valueOf(component.id);
+ String name = component.description.name;
+ int state = component.state;
jw.object();
@@ -263,7 +261,7 @@
jw.key("stateRaw"); //$NON-NLS-1$
jw.value(state);
- final Dictionary props = component.getProperties();
+ final Map<String, Object> props = component.properties;
final String pid = (String) (props != null ? props.get(Constants.SERVICE_PID)
: null);
@@ -271,7 +269,7 @@
{
jw.key("pid"); //$NON-NLS-1$
jw.value(pid);
- if (isConfigurable(component.getBundle(), pid))
+ if (isConfigurable(this.getBundleContext().getBundle(0).getBundleContext().getBundle(component.description.bundle.id), pid))
{
jw.key("configurable"); //$NON-NLS-1$
jw.value(pid);
@@ -287,25 +285,27 @@
jw.endObject();
}
- private void gatherComponentDetails(JSONWriter jw, Component component)
+ private void gatherComponentDetails(JSONWriter jw, ComponentConfigurationDTO component)
throws JSONException
{
+ final Bundle bundle = this.getBundleContext().getBundle(0).getBundleContext().getBundle(component.description.bundle.id);
+
jw.key("props"); //$NON-NLS-1$
jw.array();
- keyVal(jw, "Bundle", component.getBundle().getSymbolicName() + " ("
- + component.getBundle().getBundleId() + ")");
- keyVal(jw, "Implementation Class", component.getClassName());
- if (component.getFactory() != null)
+ keyVal(jw, "Bundle", bundle.getSymbolicName() + " ("
+ + bundle.getBundleId() + ")");
+ keyVal(jw, "Implementation Class", component.description.implementationClass);
+ if (component.description.factory != null)
{
- keyVal(jw, "Component Factory Name", component.getFactory());
+ keyVal(jw, "Component Factory Name", component.description.factory);
}
- keyVal(jw, "Default State", component.isDefaultEnabled() ? "enabled" : "disabled");
- keyVal(jw, "Activation", component.isImmediate() ? "immediate" : "delayed");
+ keyVal(jw, "Default State", component.description.defaultEnabled ? "enabled" : "disabled");
+ keyVal(jw, "Activation", component.description.immediate ? "immediate" : "delayed");
try
{
- keyVal(jw, "Configuration Policy", component.getConfigurationPolicy());
+ keyVal(jw, "Configuration Policy", component.description.configurationPolicy);
}
catch (Throwable t)
{
@@ -320,16 +320,15 @@
jw.endArray();
}
- private void listServices(JSONWriter jw, Component component)
+ private void listServices(JSONWriter jw, ComponentConfigurationDTO component)
{
- String[] services = component.getServices();
+ String[] services = component.description.serviceInterfaces;
if (services == null)
{
return;
}
- keyVal(jw, "Service Type", component.isServiceFactory() ? "service factory"
- : "service");
+ keyVal(jw, "Service Type", component.description.scope);
JSONArray buf = new JSONArray();
for (int i = 0; i < services.length; i++)
@@ -340,73 +339,82 @@
keyVal(jw, "Services", buf);
}
- private void listReferences(JSONWriter jw, Component component)
+ private SatisfiedReferenceDTO findReference(final ComponentConfigurationDTO component, final String name)
{
- Reference[] refs = component.getReferences();
- if (refs != null)
+ for(final SatisfiedReferenceDTO dto : component.satisfiedReferences)
{
- for (int i = 0; i < refs.length; i++)
+ if ( dto.name.equals(name))
{
- JSONArray buf = new JSONArray();
- buf.put(refs[i].isSatisfied() ? "Satisfied" : "Unsatisfied");
- buf.put("Service Name: " + refs[i].getServiceName());
- if (refs[i].getTarget() != null)
- {
- buf.put("Target Filter: " + refs[i].getTarget());
- }
- buf.put("Multiple: " + (refs[i].isMultiple() ? "multiple" : "single"));
- buf.put("Optional: " + (refs[i].isOptional() ? "optional" : "mandatory"));
- buf.put("Policy: " + (refs[i].isStatic() ? "static" : "dynamic"));
+ return dto;
+ }
+ }
+ return null;
+ }
- // list bound services
- ServiceReference[] boundRefs = refs[i].getServiceReferences();
- if (boundRefs != null && boundRefs.length > 0)
+ private void listReferences(JSONWriter jw, ComponentConfigurationDTO component)
+ {
+ for(final ReferenceDTO dto : component.description.references)
+ {
+ JSONArray buf = new JSONArray();
+ final SatisfiedReferenceDTO satisfiedRef = findReference(component, dto.name);
+
+ buf.put(satisfiedRef != null ? "Satisfied" : "Unsatisfied");
+ buf.put("Service Name: " + dto.interfaceName);
+ if (dto.target != null)
+ {
+ buf.put("Target Filter: " + dto.target);
+ }
+ buf.put("Cardinality: " + dto.cardinality);
+ buf.put("Policy: " + dto.policy);
+ buf.put("Policy Option: " + dto.policyOption);
+
+ // list bound services
+ if ( satisfiedRef != null )
+ {
+ for (int j = 0; j < satisfiedRef.boundServices.length; j++)
{
- for (int j = 0; j < boundRefs.length; j++)
+ final StringBuffer b = new StringBuffer();
+ b.append("Bound Service ID ");
+ b.append(satisfiedRef.boundServices[j].id);
+
+ String name = (String) satisfiedRef.boundServices[j].properties.get(ComponentConstants.COMPONENT_NAME);
+ if (name == null)
{
- final StringBuffer b = new StringBuffer();
- b.append("Bound Service ID ");
- b.append(boundRefs[j].getProperty(Constants.SERVICE_ID));
-
- String name = (String) boundRefs[j].getProperty(ComponentConstants.COMPONENT_NAME);
+ name = (String) satisfiedRef.boundServices[j].properties.get(Constants.SERVICE_PID);
if (name == null)
{
- name = (String) boundRefs[j].getProperty(Constants.SERVICE_PID);
- if (name == null)
- {
- name = (String) boundRefs[j].getProperty(Constants.SERVICE_DESCRIPTION);
- }
+ name = (String) satisfiedRef.boundServices[j].properties.get(Constants.SERVICE_DESCRIPTION);
}
- if (name != null)
- {
- b.append(" (");
- b.append(name);
- b.append(")");
- }
- buf.put(b.toString());
}
+ if (name != null)
+ {
+ b.append(" (");
+ b.append(name);
+ b.append(")");
+ }
+ buf.put(b.toString());
}
- else
- {
- buf.put("No Services bound");
- }
-
- keyVal(jw, "Reference " + refs[i].getName(), buf.toString());
}
+ else
+ {
+ buf.put("No Services bound");
+ }
+
+ keyVal(jw, "Reference " + dto.name, buf.toString());
}
}
- private void listProperties(JSONWriter jw, Component component)
+ private void listProperties(JSONWriter jw, ComponentConfigurationDTO component)
{
- Dictionary props = component.getProperties();
+ Map<String, Object> props = component.properties;
if (props != null)
{
JSONArray buf = new JSONArray();
- TreeSet keys = new TreeSet(Util.list(props.keys()));
- for (Iterator ki = keys.iterator(); ki.hasNext();)
+ TreeSet<String> keys = new TreeSet<String>(props.keySet());
+ for (Iterator<String> ki = keys.iterator(); ki.hasNext();)
{
- final String key = (String) ki.next();
- final StringBuffer b = new StringBuffer();
+ final String key = ki.next();
+ final StringBuilder b = new StringBuilder();
b.append(key).append(" = ");
Object prop = props.get(key);
@@ -492,9 +500,9 @@
return (ConfigurationAdmin) getService(CONFIGURATION_ADMIN_NAME);
}
- final ScrService getScrService()
+ final ServiceComponentRuntime getScrService()
{
- return (ScrService) getService(SCR_SERVICE);
+ return (ServiceComponentRuntime) getService(SCR_SERVICE);
}
private final MetaTypeService getMetaTypeService()
@@ -505,11 +513,29 @@
private final class RequestInfo
{
public final String extension;
- public final Component component;
+ public final ComponentConfigurationDTO component;
public final boolean componentRequested;
+ public final ServiceComponentRuntime scrService;
+ public final List<ComponentDescriptionDTO> descriptions = new ArrayList<ComponentDescriptionDTO>();
+ public final List<ComponentConfigurationDTO> configurations = new ArrayList<ComponentConfigurationDTO>();
protected RequestInfo(final HttpServletRequest request)
{
+ this.scrService = getScrService();
+ if ( scrService != null )
+ {
+ final Collection<ComponentDescriptionDTO> descs = scrService.getComponentDescriptionDTOs();
+ for(final ComponentDescriptionDTO d : descs)
+ {
+ for(final ComponentConfigurationDTO cfg : scrService.getComponentConfigurationDTOs(d))
+ {
+ configurations.add(cfg);
+ }
+ descriptions.add(d);
+ }
+ Collections.sort(configurations, Util.COMPONENT_COMPARATOR);
+ }
+
String info = request.getPathInfo();
// remove label and starting slash
info = info.substring(getLabel().length() + 1);
@@ -529,7 +555,7 @@
{
this.componentRequested = true;
info = info.substring(1);
- Component component = getComponentId(info);
+ ComponentConfigurationDTO component = getComponentId(info);
if (component == null)
{
component = getComponentByName(info);
@@ -545,76 +571,80 @@
request.setAttribute(WebConsolePlugin.this.getClass().getName(), this);
}
- protected Component getComponentId(final String componentIdPar)
+ protected ComponentConfigurationDTO getComponentId(final String componentIdPar)
{
- final ScrService scrService = getScrService();
- if (scrService != null)
+ try
{
- try
+ final long componentId = Long.parseLong(componentIdPar);
+ for(final ComponentConfigurationDTO cfg : this.configurations)
{
- final long componentId = Long.parseLong(componentIdPar);
- return scrService.getComponent(componentId);
+ if ( cfg.id == componentId )
+ {
+ return cfg;
+ }
}
- catch (NumberFormatException nfe)
- {
- // don't care
- }
+ }
+ catch (NumberFormatException nfe)
+ {
+ // don't care
}
return null;
}
- protected Component getComponentByName(final String names)
+ protected ComponentConfigurationDTO getComponentByName(final String names)
{
if (names.length() > 0)
{
- final ScrService scrService = getScrService();
- if (scrService != null)
+ final int slash = names.lastIndexOf('/');
+ final String componentName;
+ final String pid;
+ if (slash > 0)
{
+ componentName = names.substring(0, slash);
+ pid = names.substring(slash + 1);
+ }
+ else
+ {
+ componentName = names;
+ pid = null;
+ }
- final int slash = names.lastIndexOf('/');
- final String componentName;
- final String pid;
- if (slash > 0)
+ Collection<ComponentConfigurationDTO> components = null;
+ try
+ {
+ for(final ComponentDescriptionDTO d : this.descriptions)
{
- componentName = names.substring(0, slash);
- pid = names.substring(slash + 1);
- }
- else
- {
- componentName = names;
- pid = null;
- }
-
- Component[] components;
- try
- {
- components = scrService.getComponents(componentName);
- }
- catch (Throwable t)
- {
- // not implemented in the used API version
- components = null;
- }
-
- if (components != null)
- {
- if (pid != null)
+ if ( d.name.equals(componentName) )
{
- for (int i = 0; i < components.length; i++)
+ components = scrService.getComponentConfigurationDTOs(d);
+ }
+ }
+ }
+ catch (Throwable t)
+ {
+ // not implemented in the used API version
+ components = null;
+ }
+
+ if (components != null)
+ {
+ if (pid != null)
+ {
+ final Iterator<ComponentConfigurationDTO> i = components.iterator();
+ while ( i.hasNext() )
+ {
+ ComponentConfigurationDTO c = i.next();
+ if (pid.equals(c.properties.get(Constants.SERVICE_PID)))
{
- Component component = components[i];
- if (pid.equals(component.getProperties().get(
- Constants.SERVICE_PID)))
- {
- return component;
- }
+ return c;
}
+
}
- else if (components.length > 0)
- {
- return components[0];
- }
+ }
+ else if (components.size() > 0)
+ {
+ return components.iterator().next();
}
}
}