FilterService now implements ComponentDeclaration, as it should have done all along. ComponentImpl now treats keys in a map of properties as objects, instead of assuming they're all strings.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1097256 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterServiceImpl.java
index 89eba25..7bb6f75 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterServiceImpl.java
@@ -48,7 +48,7 @@
*/
public AdapterServiceImpl(DependencyManager dm, Class adapteeInterface, String adapteeFilter, String autoConfig, String add, String change, String remove) {
super(dm.createComponent()); // This service will be filtered by our super class, allowing us to take control.
- m_service.setImplementation(new AdapterImpl(adapteeInterface, adapteeFilter, autoConfig, add, change, remove))
+ m_component.setImplementation(new AdapterImpl(adapteeInterface, adapteeFilter, autoConfig, add, change, remove))
.add(dm.createServiceDependency()
.setService(adapteeInterface, adapteeFilter)
.setAutoConfig(false)
@@ -92,7 +92,7 @@
props.put(key, m_serviceProperties.get(key));
}
}
- List dependencies = m_service.getDependencies();
+ List dependencies = m_component.getDependencies();
dependencies.remove(0);
ServiceDependency dependency = m_manager.createServiceDependency()
.setService(m_adapteeInterface, ref)
@@ -112,7 +112,7 @@
.setCallbacks(m_callbackObject, m_init, m_start, m_stop, m_destroy) // if not set, no effect
.add(dependency);
- configureAutoConfigState(service, m_service);
+ configureAutoConfigState(service, m_component);
for (int i = 0; i < dependencies.size(); i++) {
service.add(((Dependency) dependencies.get(i)).createCopy());
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AspectServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AspectServiceImpl.java
index fe1bdd0..0e28f76 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AspectServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AspectServiceImpl.java
@@ -41,7 +41,7 @@
public AspectServiceImpl(DependencyManager dm, Class aspectInterface, String aspectFilter, int ranking, String autoConfig, String add, String change, String remove)
{
super(dm.createComponent()); // This service will be filtered by our super class, allowing us to take control.
- m_service.setImplementation(new AspectImpl(aspectInterface, aspectFilter, ranking, autoConfig, add, change, remove))
+ m_component.setImplementation(new AspectImpl(aspectInterface, aspectFilter, ranking, autoConfig, add, change, remove))
.add(dm.createServiceDependency()
.setService(aspectInterface, createDependencyFilterForAspect(aspectFilter))
.setAutoConfig(false)
@@ -82,7 +82,7 @@
}
public Component createService(Object[] params) {
- List dependencies = m_service.getDependencies();
+ List dependencies = m_component.getDependencies();
// remove our internal dependency
dependencies.remove(0);
// replace it with one that points to the specific service that just was passed in
@@ -104,7 +104,7 @@
.setCallbacks(m_callbackObject, m_init, m_start, m_stop, m_destroy) // if not set, no effect
.add(dependency);
- configureAutoConfigState(service, m_service);
+ configureAutoConfigState(service, m_component);
for (int i = 0; i < dependencies.size(); i++) {
service.add(((Dependency) dependencies.get(i)).createCopy());
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
index f666a92..f620ae3 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
@@ -42,7 +42,7 @@
public BundleAdapterServiceImpl(DependencyManager dm, int bundleStateMask, String bundleFilter, boolean propagate)
{
super(dm.createComponent()); // This service will be filtered by our super class, allowing us to take control.
- m_service.setImplementation(new BundleAdapterImpl(bundleStateMask, bundleFilter, propagate))
+ m_component.setImplementation(new BundleAdapterImpl(bundleStateMask, bundleFilter, propagate))
.add(dm.createBundleDependency()
.setFilter(bundleFilter)
.setStateMask(bundleStateMask)
@@ -70,7 +70,7 @@
props.put(key, m_serviceProperties.get(key));
}
}
- List dependencies = m_service.getDependencies();
+ List dependencies = m_component.getDependencies();
// the first dependency is always the dependency on the bundle, which
// will be replaced with a more specific dependency below
dependencies.remove(0);
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ComponentImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ComponentImpl.java
index 5733254..3bd4040 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ComponentImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ComponentImpl.java
@@ -1108,11 +1108,11 @@
if (properties != null) {
Enumeration enumeration = properties.keys();
while (enumeration.hasMoreElements()) {
- String key = (String) enumeration.nextElement();
+ Object key = enumeration.nextElement();
if (result.length() > 0) {
result.append(',');
}
- result.append(key);
+ result.append(key.toString());
result.append('=');
Object value = properties.get(key);
if (value instanceof String[]) {
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
index f697500..fb7652d 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
@@ -48,7 +48,7 @@
super(dm.createComponent()); // This service will be filtered by our super class, allowing us to take control.
Hashtable props = new Hashtable();
props.put(Constants.SERVICE_PID, factoryPid);
- m_service
+ m_component
.setInterface(ManagedServiceFactory.class.getName(), props)
.setImplementation(new AdapterImpl(factoryPid, update, propagate));
}
@@ -58,7 +58,7 @@
super(dm.createComponent()); // This service will be filtered by our super class, allowing us to take control.
Hashtable props = new Hashtable();
props.put(Constants.SERVICE_PID, factoryPid);
- m_service
+ m_component
.setInterface(ManagedServiceFactory.class.getName(), props)
.setImplementation(new MetaTypeAdapterImpl(factoryPid, update, propagate,
bctx, logger, heading, description,
@@ -132,7 +132,7 @@
Dictionary serviceProperties = m_propagate ? mergeSettings(m_serviceProperties, settings) : m_serviceProperties;
newService.setInterface(m_serviceInterfaces, serviceProperties);
newService.setImplementation(impl);
- List dependencies = m_service.getDependencies();
+ List dependencies = m_component.getDependencies();
newService.add(dependencies);
newService.setComposition(m_compositionInstance, m_compositionMethod); // if not set, no effect
newService.setCallbacks(m_callbackObject, m_init, m_start, m_stop, m_destroy); // if not set, no effect
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FilterService.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FilterService.java
index 9779290..76a7e84 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FilterService.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FilterService.java
@@ -24,19 +24,22 @@
import java.util.List;
import org.apache.felix.dm.Component;
+import org.apache.felix.dm.ComponentDeclaration;
+import org.apache.felix.dm.ComponentDependencyDeclaration;
import org.apache.felix.dm.ComponentStateListener;
import org.apache.felix.dm.Dependency;
import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
/**
- * This class allows to filter a Service interface. All Aspect/Adapters extends this class
- * in order to add functionality to the default Service implementation.
+ * This class allows to filter a Component interface. All Aspect/Adapters extend this class
+ * in order to add functionality to the default Component implementation.
*
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
-public class FilterService implements Component {
- protected ComponentImpl m_service;
+public class FilterService implements Component, ComponentDeclaration {
+ protected ComponentImpl m_component;
protected List m_stateListeners = new ArrayList();
protected String m_init = "init";
protected String m_start = "start";
@@ -52,16 +55,16 @@
protected Dictionary m_serviceProperties;
public FilterService(Component service) {
- m_service = (ComponentImpl) service;
+ m_component = (ComponentImpl) service;
}
public Component add(Dependency dependency) {
- m_service.add(dependency);
+ m_component.add(dependency);
// Add the dependency (if optional) to all already instantiated services.
// If the dependency is required, our internal service will be stopped/restarted, so in this case
// we have nothing to do.
if (! dependency.isRequired()) {
- AbstractDecorator ad = (AbstractDecorator) m_service.getService();
+ AbstractDecorator ad = (AbstractDecorator) m_component.getService();
if (ad != null)
{
ad.addDependency(dependency);
@@ -71,7 +74,7 @@
}
public Component add(List dependencies) {
- m_service.add(dependencies);
+ m_component.add(dependencies);
// Add the dependencies to all already instantiated services.
// If one dependency from the list is required, we have nothing to do, since our internal
// service will be stopped/restarted.
@@ -83,7 +86,7 @@
}
// Ok, the list contains no required dependencies: add optionals dependencies in already instantiated
// services.
- AbstractDecorator ad = (AbstractDecorator) m_service.getService();
+ AbstractDecorator ad = (AbstractDecorator) m_component.getService();
if (ad != null) {
ad.addDependencies(dependencies);
}
@@ -95,18 +98,18 @@
m_stateListeners.add(listener);
}
// Add the listener to all already instantiated services.
- AbstractDecorator ad = (AbstractDecorator) m_service.getService();
+ AbstractDecorator ad = (AbstractDecorator) m_component.getService();
if (ad != null) {
ad.addStateListener(listener);
}
}
public List getDependencies() {
- return m_service.getDependencies();
+ return m_component.getDependencies();
}
public Object getService() {
- return m_service.getService();
+ return m_component.getService();
}
public synchronized Dictionary getServiceProperties() {
@@ -114,17 +117,17 @@
}
public ServiceRegistration getServiceRegistration() {
- return m_service.getServiceRegistration();
+ return m_component.getServiceRegistration();
}
public Component remove(Dependency dependency) {
- m_service.remove(dependency);
+ m_component.remove(dependency);
// Remove the dependency (if optional) from all already instantiated services.
// If the dependency is required, our internal service will be stopped, so in this case
// we have nothing to do.
if (!dependency.isRequired())
{
- AbstractDecorator ad = (AbstractDecorator) m_service.getService();
+ AbstractDecorator ad = (AbstractDecorator) m_component.getService();
if (ad != null)
{
ad.removeDependency(dependency);
@@ -138,14 +141,14 @@
m_stateListeners.remove(listener);
}
// Remove the listener from all already instantiated services.
- AbstractDecorator ad = (AbstractDecorator) m_service.getService();
+ AbstractDecorator ad = (AbstractDecorator) m_component.getService();
if (ad != null) {
ad.removeStateListener(listener);
}
}
public synchronized Component setCallbacks(Object instance, String init, String start, String stop, String destroy) {
- m_service.ensureNotActive();
+ m_component.ensureNotActive();
m_callbackObject = instance;
m_init = init;
m_start = start;
@@ -160,20 +163,20 @@
}
public synchronized Component setComposition(Object instance, String getMethod) {
- m_service.ensureNotActive();
+ m_component.ensureNotActive();
m_compositionInstance = instance;
m_compositionMethod = getMethod;
return this;
}
public synchronized Component setComposition(String getMethod) {
- m_service.ensureNotActive();
+ m_component.ensureNotActive();
m_compositionMethod = getMethod;
return this;
}
public synchronized Component setFactory(Object factory, String createMethod) {
- m_service.ensureNotActive();
+ m_component.ensureNotActive();
m_factory = factory;
m_factoryCreateMethod = createMethod;
return this;
@@ -184,7 +187,7 @@
}
public synchronized Component setImplementation(Object implementation) {
- m_service.ensureNotActive();
+ m_component.ensureNotActive();
m_serviceImpl = implementation;
return this;
}
@@ -194,7 +197,7 @@
}
public synchronized Component setInterface(String[] serviceInterfaces, Dictionary properties) {
- m_service.ensureNotActive();
+ m_component.ensureNotActive();
if (serviceInterfaces != null) {
m_serviceInterfaces = new String[serviceInterfaces.length];
System.arraycopy(serviceInterfaces, 0, m_serviceInterfaces, 0, serviceInterfaces.length);
@@ -209,7 +212,7 @@
}
// Set the properties to all already instantiated services.
if (serviceProperties != null) {
- AbstractDecorator ad = (AbstractDecorator) m_service.getService();
+ AbstractDecorator ad = (AbstractDecorator) m_component.getService();
if (ad != null) {
ad.setServiceProperties(serviceProperties);
}
@@ -218,40 +221,56 @@
}
public void start() {
- m_service.start();
+ m_component.start();
}
public void stop() {
- m_service.stop();
+ m_component.stop();
}
public void invokeCallbackMethod(Object[] instances, String methodName, Class[][] signatures, Object[][] parameters) {
- m_service.invokeCallbackMethod(instances, methodName, signatures, parameters);
+ m_component.invokeCallbackMethod(instances, methodName, signatures, parameters);
}
public Object[] getCompositionInstances() {
- return m_service.getCompositionInstances();
+ return m_component.getCompositionInstances();
}
public DependencyManager getDependencyManager() {
- return m_service.getDependencyManager();
+ return m_component.getDependencyManager();
}
public Component setAutoConfig(Class clazz, boolean autoConfig) {
- m_service.setAutoConfig(clazz, autoConfig);
+ m_component.setAutoConfig(clazz, autoConfig);
return this;
}
public Component setAutoConfig(Class clazz, String instanceName) {
- m_service.setAutoConfig(clazz, instanceName);
+ m_component.setAutoConfig(clazz, instanceName);
return this;
}
public boolean getAutoConfig(Class clazz) {
- return m_service.getAutoConfig(clazz);
+ return m_component.getAutoConfig(clazz);
}
public String getAutoConfigInstance(Class clazz) {
- return m_service.getAutoConfigInstance(clazz);
+ return m_component.getAutoConfigInstance(clazz);
+ }
+
+ public ComponentDependencyDeclaration[] getComponentDependencies() {
+ return m_component.getComponentDependencies();
+ }
+
+ public String getName() {
+ return m_component.getName();
+ }
+
+ public int getState() {
+ return m_component.getState();
+ }
+
+ public BundleContext getBundleContext() {
+ return m_component.getBundleContext();
};
}
\ No newline at end of file
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
index ab45808..d083421 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
@@ -47,7 +47,7 @@
super(dm.createComponent()); // This service will be filtered by our super class, allowing us to take control.
m_callbackInstance = callbackInstance;
m_callbackChanged = callbackChanged;
- m_service.setImplementation(new ResourceAdapterImpl(resourceFilter, propagate))
+ m_component.setImplementation(new ResourceAdapterImpl(resourceFilter, propagate))
.add(dm.createResourceDependency()
.setFilter(resourceFilter)
.setAutoConfig(false)
@@ -58,7 +58,7 @@
super(dm.createComponent()); // This service will be filtered by our super class, allowing us to take control.
m_callbackInstance = callbackInstance;
m_callbackChanged = callbackChanged;
- m_service.setImplementation(new ResourceAdapterImpl(resourceFilter, propagateCallbackInstance, propagateCallbackMethod))
+ m_component.setImplementation(new ResourceAdapterImpl(resourceFilter, propagateCallbackInstance, propagateCallbackMethod))
.add(dm.createResourceDependency()
.setFilter(resourceFilter)
.setAutoConfig(false)
@@ -96,7 +96,7 @@
props.put(key, m_serviceProperties.get(key));
}
}
- List dependencies = m_service.getDependencies();
+ List dependencies = m_component.getDependencies();
// the first dependency is always the dependency on the resource, which
// will be replaced with a more specific dependency below
dependencies.remove(0);