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