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);