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 2017/02/06 14:37:51 UTC
svn commit: r1781908 [2/5] - in /felix/trunk/dependencymanager:
cnf/localrepo/ cnf/releaserepo/
org.apache.felix.dependencymanager.annotation/
org.apache.felix.dependencymanager.annotation/src/org/apache/felix/dm/annotation/api/
org.apache.felix.depend...
Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FELIX5516Test.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FELIX5516Test.java?rev=1781908&view=auto
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FELIX5516Test.java (added)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FELIX5516Test.java Mon Feb 6 14:37:49 2017
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.lambda.itest;
+
+import static org.apache.felix.dm.lambda.DependencyManagerActivator.component;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.PrototypeServiceFactory;
+import org.osgi.framework.ServiceObjects;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+
+/**
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class FELIX5516Test extends TestBase {
+ private final static Ensure m_ensure = new Ensure();
+
+ public void testServiceNotDereferencedInternally() throws Exception {
+ final DependencyManager dm = getDM();
+ Component service = component(dm).impl(new Factory()).provides(Service.class).build();
+ Component client = component(dm).impl(new Client()).withSvc(Service.class, svc -> svc.required().dereference(false).add(Client::bind)).build();
+ dm.add(service);
+ dm.add(client);
+ m_ensure.waitForStep(9, 5000);
+ dm.clear();
+ }
+
+ public interface Service {}
+
+ public static class ServiceImpl implements Service {
+
+ }
+
+ public static class Factory implements PrototypeServiceFactory<Service> {
+ @Override
+ public Service getService(Bundle bundle, ServiceRegistration<Service> registration) {
+ m_ensure.step();
+ return new ServiceImpl();
+ }
+
+ @Override
+ public void ungetService(Bundle bundle, ServiceRegistration<Service> registration, Service service) {
+ m_ensure.step();
+ }
+ }
+
+ public static class Client {
+ ServiceReference<Service> m_ref;
+ BundleContext m_ctx;
+
+ void bind(ServiceReference<Service> ref) {
+ m_ref = ref;
+ }
+
+ void start() {
+ ServiceObjects<Service> sobjs = m_ctx.getServiceObjects(m_ref);
+
+ m_ensure.step(1);
+ Service s1 = sobjs.getService();
+
+ m_ensure.step(3);
+ Service s2 = sobjs.getService();
+
+ m_ensure.step(5);
+ sobjs.ungetService(s1);
+
+ m_ensure.step(7);
+ sobjs.ungetService(s2);
+ m_ensure.step(9);
+ }
+ }
+}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FactoryConfigurationAdapterTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FactoryConfigurationAdapterTest.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FactoryConfigurationAdapterTest.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FactoryConfigurationAdapterTest.java Mon Feb 6 14:37:49 2017
@@ -92,6 +92,55 @@ public class FactoryConfigurationAdapter
m.clear();
}
+ public void testFactoryConfigurationAdapterWithMethodRef() {
+ DependencyManager m = getDM();
+ // helper class that ensures certain steps get executed in sequence
+ m_ensure = new Ensure();
+
+ // Create a Configuration instance, which will create/update/remove a configuration for factoryPid "MyFactoryPid"
+ ConfigurationCreator configurator = new ConfigurationCreator("MyFactoryPid", "key", "value1");
+ Component s1 = component(m).impl(configurator).withSvc(ConfigurationAdmin.class, true).build();
+
+ // Create an Adapter that will be instantiated, once the configuration is created.
+ // This Adapter provides an AdapterService, and depends on an AdapterExtraDependency service.
+ Component s2 = factoryPidAdapter(m)
+ .factoryPid("MyFactoryPid")
+ .impl(Adapter.class)
+ .update(Adapter::updated)
+ .propagate()
+ .provides(AdapterService.class, "foo", "bar")
+ .withSvc(AdapterExtraDependency.class, true)
+ .build();
+
+ // Create extra adapter service dependency upon which our adapter depends on.
+ Component s3 = component(m)
+ .impl(new AdapterExtraDependency()).provides(AdapterExtraDependency.class).build();
+
+ // Create an AdapterService Consumer
+ Component s4 = component(m)
+ .impl(AdapterServiceConsumer.class).withSvc(AdapterService.class, srv -> srv.add("bind").change("change").remove("remove")).build();
+
+ // Start services
+ m.add(s1);
+ m.add(s2);
+ m.add(s3);
+ m.add(s4);
+
+ // Wait for step 8: the AdapterService consumer has been injected with the AdapterService, and has called the doService method.
+ m_ensure.waitForStep(8, 10000);
+
+ // Modify configuration.
+ configurator.update("key", "value2");
+
+ // Wait for step 13: the AdapterService has been updated, and the AdapterService consumer has seen the change
+ m_ensure.waitForStep(13, 10000);
+
+ // Remove the configuration
+ m.remove(s1); // The stop method will remove the configuration
+ m_ensure.waitForStep(16, 10000);
+ m.clear();
+ }
+
public static class ConfigurationCreator {
private volatile ConfigurationAdmin m_ca;
private String m_key;
Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FactoryConfigurationCreator.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FactoryConfigurationCreator.java?rev=1781908&view=auto
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FactoryConfigurationCreator.java (added)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/lambda/itest/FactoryConfigurationCreator.java Mon Feb 6 14:37:49 2017
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.lambda.itest;
+
+import java.io.IOException;
+import java.util.Hashtable;
+
+import org.junit.Assert;
+import org.osgi.service.cm.ConfigurationAdmin;
+
+public class FactoryConfigurationCreator {
+ private volatile ConfigurationAdmin m_ca;
+ private volatile org.osgi.service.cm.Configuration m_conf;
+ private final String m_key;
+ private final String m_value;
+ private final String m_factoryPid;
+ private final Ensure m_e;
+ private final int m_firstStep;
+
+ public FactoryConfigurationCreator(Ensure e, String factoryPid, int firstStep, String key, String value) {
+ m_factoryPid = factoryPid;
+ m_key = key;
+ m_value = value;
+ m_e = e;
+ m_firstStep = firstStep;
+ }
+
+ public void start() {
+ try {
+ m_e.step(m_firstStep);
+ m_conf = m_ca.createFactoryConfiguration(m_factoryPid, null);
+ Hashtable<String, Object> props = new Hashtable<>();
+ props.put(m_key, m_value);
+ m_conf.update(props);
+ }
+ catch (IOException e) {
+ Assert.fail("Could not create configuration: " + e.getMessage());
+ }
+ }
+
+ public void update(String key, String val) {
+ Hashtable<String, Object> props = new Hashtable<>();
+ props.put(key, val);
+ try {
+ m_conf.update(props);
+ }
+ catch (IOException e) {
+ Assert.fail("Could not update configuration: " + e.getMessage());
+ }
+ }
+
+ public void stop() {
+ try
+ {
+ m_conf.delete();
+ }
+ catch (IOException e)
+ {
+ Assert.fail("Could not remove configuration: " + e.toString());
+ }
+ }
+}
+
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/dictionary/DictionaryAspectConfiguration.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/dictionary/DictionaryAspectConfiguration.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/dictionary/DictionaryAspectConfiguration.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/dictionary/DictionaryAspectConfiguration.java Mon Feb 6 14:37:49 2017
@@ -20,8 +20,8 @@ package org.apache.felix.dm.lambda.sampl
import java.util.List;
-import aQute.bnd.annotation.metatype.Meta.AD;
-import aQute.bnd.annotation.metatype.Meta.OCD;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
/**
* This interface describes the configuration for our DictionaryAspect component. We are using the bnd metatype
@@ -29,9 +29,11 @@ import aQute.bnd.annotation.metatype.Met
*
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
-@OCD(name="Spell Checker Dictionary Aspect",
- description = "Declare here the list of english words to be added into the default english dictionary")
+@ObjectClassDefinition(
+ name="Spell Checker Dictionary Aspect",
+ description = "Declare here the list of english words to be added into the default english dictionary",
+ pid="org.apache.felix.dm.lambda.samples.dictionary.DictionaryAspectConfiguration")
public interface DictionaryAspectConfiguration {
- @AD(description = "Dictionary aspect words")
+ @AttributeDefinition(description = "Dictionary aspect words")
List<String> words();
}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/dictionary/DictionaryConfiguration.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/dictionary/DictionaryConfiguration.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/dictionary/DictionaryConfiguration.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/dictionary/DictionaryConfiguration.java Mon Feb 6 14:37:49 2017
@@ -20,8 +20,8 @@ package org.apache.felix.dm.lambda.sampl
import java.util.List;
-import aQute.bnd.annotation.metatype.Meta.AD;
-import aQute.bnd.annotation.metatype.Meta.OCD;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
/**
* This interface describes the configuration for our DictionaryImpl component. We are using the bnd metatype
@@ -29,13 +29,13 @@ import aQute.bnd.annotation.metatype.Met
*
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
-@OCD(name="Spell Checker Dictionary",
- factory = true,
+@ObjectClassDefinition(name="Spell Checker Dictionary",
+ factoryPid = "org.apache.felix.dm.lambda.samples.dictionary.DictionaryConfiguration",
description = "Declare here some Dictionary instances, allowing to instantiates some DictionaryService services for a given dictionary language")
public interface DictionaryConfiguration {
- @AD(description = "Describes the dictionary language", deflt = "en")
+ @AttributeDefinition(description = "Describes the dictionary language", defaultValue = "en")
String lang();
- @AD(description = "Declare here the list of words supported by this dictionary.")
+ @AttributeDefinition(description = "Declare here the list of words supported by this dictionary.")
List<String> words();
}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ComponentBuilder.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ComponentBuilder.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ComponentBuilder.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ComponentBuilder.java Mon Feb 6 14:37:49 2017
@@ -26,6 +26,7 @@ import java.util.function.Supplier;
import java.util.stream.Stream;
import org.apache.felix.dm.Component;
+import org.apache.felix.dm.ComponentStateListener;
import org.apache.felix.dm.lambda.callbacks.InstanceCb;
import org.apache.felix.dm.lambda.callbacks.InstanceCbComponent;
@@ -761,6 +762,13 @@ public interface ComponentBuilder<B exte
* @return this builder
*/
B composition(Supplier<Object[]> getCompositionMethod);
+
+ /**
+ * Adds a component state listener to this component.
+ *
+ * @param listener the state listener
+ */
+ B listener(ComponentStateListener listener);
/**
* Builds the real DependencyManager Component.
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceCallbacksBuilder.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceCallbacksBuilder.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceCallbacksBuilder.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceCallbacksBuilder.java Mon Feb 6 14:37:49 2017
@@ -18,6 +18,10 @@
*/
package org.apache.felix.dm.lambda;
+import org.apache.felix.dm.lambda.callbacks.CbRef;
+import org.apache.felix.dm.lambda.callbacks.CbRefComponent;
+import org.apache.felix.dm.lambda.callbacks.CbRefRef;
+import org.apache.felix.dm.lambda.callbacks.CbRefRefComponent;
import org.apache.felix.dm.lambda.callbacks.CbRefServiceRefService;
import org.apache.felix.dm.lambda.callbacks.CbRefServiceRefServiceComponent;
import org.apache.felix.dm.lambda.callbacks.CbService;
@@ -28,6 +32,10 @@ import org.apache.felix.dm.lambda.callba
import org.apache.felix.dm.lambda.callbacks.CbServiceRef;
import org.apache.felix.dm.lambda.callbacks.CbServiceService;
import org.apache.felix.dm.lambda.callbacks.CbServiceServiceComponent;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbRef;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbRefComponent;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbRefRef;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbRefRefComponent;
import org.apache.felix.dm.lambda.callbacks.InstanceCbRefServiceRefService;
import org.apache.felix.dm.lambda.callbacks.InstanceCbRefServiceRefServiceComponent;
import org.apache.felix.dm.lambda.callbacks.InstanceCbService;
@@ -38,6 +46,7 @@ import org.apache.felix.dm.lambda.callba
import org.apache.felix.dm.lambda.callbacks.InstanceCbServiceRef;
import org.apache.felix.dm.lambda.callbacks.InstanceCbServiceService;
import org.apache.felix.dm.lambda.callbacks.InstanceCbServiceServiceComponent;
+import org.osgi.annotation.versioning.ProviderType;
/**
* Builds a service dependency callback.
@@ -72,8 +81,12 @@ import org.apache.felix.dm.lambda.callba
* method(S service, Dictionary<String, Object> serviceProperties)
* method(S service, Component serviceComponent)
* method(S service, Component serviceComponent, ServiceReference<S> serviceRef)
+ * method(ServiceReference<S> service)
+ * method(ServiceReference<S> service, Component serviceComponent)
* swapMethod(S oldService, S newService)
+ * swapMethod(ServiceReference<> oldRef, ServiceReference<S> newRef)
* swapMethod(S oldService, S newService, Component component))
+ * swapMethod(ServiceReference<> oldRef, ServiceReference<S> newRef, Component component)
* swapMethod(ServiceReference<S> oldRef, S old, ServiceReference<S> newRef, S newService)
* swapMethod(ServiceReference<S> oldRef, S old, ServiceReference<S> newRef, S newService, Component component)
* }</pre>
@@ -112,6 +125,7 @@ import org.apache.felix.dm.lambda.callba
*
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
+@ProviderType
public interface ServiceCallbacksBuilder<S, B extends ServiceCallbacksBuilder<S, B>> {
/**
@@ -391,6 +405,66 @@ public interface ServiceCallbacksBuilder
<T> B remove(CbServiceComponentRef<T, S> remove);
/**
+ * Sets a <code>component callback(ServiceReference ref)</code> method reference. The callback is invoked when a service is added.
+ * The method reference must point to a Component implementation class method.
+ *
+ * @param <T> the type of the component implementation class on which the callback is invoked.
+ * @param add the method reference invoked when a service is added.
+ * @return this builder
+ */
+ <T> B add(CbRef<T, S> add);
+
+ /**
+ * Sets a <code>component callback(ServiceReference)</code> method reference. The callback is invoked when a service is changed.
+ * The method reference must point to a Component implementation class method.
+ *
+ * @param <T> the type of the component implementation class on which the callback is invoked.
+ * @param change the method reference invoked when a service is changed.
+ * @return this builder
+ */
+ <T> B change(CbRef<T, S> change);
+
+ /**
+ * Sets a <code>component callback(ServiceReference)</code> method reference. The callback is invoked when a service is removed.
+ * The method reference must point to a Component implementation class method.
+ *
+ * @param <T> the type of the component implementation class on which the callback is invoked.
+ * @param remove the method reference invoked when a service is removed.
+ * @return this builder
+ */
+ <T> B remove(CbRef<T, S> remove);
+
+ /**
+ * Sets a <code>component callback(ServiceReference ref, Component comp)</code> method reference. The callback is invoked when a service is added.
+ * The method reference must point to a Component implementation class method.
+ *
+ * @param <T> the type of the component implementation class on which the callback is invoked.
+ * @param add the method reference invoked when a service is added.
+ * @return this builder
+ */
+ <T> B add(CbRefComponent<T, S> add);
+
+ /**
+ * Sets a <code>component callback(ServiceReference, Component comp)</code> method reference. The callback is invoked when a service is changed.
+ * The method reference must point to a Component implementation class method.
+ *
+ * @param <T> the type of the component implementation class on which the callback is invoked.
+ * @param change the method reference invoked when a service is changed.
+ * @return this builder
+ */
+ <T> B change(CbRefComponent<T, S> change);
+
+ /**
+ * Sets a <code>component callback(ServiceReference, Component comp)</code> method reference. The callback is invoked when a service is removed.
+ * The method reference must point to a Component implementation class method.
+ *
+ * @param <T> the type of the component implementation class on which the callback is invoked.
+ * @param remove the method reference invoked when a service is removed.
+ * @return this builder
+ */
+ <T> B remove(CbRefComponent<T, S> remove);
+
+ /**
* Sets an <code>Object instance callback(Service)</code> method reference. The callback is invoked when a service is added.
* The method reference must point to a method from an Object instance.
*
@@ -499,6 +573,33 @@ public interface ServiceCallbacksBuilder
B remove(InstanceCbServiceRef<S> remove);
/**
+ * Sets an <code>Object instance callback(ServiceReference)</code> method reference. The callback is invoked when a service is added.
+ * The method reference must point to a method from an Object instance.
+ *
+ * @param add the method reference invoked when a service is added.
+ * @return this builder
+ */
+ B add(InstanceCbRef<S> add);
+
+ /**
+ * Sets an <code>Object instance callback(ServiceReference)</code> method reference. The callback is invoked when a service is changed.
+ * The method reference must point to method from an Object instance.
+ *
+ * @param change the method reference invoked when a service is changed.
+ * @return this builder
+ */
+ B change(InstanceCbRef<S> change);
+
+ /**
+ * Sets an <code>Object instance callback(ServiceReference)</code> method reference. The callback is invoked when a service is removed.
+ * The method reference must point to method from an Object instance.
+ *
+ * @param remove the method reference invoked when a service is removed.
+ * @return this builder
+ */
+ B remove(InstanceCbRef<S> remove);
+
+ /**
* Sets an <code>Object instance callback(Service, Component)</code> method reference. The callback is when a service is added.
* The method reference must point to a method from an Object instance.
*
@@ -553,6 +654,33 @@ public interface ServiceCallbacksBuilder
B remove(InstanceCbServiceComponentRef<S> remove);
/**
+ * Sets an <code>Object instance callback(ServiceReference, Component)</code> method reference. The callback is invoked when a service is added.
+ * The method reference must point to a method from an Object instance.
+ *
+ * @param add the method reference invoked when a service is added.
+ * @return this builder
+ */
+ B add(InstanceCbRefComponent<S> add);
+
+ /**
+ * Sets an <code>Object instance callback(ServiceReference, Component)</code> method reference. The callback is invoked when a service is changed.
+ * The method reference must point to method from an Object instance.
+ *
+ * @param change the method reference invoked when a service is changed.
+ * @return this builder
+ */
+ B change(InstanceCbRefComponent<S> change);
+
+ /**
+ * Sets an <code>Object instance callback(ServiceReference, Component)</code> method reference. The callback is invoked when a service is removed.
+ * The method reference must point to method from an Object instance.
+ *
+ * @param remove the method reference invoked when a service is removed.
+ * @return this builder
+ */
+ B remove(InstanceCbRefComponent<S> remove);
+
+ /**
* Sets a swap <code>component callback(Service, Service)</code> method reference. The callback is invoked when a service is swapped.
* The method reference must point to a Component implementation class method.
*
@@ -563,7 +691,17 @@ public interface ServiceCallbacksBuilder
<T> B swap(CbServiceService<T, S> swap);
/**
- * Sets a wap <code>component callback(Service, Service, Component)</code> method reference. The callback is invoked when a service is swapped.
+ * Sets a swap <code>component callback(Service, Service)</code> method reference. The callback is invoked when a service is swapped.
+ * The method reference must point to a Component implementation class method.
+ *
+ * @param <T> the type of the component implementation class on which the callback is invoked.
+ * @param swap the method reference invoked when the service is swapped.
+ * @return this builder
+ */
+ <T> B swap(CbRefRef<T, S> swap);
+
+ /**
+ * Sets a swap <code>component callback(Service, Service, Component)</code> method reference. The callback is invoked when a service is swapped.
* The method reference must point to a Component implementation class method.
*
* @param <T> the type of the component implementation class on which the callback is invoked.
@@ -573,6 +711,16 @@ public interface ServiceCallbacksBuilder
<T> B swap(CbServiceServiceComponent<T, S> swap);
/**
+ * Sets a swap <code>component callback(ServiceRefere, ServiceReference, Component)</code> method reference. The callback is invoked when a service is swapped.
+ * The method reference must point to a Component implementation class method.
+ *
+ * @param <T> the type of the component implementation class on which the callback is invoked.
+ * @param swap the method reference invoked when the service is swapped.
+ * @return this builder
+ */
+ <T> B swap(CbRefRefComponent<T, S> swap);
+
+ /**
* Sets a swap <code>component callback(ServiceReference, Service, ServiceReference, Service)</code> method reference. The callback is invoked when a service is swapped.
* The method reference must point to a Component implementation class method.
* the new service.
@@ -604,6 +752,24 @@ public interface ServiceCallbacksBuilder
B swap(InstanceCbServiceService<S> swap);
/**
+ * Sets a swap <code>instance callback(ServiceReference, ServiceReference)</code> method reference. The callback is invoked when a service is swapped.
+ * The method reference must point to a method from an Object instance.
+ *
+ * @param swap the method reference invoked when the service is swapped.
+ * @return this builder
+ */
+ B swap(InstanceCbRefRef<S> swap);
+
+ /**
+ * Sets a swap <code>instance callback(ServiceReference, ServiceReference, Component)</code> method reference. The callback is invoked when a service is swapped.
+ * The method reference must point to a method from an Object instance.
+ *
+ * @param swap the method reference invoked when the service is swapped.
+ * @return this builder
+ */
+ B swap(InstanceCbRefRefComponent<S> swap);
+
+ /**
* Sets a swap <code>instance callback(Service, Service, Component)</code> method reference. The callback is invoked when a service is swapped.
* The method reference must point to a method from an Object instance.
*
@@ -629,4 +795,15 @@ public interface ServiceCallbacksBuilder
* @return this builder
*/
B swap(InstanceCbRefServiceRefServiceComponent<S> swap);
+
+ /**
+ * Configures whether or not this dependency should internally obtain the service object for all tracked service references.
+ *
+ * By default, DM internally dereferences all discovered service references (using
+ * <code>BundleContext.getService(ServiceReference ref)</code> methods.
+ * However, sometimes, your callback only needs the ServiceReference, and sometimes you don't want to dereference the service.
+ * So, in this case you can use the <code>dereference(false)</code> method in order to tell to DM
+ * that it should never internally dereference the service dependency internally.
+ */
+ B dereference(boolean obtainServiceBeforeInjection);
}
Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRef.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRef.java?rev=1781908&view=auto
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRef.java (added)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRef.java Mon Feb 6 14:37:49 2017
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a callback(ServiceReference) that is invoked on a Component implementation class.
+ * The type of the class on which the callback is invoked on is represented by the T generic parameter.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface CbRef<T, S> extends SerializableLambda {
+ /**
+ * Handles the given arguments.
+ * @param instance the Component implementation instance on which the callback is invoked on.
+ * @param ref a Service Reference
+ */
+ void accept(T instance, ServiceReference<S> ref);
+
+ default CbRef<T, S> andThen(CbRef<? super T, S> after) {
+ Objects.requireNonNull(after);
+ return (T instance, ServiceReference<S> ref) -> {
+ accept(instance, ref);
+ after.accept(instance, ref);
+ };
+ }
+}
Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefComponent.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefComponent.java?rev=1781908&view=auto
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefComponent.java (added)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefComponent.java Mon Feb 6 14:37:49 2017
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a callback(ServiceReference, Component) that is invoked on a Component implementation class.
+ * The type of the class on which the callback is invoked on is represented by the T generic parameter.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface CbRefComponent<T, S> extends SerializableLambda {
+ /**
+ * Handles the given arguments.
+ * @param instance the Component implementation instance on which the callback is invoked on.
+ * @param ref a Service Reference
+ * @param comp a Component
+ */
+ void accept(T instance, ServiceReference<S> ref, Component comp);
+
+ default CbRefComponent<T, S> andThen(CbRefComponent<? super T, S> after) {
+ Objects.requireNonNull(after);
+ return (T instance, ServiceReference<S> ref, Component comp) -> {
+ accept(instance, ref, comp);
+ after.accept(instance, ref, comp);
+ };
+ }
+}
Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefRef.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefRef.java?rev=1781908&view=auto
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefRef.java (added)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefRef.java Mon Feb 6 14:37:49 2017
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a callback(ServiceReference, ServiceReference) that is invoked on a Component implementation class.
+ * The type of the class on which the callback is invoked on is represented by the T generic parameter.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface CbRefRef<T, S> extends SerializableLambda {
+ /**
+ * Handles the given arguments.
+ * @param instance the Component implementation instance on which the callback is invoked on.
+ * @param ref1 first callback arg
+ * @param ref2 second callback arg
+ */
+ void accept(T instance, ServiceReference<S> ref1, ServiceReference<S> ref2);
+
+ default CbRefRef<T, S> andThen(CbRefRef<? super T, S> after) {
+ Objects.requireNonNull(after);
+ return (T instance, ServiceReference<S> ref1, ServiceReference<S> ref2) -> {
+ accept(instance, ref1, ref2);
+ after.accept(instance, ref1, ref2);
+ };
+ }
+}
Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefRefComponent.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefRefComponent.java?rev=1781908&view=auto
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefRefComponent.java (added)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefRefComponent.java Mon Feb 6 14:37:49 2017
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a callback(ServiceReference, ServiceReference, Component) that is invoked on a Component implementation class.
+ * The type of the class on which the callback is invoked on is represented by the T generic parameter.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface CbRefRefComponent<T, S> extends SerializableLambda {
+ /**
+ * Handles the given arguments.
+ * @param instance the Component implementation instance on which the callback is invoked on.
+ * @param ref1 a Service Reference
+ * @param ref2 a Service Reference
+ * @param comp a Component
+ */
+ void accept(T instance, ServiceReference<S> ref1, ServiceReference<S> ref2, Component comp);
+
+ default CbRefRefComponent<T, S> andThen(CbRefRefComponent<? super T, S> after) {
+ Objects.requireNonNull(after);
+ return (T instance, ServiceReference<S> ref1, ServiceReference<S> ref2, Component comp) -> {
+ accept(instance, ref1, ref2, comp);
+ after.accept(instance, ref1, ref2, comp);
+ };
+ }
+}
Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRef.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRef.java?rev=1781908&view=auto
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRef.java (added)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRef.java Mon Feb 6 14:37:49 2017
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a callback(ServiceReference) on an Object instance.
+ *
+ * <p> The type of the service passed in argument to the callback is defined by the "S" generic parameter.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbRef<S> {
+ /**
+ * Handles the given arguments.
+ * @param ref a Service Reference
+ * @param service a Service
+ */
+ void accept(ServiceReference<S> ref);
+
+ default InstanceCbRef<S> andThen(InstanceCbRef<S> after) {
+ Objects.requireNonNull(after);
+ return (ServiceReference<S> ref) -> {
+ accept(ref);
+ after.accept(ref);
+ };
+ }
+}
Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefComponent.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefComponent.java?rev=1781908&view=auto
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefComponent.java (added)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefComponent.java Mon Feb 6 14:37:49 2017
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a callback(ServiceReference, Component) on an Object instance.
+ *
+ * <p> The type of the service passed in argument to the callback is defined by the "S" generic parameter.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbRefComponent<S> {
+ /**
+ * Handles the given arguments.
+ * @param ref a Service Reference
+ * @param comp a Component
+ */
+ void accept(ServiceReference<S> ref, Component comp);
+
+ default InstanceCbRefComponent<S> andThen(InstanceCbRefComponent<S> after) {
+ Objects.requireNonNull(after);
+ return (ServiceReference<S> ref, Component comp) -> {
+ accept(ref, comp);
+ after.accept(ref, comp);
+ };
+ }
+}
Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefRef.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefRef.java?rev=1781908&view=auto
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefRef.java (added)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefRef.java Mon Feb 6 14:37:49 2017
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a swap callback(ServiceReference, ServiceReference) on an Object instance.
+ *
+ * <p> The type of the service passed in argument to the callback is defined by the "S" generic parameter.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbRefRef<S> extends SerializableLambda {
+ /**
+ * Handles the given argument
+ * @param ref1 a Service Reference
+ * @param ref2 a Service Reference
+ */
+ void accept(ServiceReference<S> ref1, ServiceReference<S> ref2);
+
+ default InstanceCbRefRef<S> andThen(InstanceCbRefRef<S> after) {
+ Objects.requireNonNull(after);
+ return (ServiceReference<S> ref1, ServiceReference<S> ref2) -> {
+ accept(ref1, ref2);
+ after.accept(ref1, ref2);
+ };
+ }
+}
Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefRefComponent.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefRefComponent.java?rev=1781908&view=auto
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefRefComponent.java (added)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefRefComponent.java Mon Feb 6 14:37:49 2017
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a callback(ServiceReference, ServiceReference, Component) on an Object instance.
+ *
+ * <p> The type of the service passed in argument to the callback is defined by the "S" generic parameter.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbRefRefComponent<S> {
+ /**
+ * Handles the given arguments.
+ * @param ref1 first service reference
+ * @param ref2 second service reference
+ * @param comp a Component
+ */
+ void accept(ServiceReference<S> ref1, ServiceReference<S> ref2, Component comp);
+
+ default InstanceCbRefRefComponent<S> andThen(InstanceCbRefRefComponent<S> after) {
+ Objects.requireNonNull(after);
+ return (ServiceReference<S> ref1, ServiceReference<S> ref2, Component comp) -> {
+ accept(ref1, ref2, comp);
+ after.accept(ref1, ref2, comp);
+ };
+ }
+}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/packageinfo
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/packageinfo?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/packageinfo (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/packageinfo Mon Feb 6 14:37:49 2017
@@ -1 +1 @@
-version 1.0.0
+version 1.1.0
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/AdapterBase.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/AdapterBase.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/AdapterBase.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/AdapterBase.java Mon Feb 6 14:37:49 2017
@@ -24,6 +24,7 @@ import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
+import org.apache.felix.dm.ComponentStateListener;
import org.apache.felix.dm.lambda.BundleDependencyBuilder;
import org.apache.felix.dm.lambda.ComponentBuilder;
import org.apache.felix.dm.lambda.ConfigurationDependencyBuilder;
@@ -302,4 +303,9 @@ public interface AdapterBase<B extends C
andThenBuild(compBuilder -> compBuilder.composition(getCompositionMethod));
return (B) this;
}
+
+ default B listener(ComponentStateListener listener) {
+ andThenBuild(compBuilder -> compBuilder.listener(listener));
+ return (B) this;
+ }
}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/BundleAdapterBuilderImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/BundleAdapterBuilderImpl.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/BundleAdapterBuilderImpl.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/BundleAdapterBuilderImpl.java Mon Feb 6 14:37:49 2017
@@ -40,9 +40,6 @@ public class BundleAdapterBuilderImpl im
protected final Map<Cb, List<MethodRef<Object>>> m_refs = new HashMap<>();
private DependencyManager m_dm;
private boolean m_autoAdd;
- private String m_added;
- private String m_changed;
- private String m_removed;
private String m_filter;
private int m_stateMask = -1;
private boolean m_propagate;
@@ -282,7 +279,7 @@ public class BundleAdapterBuilderImpl im
}
private void checkHasNoReflectionCallbacks() {
- if (m_added != null || m_changed != null || m_removed != null) {
+ if (m_add != null || m_change != null || m_remove != null) {
throw new IllegalStateException("Can't mix method references with reflection based callbacks");
}
}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ComponentBuilderImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ComponentBuilderImpl.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ComponentBuilderImpl.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ComponentBuilderImpl.java Mon Feb 6 14:37:49 2017
@@ -38,6 +38,7 @@ import java.util.function.Supplier;
import java.util.stream.Stream;
import org.apache.felix.dm.Component;
+import org.apache.felix.dm.ComponentStateListener;
import org.apache.felix.dm.Dependency;
import org.apache.felix.dm.DependencyManager;
import org.apache.felix.dm.context.ComponentContext;
@@ -74,7 +75,8 @@ public class ComponentBuilderImpl implem
private Object m_initCallbackInstance;
private Object m_startCallbackInstance;
private Object m_stopCallbackInstance;
- private Object m_destroyCallbackInstance;
+ private Object m_destroyCallbackInstance;
+ private final List<ComponentStateListener> m_listeners = new ArrayList<>();
enum ComponentCallback { INIT, START, STOP, DESTROY };
@@ -546,6 +548,11 @@ public class ComponentBuilderImpl implem
m_destroyCallbackInstance = null;
return this;
}
+
+ public ComponentBuilderImpl listener(ComponentStateListener listener) {
+ m_listeners.add(listener);
+ return this;
+ }
public Component build() {
if (m_serviceNames != null) {
@@ -555,7 +562,9 @@ public class ComponentBuilderImpl implem
if (m_properties != null) {
m_component.setServiceProperties(m_properties);
}
-
+
+ m_listeners.stream().forEach(m_component::add);
+
if (! m_componentUpdated) { // Don't override impl or set callbacks if component is being updated
if (m_impl != null) {
m_component.setImplementation(m_impl);
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ServiceCallbacksBuilderImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ServiceCallbacksBuilderImpl.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ServiceCallbacksBuilderImpl.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ServiceCallbacksBuilderImpl.java Mon Feb 6 14:37:49 2017
@@ -26,6 +26,10 @@ import java.util.stream.Stream;
import org.apache.felix.dm.Component;
import org.apache.felix.dm.lambda.ServiceCallbacksBuilder;
+import org.apache.felix.dm.lambda.callbacks.CbRef;
+import org.apache.felix.dm.lambda.callbacks.CbRefComponent;
+import org.apache.felix.dm.lambda.callbacks.CbRefRef;
+import org.apache.felix.dm.lambda.callbacks.CbRefRefComponent;
import org.apache.felix.dm.lambda.callbacks.CbRefServiceRefService;
import org.apache.felix.dm.lambda.callbacks.CbRefServiceRefServiceComponent;
import org.apache.felix.dm.lambda.callbacks.CbService;
@@ -36,6 +40,10 @@ import org.apache.felix.dm.lambda.callba
import org.apache.felix.dm.lambda.callbacks.CbServiceRef;
import org.apache.felix.dm.lambda.callbacks.CbServiceService;
import org.apache.felix.dm.lambda.callbacks.CbServiceServiceComponent;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbRef;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbRefComponent;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbRefRef;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbRefRefComponent;
import org.apache.felix.dm.lambda.callbacks.InstanceCbRefServiceRefService;
import org.apache.felix.dm.lambda.callbacks.InstanceCbRefServiceRefServiceComponent;
import org.apache.felix.dm.lambda.callbacks.InstanceCbService;
@@ -83,6 +91,11 @@ public class ServiceCallbacksBuilderImpl
protected final List<SwapMethodRef<?, S>> m_swapRefs = new ArrayList<>();
/**
+ * Indicates if the service must always be internally deference by dependency manager.
+ */
+ protected boolean m_dereferenceServiceInternally = true;
+
+ /**
* This interface (lambda) is called when we want to invoke a method reference. the lambda is called with all necessary service dependency
* informations.
*
@@ -148,7 +161,13 @@ public class ServiceCallbacksBuilderImpl
public B swap(String swap) {
return callbacks(null, null, null, swap);
- }
+ }
+
+ @Override
+ public B dereference(boolean dereferenceServiceInternally) {
+ m_dereferenceServiceInternally = dereferenceServiceInternally;
+ return (B) this;
+ }
private B callbacks(String added, String changed, String removed, String swapped) {
requiresNoMethodRefs();
@@ -336,6 +355,29 @@ public class ServiceCallbacksBuilderImpl
return (B) this;
}
+ public B add(InstanceCbRef<S> add) {
+ return callbacks(add, null, null);
+ }
+
+ public B change(InstanceCbRef<S> change) {
+ return callbacks(null, change, null);
+ }
+
+ public B remove(InstanceCbRef<S> remove) {
+ return callbacks(null, null, remove);
+ }
+
+ public B callbacks(InstanceCbRef<S> add, InstanceCbRef<S> change, InstanceCbRef<S> remove) {
+ if (add != null)
+ setInstanceCallbackRef(Cb.ADD, (inst, comp, ref, srv) -> add.accept(ref));
+ if (change != null)
+ setInstanceCallbackRef(Cb.CHG, (inst, comp, ref, srv) -> change.accept(ref));
+ if (remove != null)
+ setInstanceCallbackRef(Cb.REM, (inst, comp, ref, srv) -> remove.accept(ref));
+ m_dereferenceServiceInternally = false;
+ return (B) this;
+ }
+
public <T> B add(CbServiceComponent<T, S> add) {
return callbacks(add, null, null);
}
@@ -402,6 +444,51 @@ public class ServiceCallbacksBuilderImpl
return (B) this;
}
+ public <T> B add(CbRef<T, S> add) {
+ return callbacks(add, null, null);
+ }
+
+ public <T> B change(CbRef<T, S> change) {
+ return callbacks(null, change, null);
+ }
+
+ public <T> B remove(CbRef<T, S> remove) {
+ return callbacks(null, null, remove);
+ }
+
+ private <T> B callbacks(CbRef<T, S> add, CbRef<T, S> change, CbRef<T, S> remove) {
+ if (add != null)
+ setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, comp, ref, srv) -> add.accept((T) inst, ref));
+ if (change != null)
+ setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, comp, ref, srv) -> change.accept((T) inst, ref));
+ if (remove != null)
+ setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, comp, ref, srv) -> remove.accept((T) inst, ref));
+ m_dereferenceServiceInternally = false;
+ return (B) this;
+ }
+
+ public <T> B add(CbRefComponent<T, S> add) {
+ return callbacks(add, null, null);
+ }
+
+ public <T> B change(CbRefComponent<T, S> change) {
+ return callbacks(null, change, null);
+ }
+
+ public <T> B remove(CbRefComponent<T, S> remove) {
+ return callbacks(null, null, remove);
+ }
+
+ private <T> B callbacks(CbRefComponent<T, S> add, CbRefComponent<T, S> change, CbRefComponent<T, S> remove) {
+ if (add != null)
+ setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, comp, ref, srv) -> add.accept((T) inst, ref, comp));
+ if (change != null)
+ setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, comp, ref, srv) -> change.accept((T) inst, ref, comp));
+ if (remove != null)
+ setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, comp, ref, srv) -> remove.accept((T) inst, ref, comp));
+ return (B) this;
+ }
+
public B add(InstanceCbServiceComponentRef<S> add) {
return callbacks(add, null, null);
}
@@ -424,12 +511,42 @@ public class ServiceCallbacksBuilderImpl
return (B) this;
}
+ public B add(InstanceCbRefComponent<S> add) {
+ return callbacks(add, null, null);
+ }
+
+ public B change(InstanceCbRefComponent<S> change) {
+ return callbacks(null, change, null);
+ }
+
+ public B remove(InstanceCbRefComponent<S> remove) {
+ return callbacks(null, null, remove);
+ }
+
+ public B callbacks(InstanceCbRefComponent<S> add, InstanceCbRefComponent<S> change, InstanceCbRefComponent<S> remove) {
+ if (add != null)
+ setInstanceCallbackRef(Cb.ADD, (inst, comp, ref, srv) -> add.accept(ref, comp));
+ if (change != null)
+ setInstanceCallbackRef(Cb.CHG, (inst, comp, ref, srv) -> change.accept(ref, comp));
+ if (remove != null)
+ setInstanceCallbackRef(Cb.REM, (inst, comp, ref, srv) -> remove.accept(ref, comp));
+ m_dereferenceServiceInternally = false;
+ return (B) this;
+ }
+
public <T> B swap(CbServiceService<T, S> swap) {
Class<T> type = Helpers.getLambdaArgType(swap, 0);
return setComponentSwapCallbackRef(type, (inst, component, oref, oserv, nref, nserv) ->
swap.accept((T) inst, oserv, nserv));
}
+ public <T> B swap(CbRefRef<T, S> swap) {
+ Class<T> type = Helpers.getLambdaArgType(swap, 0);
+ m_dereferenceServiceInternally = false;
+ return setComponentSwapCallbackRef(type, (inst, component, oref, oserv, nref, nserv) ->
+ swap.accept((T) inst, oref, nref));
+ }
+
@Override
public <T> B swap(CbServiceServiceComponent<T, S> swap) {
Class<T> type = Helpers.getLambdaArgType(swap, 0);
@@ -437,6 +554,14 @@ public class ServiceCallbacksBuilderImpl
swap.accept((T) inst, oserv, nserv, component));
}
+ @Override
+ public <T> B swap(CbRefRefComponent<T, S> swap) {
+ Class<T> type = Helpers.getLambdaArgType(swap, 0);
+ m_dereferenceServiceInternally = false;
+ return setComponentSwapCallbackRef(type, (inst, component, oref, oserv, nref, nserv) ->
+ swap.accept((T) inst, oref, nref, component));
+ }
+
public <T> B swap(CbRefServiceRefService<T, S> swap) {
Class<T> type = Helpers.getLambdaArgType(swap, 0);
return setComponentSwapCallbackRef(type, (inst, component, oref, oserv, nref, nserv) ->
@@ -453,10 +578,20 @@ public class ServiceCallbacksBuilderImpl
return setInstanceSwapCallbackRef((inst, component, oref, oserv, nref, nserv) -> swap.accept(oserv, nserv));
}
+ public B swap(InstanceCbRefRef<S> swap) {
+ m_dereferenceServiceInternally = false;
+ return setInstanceSwapCallbackRef((inst, component, oref, oserv, nref, nserv) -> swap.accept(oref, nref));
+ }
+
public B swap(InstanceCbServiceServiceComponent<S> swap) {
return setInstanceSwapCallbackRef((inst, component, oref, oserv, nref, nserv) -> swap.accept(oserv, nserv, component));
}
+ public B swap(InstanceCbRefRefComponent<S> swap) {
+ m_dereferenceServiceInternally = false;
+ return setInstanceSwapCallbackRef((inst, component, oref, oserv, nref, nserv) -> swap.accept(oref, nref, component));
+ }
+
public B swap(InstanceCbRefServiceRefService<S> swap) {
return setInstanceSwapCallbackRef((inst, component, oref, oserv, nref, nserv) -> swap.accept(oref, oserv, nref, nserv));
}
@@ -512,27 +647,43 @@ public class ServiceCallbacksBuilderImpl
}
Object createCallbackInstance() {
- Object cb = null;
-
- cb = new Object() {
- void add(Component c, ServiceReference<S> ref, Object service) {
- invokeMethodRefs(Cb.ADD, c, ref, (S) service);
- }
-
- void change(Component c, ServiceReference<S> ref, Object service) {
- invokeMethodRefs(Cb.CHG, c, ref, (S) service);
- }
-
- void remove(Component c, ServiceReference<S> ref, Object service) {
- invokeMethodRefs(Cb.REM, c, ref, (S) service);
- }
-
- void swap(Component c, ServiceReference<S> oldRef, Object oldSrv, ServiceReference<S> newRef, Object newSrv) {
- invokeSwapMethodRefs(c, oldRef, (S) oldSrv, newRef, (S) newSrv);
- }
- };
-
- return cb;
+ if (m_dereferenceServiceInternally) {
+ return new Object() {
+ void add(Component c, ServiceReference<S> ref, Object service) {
+ invokeMethodRefs(Cb.ADD, c, ref, (S) service);
+ }
+
+ void change(Component c, ServiceReference<S> ref, Object service) {
+ invokeMethodRefs(Cb.CHG, c, ref, (S) service);
+ }
+
+ void remove(Component c, ServiceReference<S> ref, Object service) {
+ invokeMethodRefs(Cb.REM, c, ref, (S) service);
+ }
+
+ void swap(Component c, ServiceReference<S> oldRef, Object oldSrv, ServiceReference<S> newRef, Object newSrv) {
+ invokeSwapMethodRefs(c, oldRef, (S) oldSrv, newRef, (S) newSrv);
+ }
+ };
+ } else {
+ return new Object() {
+ void add(Component c, ServiceReference<S> ref) {
+ invokeMethodRefs(Cb.ADD, c, ref, null);
+ }
+
+ void change(Component c, ServiceReference<S> ref) {
+ invokeMethodRefs(Cb.CHG, c, ref, null);
+ }
+
+ void remove(Component c, ServiceReference<S> ref) {
+ invokeMethodRefs(Cb.REM, c, ref, null);
+ }
+
+ void swap(Component c, ServiceReference<S> oldRef, ServiceReference<S> newRef) {
+ invokeSwapMethodRefs(c, oldRef, null, newRef, null);
+ }
+ };
+ }
}
boolean hasRefs() {
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ServiceDependencyBuilderImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ServiceDependencyBuilderImpl.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ServiceDependencyBuilderImpl.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/ServiceDependencyBuilderImpl.java Mon Feb 6 14:37:49 2017
@@ -169,6 +169,8 @@ public class ServiceDependencyBuilderImp
} else {
sd.setAutoConfig(m_autoConfig);
}
+
+ sd.setDereference(m_dereferenceServiceInternally); // false if the callback signature only contains service ref and/or component parameters.
return sd;
}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/bnd.bnd Mon Feb 6 14:37:49 2017
@@ -14,14 +14,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
--buildpath: \
- osgi.core;version=4.2,\
- osgi.cmpn;version=4.2,\
+-buildpath: \
${junit},\
org.apache.felix.dependencymanager.annotation;version=latest,\
org.apache.felix.dependencymanager;version=latest,\
org.apache.felix.dependencymanager.runtime;version=latest,\
- org.apache.felix.dependencymanager.itest.api;version=latest
+ org.apache.felix.dependencymanager.itest.api;version=latest,\
+ osgi.core;version=6.0,\
+ osgi.cmpn;version=6.0
-runbundles: \
org.apache.felix.configadmin;version=1.8.8,\
org.apache.felix.metatype;version=1.0.4,\
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/AspectAnnotation.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/AspectAnnotation.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/AspectAnnotation.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/AspectAnnotation.java Mon Feb 6 14:37:49 2017
@@ -33,6 +33,7 @@ import org.osgi.framework.ServiceRegistr
/**
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
+@SuppressWarnings("rawtypes")
public class AspectAnnotation {
public interface ServiceInterface {
public void invoke(Runnable run);
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/CompositeAnnotations.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/CompositeAnnotations.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/CompositeAnnotations.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/CompositeAnnotations.java Mon Feb 6 14:37:49 2017
@@ -36,6 +36,7 @@ import org.osgi.framework.ServiceRegistr
/**
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
+@SuppressWarnings("rawtypes")
public class CompositeAnnotations {
public interface C1Service {
}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/FELIX5337.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/FELIX5337.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/FELIX5337.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/FELIX5337.java Mon Feb 6 14:37:49 2017
@@ -106,7 +106,7 @@ public class FELIX5337 implements Framew
if (m_bctx.getBundle(0).getState() != Bundle.ACTIVE) {
m_bctx.addFrameworkListener(this);
} else {
- frameworkEvent(new FrameworkEvent(FrameworkEvent.STARTED, m_bctx.getBundle()));
+ frameworkEvent(new FrameworkEvent(FrameworkEvent.STARTED, m_bctx.getBundle(), null));
}
}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix4050.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix4050.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix4050.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix4050.java Mon Feb 6 14:37:49 2017
@@ -18,9 +18,10 @@
*/
package org.apache.felix.dm.runtime.itest.components;
+import java.util.Dictionary;
import java.util.HashMap;
+import java.util.Hashtable;
import java.util.Map;
-import java.util.Properties;
import org.apache.felix.dm.annotation.api.Component;
import org.apache.felix.dm.annotation.api.Destroy;
@@ -71,7 +72,7 @@ public class Felix4050 {
} catch (InterruptedException e) {
}
System.out.println("Registering B2");
- Properties props = new Properties();
+ Dictionary<String, Object> props = new Hashtable<>();
props.put("type", "b2");
_ctx.registerService(B.class.getName(), B2.this, props);
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix4357.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix4357.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix4357.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix4357.java Mon Feb 6 14:37:49 2017
@@ -65,13 +65,14 @@ import org.osgi.framework.ServiceRegistr
@Property(name="v28", value="65", type=Character.class)
@Property(name="v29", charValue=65)
@Property(name="v30", charValue={65, 66})
+@SuppressWarnings("rawtypes")
public class Felix4357 {
public final static String ENSURE = "Felix4357";
@ServiceDependency(filter = "(name=" + ENSURE + ")")
volatile Ensure m_ensure;
- @Registered
+ @Registered
void registered(ServiceRegistration sr) {
ServiceReference ref = sr.getReference();
assertEquals(m_ensure, ref, "v1", "s", 1);
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix5236.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix5236.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix5236.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Felix5236.java Mon Feb 6 14:37:49 2017
@@ -33,6 +33,7 @@ import org.osgi.framework.ServiceRegistr
*/
@Component(provides=Felix5236.class)
@Property(name="v1", value="s")
+@SuppressWarnings("rawtypes")
public class Felix5236 {
public final static String ENSURE = "Felix5236";
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/MethodSignatures.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/MethodSignatures.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/MethodSignatures.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/MethodSignatures.java Mon Feb 6 14:37:49 2017
@@ -38,6 +38,7 @@ import org.osgi.service.cm.Configuration
/**
* Tests various bind method signatures
*/
+@SuppressWarnings("rawtypes")
public class MethodSignatures {
// For Consumer service
public final static String ENSURE_SERVICE_DEPENDENCY = "MethodSignatures1";
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/OptionalConfiguration.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/OptionalConfiguration.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/OptionalConfiguration.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/OptionalConfiguration.java Mon Feb 6 14:37:49 2017
@@ -19,11 +19,11 @@
package org.apache.felix.dm.runtime.itest.components;
import java.io.IOException;
-import java.util.Properties;
+import java.util.Dictionary;
+import java.util.Hashtable;
import org.apache.felix.dm.annotation.api.Component;
import org.apache.felix.dm.annotation.api.ConfigurationDependency;
-import org.apache.felix.dm.annotation.api.Init;
import org.apache.felix.dm.annotation.api.ServiceDependency;
import org.apache.felix.dm.annotation.api.Start;
import org.apache.felix.dm.annotation.api.Stop;
@@ -99,7 +99,7 @@ public class OptionalConfiguration {
try {
Assert.assertNotNull(m_ca);
m_conf = m_ca.getConfiguration(PID, null);
- Properties props = new Properties();
+ Dictionary<String, Object> props = new Hashtable<>();
props.put("testkey", "testvalue");
m_conf.update(props);
}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ResourceAdapterServiceTestWithPublisher.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ResourceAdapterServiceTestWithPublisher.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ResourceAdapterServiceTestWithPublisher.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ResourceAdapterServiceTestWithPublisher.java Mon Feb 6 14:37:49 2017
@@ -40,6 +40,7 @@ import org.apache.felix.dm.itest.util.En
import org.osgi.framework.BundleContext;
import org.osgi.framework.Filter;
import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
/**
* Test a ResourceAdapterService which provides its interface using a @ServiceLifecycle.
@@ -119,7 +120,7 @@ public class ResourceAdapterServiceTestW
m_handlers.put(handler, filter);
}
for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
+ if (filter == null || filter.match((ServiceReference)ResourceUtil.createProperties(m_resources[i]))) {
handler.added(m_resources[i]);
}
}
@@ -139,7 +140,7 @@ public class ResourceAdapterServiceTestW
private void removeResources(ResourceHandler handler, Filter filter) {
for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
+ if (filter == null || filter.match((ServiceReference<?>)ResourceUtil.createProperties(m_resources[i]))) {
handler.removed(m_resources[i]);
}
}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ResourceAnnotation.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ResourceAnnotation.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ResourceAnnotation.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ResourceAnnotation.java Mon Feb 6 14:37:49 2017
@@ -19,12 +19,11 @@
package org.apache.felix.dm.runtime.itest.components;
import java.net.URL;
+import java.util.Dictionary;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
-import org.junit.Assert;
-
import org.apache.felix.dm.DependencyManager;
import org.apache.felix.dm.ResourceHandler;
import org.apache.felix.dm.ResourceUtil;
@@ -39,6 +38,7 @@ import org.apache.felix.dm.annotation.ap
import org.apache.felix.dm.annotation.api.Start;
import org.apache.felix.dm.annotation.api.Stop;
import org.apache.felix.dm.itest.util.Ensure;
+import org.junit.Assert;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Filter;
import org.osgi.framework.InvalidSyntaxException;
@@ -165,7 +165,7 @@ public class ResourceAnnotation {
m_handlers.put(handler, filter);
}
for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
+ if (filter == null || filter.match((Dictionary<String, ?>) ResourceUtil.createProperties(m_resources[i]))) {
System.out.println("ResourceProvider: calling handled.added(" + m_resources[i] + ")");
handler.added(m_resources[i], null);
}
@@ -186,9 +186,10 @@ public class ResourceAnnotation {
removeResources(handler, filter);
}
- private void removeResources(ResourceHandler handler, Filter filter) {
+ @SuppressWarnings("unchecked")
+ private void removeResources(ResourceHandler handler, Filter filter) {
for (int i = 0; i < m_resources.length; i++) {
- if (filter == null || filter.match(ResourceUtil.createProperties(m_resources[i]))) {
+ if (filter == null || filter.match((Dictionary<String, ?>) ResourceUtil.createProperties(m_resources[i]))) {
handler.removed(m_resources[i], null);
}
}
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/SimpleAnnotations.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/SimpleAnnotations.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/SimpleAnnotations.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/SimpleAnnotations.java Mon Feb 6 14:37:49 2017
@@ -37,6 +37,7 @@ import org.osgi.service.log.LogService;
/**
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
+@SuppressWarnings("rawtypes")
public class SimpleAnnotations {
/**
* Provides a <code>Runnable</code> service, which is required by the
Modified: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Utils.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Utils.java?rev=1781908&r1=1781907&r2=1781908&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Utils.java (original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/Utils.java Mon Feb 6 14:37:49 2017
@@ -25,6 +25,7 @@ import org.osgi.framework.ServiceReferen
/**
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
+@SuppressWarnings("rawtypes")
public class Utils {
public static final String DM_BSN = "org.apache.felix.dependencymanager";