You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2010/05/23 22:05:16 UTC

svn commit: r947476 - in /felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm: DependencyActivatorBase.java DependencyManager.java impl/AdapterImpl.java impl/AdapterServiceImpl.java

Author: pderop
Date: Sun May 23 20:05:16 2010
New Revision: 947476

URL: http://svn.apache.org/viewvc?rev=947476&view=rev
Log:
reworked the Adapter API in order to allow to provide adapter parameters by reusing the Service methods (setInterface, setImplementation, etc ...)

Added:
    felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterServiceImpl.java
      - copied, changed from r947475, felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterImpl.java
Removed:
    felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterImpl.java
Modified:
    felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyActivatorBase.java
    felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java

Modified: felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyActivatorBase.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyActivatorBase.java?rev=947476&r1=947475&r2=947476&view=diff
==============================================================================
--- felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyActivatorBase.java (original)
+++ felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyActivatorBase.java Sun May 23 20:05:16 2010
@@ -161,11 +161,8 @@ public abstract class DependencyActivato
         return m_manager.createAspectService(serviceInterface, serviceFilter, ranking, attributeName);
     }
     
-    public Service createAdapterService(Class serviceInterface, String serviceFilter, String adapterInterface, Object adapterImplementation, Dictionary adapterProperties) {
-        return m_manager.createAdapterService(serviceInterface, serviceFilter, adapterInterface, adapterImplementation, adapterProperties);
-    }
-    public Service createAdapterService(Class serviceInterface, String serviceFilter, String[] adapterInterface, Object adapterImplementation, Dictionary adapterProperties) {
-        return m_manager.createAdapterService(serviceInterface, serviceFilter, adapterInterface, adapterImplementation, adapterProperties);
+    public Service createAdapterService(Class serviceInterface, String serviceFilter) {
+        return m_manager.createAdapterService(serviceInterface, serviceFilter);
     }
     
     public Service createResourceAdapter(String resourceFilter, Object adapterHandler, String adapterInterface, Dictionary adapterProperties, Object adapterImplementation, boolean propagate) {

Modified: felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java?rev=947476&r1=947475&r2=947476&view=diff
==============================================================================
--- felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java (original)
+++ felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java Sun May 23 20:05:16 2010
@@ -30,7 +30,7 @@ import org.apache.felix.dm.dependencies.
 import org.apache.felix.dm.dependencies.ResourceDependency;
 import org.apache.felix.dm.dependencies.ServiceDependency;
 import org.apache.felix.dm.dependencies.TemporalServiceDependency;
-import org.apache.felix.dm.impl.AdapterImpl;
+import org.apache.felix.dm.impl.AdapterServiceImpl;
 import org.apache.felix.dm.impl.AspectServiceImpl;
 import org.apache.felix.dm.impl.BundleAdapterImpl;
 import org.apache.felix.dm.impl.FactoryConfigurationAdapterImpl;
@@ -209,33 +209,25 @@ public class DependencyManager {
      * It will also inherit all dependencies, and if you declare the original
      * service as a member it will be injected.
      * 
+     * <h3>Usage Example</h3>
+     * 
+     * <blockquote>
+     *  manager.createAdapterService(AdapteeService.class, "(foo=bar)")
+     *         // The the interface to use when registering adapters
+     *         .setInterface(AdapterService.class, new Hashtable() {{ put("additional", "properties"); }})
+     *         // the implementation of the adapter
+     *         .setImplementation(AdapterImpl.class);
+     * <pre>
+     * </pre>
+     * </blockquote>
      * @param serviceInterface the service interface to apply the adapter to
      * @param serviceFilter the filter condition to use with the service interface
-     * @param adapterInterface the interface to use when registering adapters
-     * @param adapterImplementation the implementation of the adapter
-     * @param adapterProperties additional properties to use with the adapter service registration
      * @return a service that acts as a factory for generating adapters
      */
-    public Service createAdapterService(Class serviceInterface, String serviceFilter, String adapterInterface, Object adapterImplementation, Dictionary adapterProperties) {
-        return createService()
-            .setImplementation(new AdapterImpl(serviceInterface, serviceFilter, adapterImplementation, adapterInterface, adapterProperties))
-            .add(createServiceDependency()
-                .setService(serviceInterface)
-                .setAutoConfig(false)
-                .setCallbacks("added", "removed")
-            );
-    }
-    
-    public Service createAdapterService(Class serviceInterface, String serviceFilter, String[] adapterInterface, Object adapterImplementation, Dictionary adapterProperties) {
-        return createService()
-            .setImplementation(new AdapterImpl(serviceInterface, serviceFilter, adapterImplementation, adapterInterface, adapterProperties))
-            .add(createServiceDependency()
-                .setService(serviceInterface)
-                .setAutoConfig(false)
-                .setCallbacks("added", "removed")
-            );
+    public Service createAdapterService(Class serviceInterface, String serviceFilter) {
+        return new AdapterServiceImpl(this, serviceInterface, serviceFilter);
     }
-    
+        
     /**
      * Creates a new resource adapter. The adapter will be applied to any resource that
      * matches the specified filter condition. For each matching resource

Copied: felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterServiceImpl.java (from r947475, felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterImpl.java)
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterServiceImpl.java?p2=felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterServiceImpl.java&p1=felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterImpl.java&r1=947475&r2=947476&rev=947476&view=diff
==============================================================================
--- felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterImpl.java (original)
+++ felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterServiceImpl.java Sun May 23 20:05:16 2010
@@ -17,75 +17,72 @@
  * under the License.
  */
 package org.apache.felix.dm.impl;
-
-import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.Properties;
 
+import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.service.Service;
 import org.osgi.framework.ServiceReference;
 
-public class AdapterImpl extends AbstractDecorator {
-	private volatile Service m_service;
-    private final Class m_serviceInterface;
-    private final String m_serviceFilter;
-    private final Object m_adapterImplementation;
-    private final Object m_adapterInterface;
-    private final Dictionary m_adapterProperties;
-	
-    public AdapterImpl(Class serviceInterface, String serviceFilter, Object adapterImplementation, String adapterInterface, Dictionary adapterProperties) {
-        m_serviceInterface = serviceInterface;
-        m_serviceFilter = serviceFilter;
-        m_adapterImplementation = adapterImplementation;
-        m_adapterInterface = adapterInterface;
-        m_adapterProperties = adapterProperties;
-    }
-
-    public AdapterImpl(Class serviceInterface, String serviceFilter, Object adapterImplementation, String[] adapterInterfaces, Dictionary adapterProperties) {
-        m_serviceInterface = serviceInterface;
-        m_serviceFilter = serviceFilter;
-        m_adapterImplementation = adapterImplementation;
-        m_adapterInterface = adapterInterfaces;
-        m_adapterProperties = adapterProperties;
+/**
+ * Adapter Service implementation. This class extends the FilterService in order to catch
+ * some Service methods for configuring actual adapter service implementation.
+ */
+public class AdapterServiceImpl extends FilterService
+{
+    /**
+     * Creates a new Adapter Service implementation.
+     * @param dm the dependency manager used to create our internal adapter service
+     * @param adapteeInterface the service interface to apply the adapter to
+     * @param adapteeFilter the filter condition to use with the service interface
+     */
+    public AdapterServiceImpl(DependencyManager dm, Class adapteeInterface, String adapteeFilter)
+    {
+        super(dm.createService()); // This service will be filtered by our super class, allowing us to take control.
+        m_service.setImplementation(new AdapterImpl(adapteeInterface, adapteeFilter))
+                 .add(dm.createServiceDependency()
+                      .setService(adapteeInterface)
+                      .setAutoConfig(false)
+                      .setCallbacks("added", "removed"));
     }
-	
-    public Service createService(Object[] properties) {
-        ServiceReference ref = (ServiceReference) properties[0]; 
-        Object service = properties[1];
-        Properties props = new Properties();
-        String[] keys = ref.getPropertyKeys();
-        for (int i = 0; i < keys.length; i++) {
-            props.put(keys[i], ref.getProperty(keys[i]));
+    
+    public class AdapterImpl extends AbstractDecorator {
+        private final Class m_adapteeInterface;
+        private final String m_adapteeFilter;
+        
+        public AdapterImpl(Class adapteeInterface, String adapteeFilter) {
+            m_adapteeInterface = adapteeInterface;
+            m_adapteeFilter = adapteeFilter;
         }
-        if (m_adapterProperties != null) {
-            Enumeration e = m_adapterProperties.keys();
-            while (e.hasMoreElements()) {
-                Object key = e.nextElement();
-                props.put(key, m_adapterProperties.get(key));
+        
+        public Service createService(Object[] properties) {
+            ServiceReference ref = (ServiceReference) properties[0]; 
+            Object service = properties[1];
+            Properties props = new Properties();
+            String[] keys = ref.getPropertyKeys();
+            for (int i = 0; i < keys.length; i++) {
+                props.put(keys[i], ref.getProperty(keys[i]));
             }
-        }
-        List dependencies = m_service.getDependencies();
-        dependencies.remove(0);
-        if (m_adapterInterface instanceof String) {
+            if (m_serviceProperties != null) {
+                Enumeration e = m_serviceProperties.keys();
+                while (e.hasMoreElements()) {
+                    Object key = e.nextElement();
+                    props.put(key, m_serviceProperties.get(key));
+                }
+            }
+            List dependencies = m_service.getDependencies();
+            dependencies.remove(0);
             return m_manager.createService()
-                .setInterface((String) m_adapterInterface, props)
-                .setImplementation(m_adapterImplementation)
+                .setInterface(m_serviceInterfaces, props)
+                .setImplementation(m_serviceImpl)
+                .setFactory(m_factory, m_factoryCreateMethod) // if not set, no effect
+                .setComposition(m_compositionInstance, m_compositionMethod) // if not set, no effect
+                .setCallbacks(m_callbackObject, m_init, m_start, m_stop, m_destroy) // if not set, no effect
                 .add(dependencies)
                 .add(m_manager.createServiceDependency()
-                    .setService(m_serviceInterface, ref)
-                    .setRequired(true)
-                );
-        }
-        else {
-            return m_manager.createService()
-            .setInterface((String[]) m_adapterInterface, props)
-            .setImplementation(m_adapterImplementation)
-            .add(dependencies)
-            .add(m_manager.createServiceDependency()
-                .setService(m_serviceInterface, ref)
-                .setRequired(true)
-            );
+                     .setService(m_adapteeInterface, ref)
+                     .setRequired(true));
         }
-	}
+    }
 }