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 2014/10/25 15:07:19 UTC
svn commit: r1634221 - in /felix/sandbox/pderop/dependencymanager-prototype:
org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/
org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/
Author: pderop
Date: Sat Oct 25 13:07:19 2014
New Revision: 1634221
URL: http://svn.apache.org/r1634221
Log:
FELIX-4680 - Add more DM ServiceDependency callback.
Added:
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceDependencyCallbackSignaturesTest.java
Modified:
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceDependencyImpl.java
Added: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceDependencyCallbackSignaturesTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceDependencyCallbackSignaturesTest.java?rev=1634221&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceDependencyCallbackSignaturesTest.java (added)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceDependencyCallbackSignaturesTest.java Sat Oct 25 13:07:19 2014
@@ -0,0 +1,168 @@
+package org.apache.felix.dm.itest;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.ServiceReference;
+
+@SuppressWarnings("unused")
+public class ServiceDependencyCallbackSignaturesTest extends TestBase {
+ volatile Ensure m_ensure;
+
+ /**
+ * Tests if all possible dependency callbacks signatures supported by ServiceDependency.
+ */
+ public void testDependencyCallbackSignatures() {
+ DependencyManager m = getDM();
+ m_ensure = new Ensure();
+ Hashtable<String, String> props = new Hashtable<>();
+ props.put("foo", "bar");
+ Component provider = m.createComponent()
+ .setImplementation(new ProviderImpl()).setInterface(Provider.class.getName(), props);
+
+ declareConsumer(m, new Object() {
+ void bind(Component c, ServiceReference ref, Provider provider) {
+ Assert.assertNotNull(c);
+ Assert.assertNotNull(ref);
+ Assert.assertNotNull(provider);
+ Assert.assertEquals("bar", ref.getProperty("foo"));
+ Assert.assertEquals(context.getService(ref), provider);
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Component c, ServiceReference ref, Object provider) {
+ Assert.assertNotNull(c);
+ Assert.assertNotNull(ref);
+ Assert.assertEquals("bar", ref.getProperty("foo"));
+ Assert.assertNotNull(provider);
+ Assert.assertEquals(context.getService(ref), provider);
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Component c, ServiceReference ref) {
+ Assert.assertNotNull(c);
+ Assert.assertNotNull(ref);
+ Assert.assertEquals("bar", ref.getProperty("foo"));
+ Assert.assertNotNull(context.getService(ref));
+ Assert.assertEquals(context.getService(ref).getClass(), ProviderImpl.class);
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Component c, Provider provider) {
+ Assert.assertNotNull(c);
+ Assert.assertNotNull(provider);
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Component c, Object provider) {
+ Assert.assertNotNull(c);
+ Assert.assertNotNull(provider);
+ Assert.assertEquals(provider.getClass(), ProviderImpl.class);
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Component c) {
+ Assert.assertNotNull(c);
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Component c, Map<String, String> props, Provider provider) {
+ Assert.assertNotNull(c);
+ Assert.assertNotNull(props);
+ Assert.assertNotNull(provider);
+ Assert.assertEquals("bar", props.get("foo"));
+ Assert.assertEquals(provider.getClass(), ProviderImpl.class);
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(ServiceReference ref, Provider provider) {
+ Assert.assertNotNull(ref);
+ Assert.assertNotNull(provider);
+ Assert.assertEquals("bar", ref.getProperty("foo"));
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(ServiceReference ref, Object provider) {
+ Assert.assertNotNull(ref);
+ Assert.assertNotNull(provider);
+ Assert.assertEquals("bar", ref.getProperty("foo"));
+ Assert.assertEquals(provider.getClass(), ProviderImpl.class);
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(ServiceReference ref) {
+ Assert.assertNotNull(ref);
+ Assert.assertEquals("bar", ref.getProperty("foo"));
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Provider provider) {
+ Assert.assertNotNull(provider);
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Provider provider, Map<?, ?> props) {
+ Assert.assertNotNull(provider);
+ Assert.assertEquals("bar", props.get("foo"));
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Map<?, ?> props, Provider provider) {
+ Assert.assertNotNull(provider);
+ Assert.assertEquals("bar", props.get("foo"));
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Provider provider, Dictionary<?, ?> props) {
+ Assert.assertNotNull(provider);
+ Assert.assertEquals("bar", props.get("foo"));
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Dictionary<?, ?> props, Provider provider) {
+ Assert.assertNotNull(provider);
+ Assert.assertEquals("bar", props.get("foo"));
+ m_ensure.step();
+ }
+ });
+ declareConsumer(m, new Object() {
+ void bind(Object provider) {
+ Assert.assertNotNull(provider);
+ Assert.assertEquals(provider.getClass(), ProviderImpl.class);
+ m_ensure.step();
+ }
+ });
+
+ m.add(provider);
+ m_ensure.waitForStep(16, 5000);
+ }
+
+ private void declareConsumer(DependencyManager m, Object consumerImpl) {
+ Component consumer = m.createComponent().setImplementation(consumerImpl)
+ .add(m.createServiceDependency().setService(Provider.class).setCallbacks("bind", "change", "unbind").setRequired(true));
+ m.add(consumer);
+ }
+
+ public static interface Provider {}
+
+ public static class ProviderImpl implements Provider {}
+}
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceDependencyImpl.java?rev=1634221&r1=1634220&r2=1634221&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceDependencyImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ServiceDependencyImpl.java Sat Oct 25 13:07:19 2014
@@ -257,38 +257,46 @@ public class ServiceDependencyImpl exten
@Override
public void invoke(String method, Event e, Object[] instances) {
ServiceEventImpl se = (ServiceEventImpl) e;
+ ServicePropertiesMap propertiesMap = new ServicePropertiesMap(se.getReference());
+ Dictionary<?,?> properties = se.getProperties();
m_component.invokeCallbackMethod(instances, method,
new Class[][]{
- {Component.class, ServiceReference.class, m_trackedServiceName},
- {Component.class, ServiceReference.class, Object.class},
- {Component.class, ServiceReference.class},
- {Component.class, m_trackedServiceName},
- {Component.class, Object.class},
- {Component.class},
- {Component.class, Map.class, m_trackedServiceName},
- {ServiceReference.class, m_trackedServiceName},
- {ServiceReference.class, Object.class},
- {ServiceReference.class},
- {m_trackedServiceName},
- {Object.class},
- {},
- {Map.class, m_trackedServiceName}},
+ {Component.class, ServiceReference.class, m_trackedServiceName},
+ {Component.class, ServiceReference.class, Object.class},
+ {Component.class, ServiceReference.class},
+ {Component.class, m_trackedServiceName},
+ {Component.class, Object.class},
+ {Component.class},
+ {Component.class, Map.class, m_trackedServiceName},
+ {ServiceReference.class, m_trackedServiceName},
+ {ServiceReference.class, Object.class},
+ {ServiceReference.class},
+ {m_trackedServiceName},
+ {m_trackedServiceName, Map.class},
+ {Map.class, m_trackedServiceName},
+ {m_trackedServiceName, Dictionary.class},
+ {Dictionary.class, m_trackedServiceName},
+ {Object.class},
+ {}},
new Object[][]{
- {m_component, se.getReference(), se.getEvent()},
- {m_component, se.getReference(), se.getEvent()},
- {m_component, se.getReference()},
- {m_component, se.getEvent()},
- {m_component, se.getEvent()},
- {m_component},
- {m_component, new ServicePropertiesMap(se.getReference()), se.getEvent()},
- {se.getReference(), se.getEvent()},
- {se.getReference(), se.getEvent()},
- {se.getReference()},
- {se.getEvent()},
- {se.getEvent()},
- {},
- {new ServicePropertiesMap(se.getReference()), se.getEvent()}}
+ {m_component, se.getReference(), se.getEvent()},
+ {m_component, se.getReference(), se.getEvent()},
+ {m_component, se.getReference()},
+ {m_component, se.getEvent()},
+ {m_component, se.getEvent()},
+ {m_component},
+ {m_component, propertiesMap, se.getEvent()},
+ {se.getReference(), se.getEvent()},
+ {se.getReference(), se.getEvent()},
+ {se.getReference()},
+ {se.getEvent()},
+ {se.getEvent(), propertiesMap},
+ {propertiesMap, se.getEvent()},
+ {se.getEvent(), properties},
+ {properties, se.getEvent()},
+ {se.getEvent()},
+ {}}
);
}