Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefServiceRefServiceComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefServiceRefServiceComponent.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefServiceRefServiceComponent.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefServiceRefServiceComponent.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,34 @@
+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, Service, ServiceReference, Service, 
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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface CbRefServiceRefServiceComponent<T, S> extends 
SerializableLambda {
+    /**
+     * Handles the given arguments.
+     * @param instance the Component implementation instance on which the 
callback is invoked on. 
+     * @param oldRef first callback arg
+     * @param old second callback arg
+     * @param replaceRef third callback arg
+     * @param replace fourth callback arg
+     * @param c fifth callback arg
+     */
+    void accept(T instance, ServiceReference<S> oldRef, S old, 
ServiceReference<S> replaceRef, S replace, Component c);
+
+    default CbRefServiceRefServiceComponent<T, S> 
andThen(CbRefServiceRefServiceComponent<? super T, S> after) {
+        Objects.requireNonNull(after);
+        return (T instance, ServiceReference<S> oldRef, S old, 
ServiceReference<S> replaceRef, S replace, Component c) -> {
+            accept(instance, oldRef, old, replaceRef, replace, c);
+            after.accept(instance, oldRef, old, replaceRef, replace, c);
+        };
+    }
+}

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbService.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbService.java?rev=1731147&r1=1731146&r2=1731147&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbService.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbService.java
 Thu Feb 18 21:07:16 2016
@@ -3,23 +3,25 @@ package org.apache.felix.dm.lambda.callb
 import java.util.Objects;
 
 /**
- * Represents a callback(Service) on an Object instance.
+ * Represents a callback(Service) 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:[email protected]";>Felix Project Team</a>
  */
 @FunctionalInterface
-public interface CbService<S> {
+public interface CbService<T, S> extends SerializableLambda {
     /**
-     * Handles the given argument.
-     * @param service a Service
+     * Handles the given arguments.
+     * @param instance the Component implementation instance on which the 
callback is invoked on. 
+     * @param service the callback argument.
      */
-    void accept(S service);
+    void accept(T instance, S service);
 
-    default CbService<S> andThen(CbService<S> after) {
+    default CbFuture<T, S> andThen(CbFuture<? super T, S> after) {
         Objects.requireNonNull(after);
-        return (S service) -> {
-            accept(service);
-            after.accept(service);
+        return (T instance, S service) -> {
+            accept(instance, service);
+            after.accept(instance, service);
         };
     }
 }

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceComponent.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceComponent.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceComponent.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,30 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+
+/**
+ * Represents a callback(Service, 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface CbServiceComponent<T, S> extends SerializableLambda {
+    /**
+     * Handles the given arguments.
+     * @param instance the Component implementation instance on which the 
callback is invoked on. 
+     * @param service the first callback argument
+     * @param c the second callback argument
+     */
+    void accept(T instance, S service, Component c);
+
+    default CbServiceComponent<T, S> andThen(CbServiceComponent<T, S> after) {
+        Objects.requireNonNull(after);
+        return (T instance, S s, Component c) -> {
+            accept(instance, s, c);
+            after.accept(instance, s, c);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceComponentRef.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceComponentRef.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceComponentRef.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceComponentRef.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,32 @@
+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(Service, Component, 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface CbServiceComponentRef<T, S> extends SerializableLambda {
+    /**
+     * Handles the given arguments.
+     * @param instance the Component implementation instance on which the 
callback is invoked on. 
+     * @param service the first callback parameter
+     * @param c the second callback parameter
+     * @param ref the third callback parameter
+     */
+    void accept(T instance, S service, Component c, ServiceReference<S> ref);
+
+    default CbServiceComponentRef<T, S> andThen(CbServiceComponentRef<T, S> 
after) {
+        Objects.requireNonNull(after);
+        return (T instance, S service, Component c, ServiceReference<S> ref) 
-> {
+            accept(instance, service, c, ref);
+            after.accept(instance, service, c, ref);
+        };
+    }
+}

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceDict.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceDict.java?rev=1731147&r1=1731146&r2=1731147&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceDict.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceDict.java
 Thu Feb 18 21:07:16 2016
@@ -4,24 +4,26 @@ import java.util.Dictionary;
 import java.util.Objects;
 
 /**
- * Represents a callback(Service, Dictionary) on an Object instance.
+ * Represents a callback(Service, Dictionary) 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:[email protected]";>Felix Project Team</a>
  */
 @FunctionalInterface
-public interface CbServiceDict<S> {
+public interface CbServiceDict<T, S> extends SerializableLambda {
     /**
      * Handles the given arguments.
-     * @param service a Service
-     * @param properties a Dictionary
+     * @param instance the Component implementation instance on which the 
callback is invoked on. 
+     * @param service first callback arg
+     * @param properties second callback arg
      */
-    void accept(S service, Dictionary<String, Object> properties);
+    void accept(T instance, S service, Dictionary<String, Object> properties);
 
-    default CbServiceDict<S> andThen(CbServiceDict<S> after) {
+    default CbServiceDict<T, S> andThen(CbServiceDict<? super T, S> after) {
         Objects.requireNonNull(after);
-        return (S service, Dictionary<String, Object> properties) -> {
-            accept(service, properties);
-            after.accept(service, properties);
+        return (T instance, S service, Dictionary<String, Object> properties) 
-> {
+            accept(instance, service, properties);
+            after.accept(instance, service, properties);
         };
     }
 }

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceMap.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceMap.java?rev=1731147&r1=1731146&r2=1731147&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceMap.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceMap.java
 Thu Feb 18 21:07:16 2016
@@ -4,24 +4,26 @@ import java.util.Map;
 import java.util.Objects;
 
 /**
- * Represents a callback(Service, Map) on an Object instance.
+ * Represents a callback(Service, Map) 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:[email protected]";>Felix Project Team</a>
  */
 @FunctionalInterface
-public interface CbServiceMap<S> {
+public interface CbServiceMap<T, S> extends SerializableLambda {
     /**
      * Handles the given arguments.
-     * @param service a Service 
-     * @param properties a Map
+     * @param instance the Component implementation instance on which the 
callback is invoked on. 
+     * @param service first callback arg
+     * @param properties second callback arg
      */
-    void accept(S service, Map<String, Object> properties);
+    void accept(T instance, S service, Map<String, Object> properties);
 
-    default CbServiceMap<S> andThen(CbServiceMap<S> after) {
+    default CbServiceMap<T, S> andThen(CbServiceMap<? super T, S> after) {
         Objects.requireNonNull(after);
-        return (S service, Map<String, Object> properties) -> {
-            accept(service, properties);
-            after.accept(service, properties);
+        return (T instance, S service, Map<String, Object> properties) -> {
+            accept(instance, service, properties);
+            after.accept(instance, service, properties);
         };
     }
 }

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceRef.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceRef.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceRef.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceRef.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,30 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a callback(Service, 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface CbServiceRef<T, S> extends SerializableLambda {
+    /**
+     * Handles the given arguments.
+     * @param instance the Component implementation instance on which the 
callback is invoked on. 
+     * @param service first callback arg
+     * @param ref second callback arg
+     */
+    void accept(T instance, S service, ServiceReference<S> ref);
+
+    default CbServiceRef<T, S> andThen(CbServiceRef<? super T, S> after) {
+        Objects.requireNonNull(after);
+        return (T instance, S service, ServiceReference<S> ref) -> {
+            accept(instance, service, ref);
+            after.accept(instance, service, ref);
+        };
+    }
+}

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceService.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceService.java?rev=1731147&r1=1731146&r2=1731147&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceService.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceService.java
 Thu Feb 18 21:07:16 2016
@@ -3,24 +3,26 @@ package org.apache.felix.dm.lambda.callb
 import java.util.Objects;
 
 /**
- * Represents a callback(Service, Service) on an Object instance.
+ * Represents a swap callback(Service, Service) 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:[email protected]";>Felix Project Team</a>
  */
 @FunctionalInterface
-public interface CbServiceService<S> extends SerializableLambda {
+public interface CbServiceService<T, S> extends SerializableLambda {
     /**
-     * Handles the given argument
-     * @param old a Service
-     * @param replace a Service
+     * Handles the given arguments.
+     * @param instance the Component implementation instance on which the 
callback is invoked on. 
+     * @param old first callback arg
+     * @param replace second callback arg
      */
-    void accept(S old, S replace);
+    void accept(T instance, S old, S replace);
 
-    default CbServiceService<S> andThen(CbServiceService<S> after) {
+    default CbServiceService<T, S> andThen(CbServiceService<? super T, S> 
after) {
         Objects.requireNonNull(after);
-        return (S old, S replace) -> {
-            accept(old, replace);
-            after.accept(old, replace);
+        return (T instance, S old, S replace) -> {
+            accept(instance, old, replace);
+            after.accept(instance, old, replace);
         };
     }
 }

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceServiceComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceServiceComponent.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceServiceComponent.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceServiceComponent.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,31 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+
+/**
+ * Represents a swap callback(Service, Service, 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface CbServiceServiceComponent<T, S> extends SerializableLambda {
+    /**
+     * Handles the given arguments.
+     * @param instance the Component implementation instance on which the 
callback is invoked on. 
+     * @param old first callback arg
+     * @param replace second callback arg
+     * @param c third callback arg
+     */ 
+    void accept(T instance, S old, S replace, Component c);
+
+    default CbServiceServiceComponent<T, S> 
andThen(CbServiceServiceComponent<? super T, S> after) {
+        Objects.requireNonNull(after);
+        return (T instance, S old, S replace, Component c) -> {
+            accept(instance, old, replace, c);
+            after.accept(instance, old, replace, c);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCb.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCb.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCb.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCb.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,24 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+/**
+ * Represents a method reference to a no-args callback method from an 
arbitrary Object instance.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCb {
+    /**
+     * Implements the callback method.
+     */
+    void cb();
+
+    default InstanceCb andThen(InstanceCb after) {
+        Objects.requireNonNull(after);
+        return () -> {
+            cb();
+            after.cb();
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbBundle.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbBundle.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbBundle.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbBundle.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,27 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.osgi.framework.Bundle;
+
+/**
+ * Represents a callback(Bundle) on an Object instance.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbBundle extends SerializableLambda {
+    /**
+     * Handles the given argument.
+     * @param bundle the callback parameter
+     */
+    void accept(Bundle bundle);
+
+    default InstanceCbBundle andThen(InstanceCbBundle after) {
+        Objects.requireNonNull(after);
+        return (Bundle bundle) -> {
+            accept(bundle);
+            after.accept(bundle);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbBundleComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbBundleComponent.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbBundleComponent.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbBundleComponent.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,29 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+import org.osgi.framework.Bundle;
+
+/**
+ * Represents a callback(Bundle, Component) on an Object instance.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbBundleComponent {
+    /**
+     * Handles the given arguments.
+     * @param component the callback parameter
+     * @param bundle the callback parameter
+     */
+    void accept(Bundle bundle, Component component);
+
+    default InstanceCbBundleComponent andThen(InstanceCbBundleComponent after) 
{
+        Objects.requireNonNull(after);
+        return (Bundle bundle, Component component) -> {
+            accept(bundle, component);
+            after.accept(bundle, component);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbComponent.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbComponent.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbComponent.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,27 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+
+/**
+ * Represents a callback(Component)  on an Object instance.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbComponent {
+    /**
+     * Handles the given argument.
+     * @param component the callback parameter
+     */
+    void accept(Component component);
+
+    default InstanceCbComponent andThen(InstanceCbComponent after) {
+        Objects.requireNonNull(after);
+        return (Component component) -> {
+            accept(component);
+            after.accept(component);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfiguration.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfiguration.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfiguration.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfiguration.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,28 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+/**
+ * Represents a reference to a callback on an Object instance that takes 
Configuration type as argument.
+ * For more informations about configuration type, please refer to {@link 
CbConfiguration}.
+ * 
+ * <p> The T generic parameter represents the type of the configuration class 
passed to the callback argument. 
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbConfiguration<T> extends SerializableLambda {
+    /**
+     * Handles the given argument.
+     * @param configType the configuration type
+     */
+    void accept(T configType);
+
+    default InstanceCbConfiguration<T> andThen(InstanceCbConfiguration<T> 
after) {
+        Objects.requireNonNull(after);
+        return (T configProxy) -> {
+            accept(configProxy);
+            after.accept(configProxy);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfigurationComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfigurationComponent.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfigurationComponent.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbConfigurationComponent.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,32 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+
+/**
+ * Represents a callback(Configuration, 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.
+ * For more informations about configuration type, please refer to {@link 
CbConfiguration}.
+ * 
+ * <p> The T generic parameter represents the type of the configuration class 
passed to the callback argument. 
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbConfigurationComponent<T> extends 
SerializableLambda {
+    /**
+     * Handles the given arguments
+     * @param instance the Component implementation instance on which the 
callback is invoked on. 
+     * @param component the callback Component 
+     */
+    void accept(T instance, Component component);
+
+    default InstanceCbConfigurationComponent<T> 
andThen(InstanceCbConfigurationComponent<T> after) {
+        Objects.requireNonNull(after);
+        return (T instance, Component component) -> {
+            accept(instance, component);
+            after.accept(instance, component);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbDictionary.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbDictionary.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbDictionary.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbDictionary.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,26 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Dictionary;
+import java.util.Objects;
+
+/**
+ * Represents a callback(Dictionary) on an Object instance.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbDictionary {
+    /**
+     * Handles the given argument.
+     * @param conf the properties
+     */
+    void accept(Dictionary<String, Object> conf);
+
+    default InstanceCbDictionary andThen(InstanceCbDictionary after) {
+        Objects.requireNonNull(after);
+        return (Dictionary<String, Object> conf) -> {
+            accept(conf);
+            after.accept(conf);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbDictionaryComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbDictionaryComponent.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbDictionaryComponent.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbDictionaryComponent.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,29 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Dictionary;
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+
+/**
+ * Represents a callback(Dictionary, Component) on an Object instance.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbDictionaryComponent {
+    /**
+     * Handles the given arguments.
+     * @param properties some service properties
+     * @param component a Component
+     */
+    void accept(Dictionary<String, Object> properties, Component component);
+
+    default InstanceCbDictionaryComponent 
andThen(InstanceCbDictionaryComponent after) {
+        Objects.requireNonNull(after);
+        return (Dictionary<String, Object> properties, Component component) -> 
{
+            accept(properties, component);
+            after.accept(properties, component);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbFuture.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbFuture.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbFuture.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbFuture.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,25 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+/**
+ * Represents a callback that accepts the result of a CompletableFuture. The 
callback is invoked on an Object instance.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbFuture<F> {
+    /**
+     * Handles the result of a CompletableFuture operation.
+     * @param future the result of a CompletableFuture operation.
+     */
+    void accept(F future);
+
+    default InstanceCbFuture<F> andThen(InstanceCbFuture<? super F> after) {
+        Objects.requireNonNull(after);
+        return (F f) -> {
+            accept(f);
+            after.accept(f);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefServiceRefService.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefServiceRefService.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefServiceRefService.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefServiceRefService.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,30 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a swap callback(ServiceReference, Service, ServiceReference, 
Service) on an Object instance.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbRefServiceRefService<S> {
+    /**
+     * Handles the given arguments
+     * @param oldRef the old service reference
+     * @param old the old service
+     * @param replaceRef the replace service reference
+     * @param replace the replace service
+     */
+    void accept(ServiceReference<S> oldRef, S old, ServiceReference<S> 
replaceRef, S replace);
+
+    default InstanceCbRefServiceRefService<S> 
andThen(InstanceCbRefServiceRefService<S> after) {
+        Objects.requireNonNull(after);
+        return (ServiceReference<S> oldRef, S old, ServiceReference<S> 
replaceRef, S replace) -> {
+            accept(oldRef, old, replaceRef, replace);
+            after.accept(oldRef, old, replaceRef, replace);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefServiceRefServiceComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefServiceRefServiceComponent.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefServiceRefServiceComponent.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbRefServiceRefServiceComponent.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,32 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a swap callback(ServiceReference, Service, ServiceReference, 
Service, Component) on an Object instance.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbRefServiceRefServiceComponent<S> {
+    /**
+     * Handles the given arguments
+     * @param oldRef an old swapped service reference
+     * @param old an old swapped service
+     * @param replaceRef the new service reference
+     * @param replace the new service
+     * @param c a Component
+     */
+    void accept(ServiceReference<S> oldRef, S old, ServiceReference<S> 
replaceRef, S replace, Component c);
+
+    default InstanceCbRefServiceRefServiceComponent<S> 
andThen(InstanceCbRefServiceRefServiceComponent<S> after) {
+        Objects.requireNonNull(after);
+        return (ServiceReference<S> oldRef, S old, ServiceReference<S> 
replaceRef, S replace, Component c) -> {
+            accept(oldRef, old, replaceRef, replace, c);
+            after.accept(oldRef, old, replaceRef, replace, c);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbService.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbService.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbService.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbService.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,27 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+/**
+ * Represents a callback(Service) 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbService<S> {
+    /**
+     * Handles the given argument.
+     * @param service a Service
+     */
+    void accept(S service);
+
+    default InstanceCbService<S> andThen(InstanceCbService<S> after) {
+        Objects.requireNonNull(after);
+        return (S service) -> {
+            accept(service);
+            after.accept(service);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceComponent.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceComponent.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceComponent.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,30 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+
+/**
+ * Represents a callback(Service, 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbServiceComponent<S> {
+    /**
+     * Handles the given arguments
+     * @param c the component
+     * @param service the service
+     */
+    void accept(S service, Component c);
+
+    default InstanceCbServiceComponent<S> 
andThen(InstanceCbServiceComponent<S> after) {
+        Objects.requireNonNull(after);
+        return (S service, Component c) -> {
+            accept(service, c);
+            after.accept(service, c);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceComponentRef.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceComponentRef.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceComponentRef.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceComponentRef.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,32 @@
+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(Service, Component, 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbServiceComponentRef<S> {
+    /**
+     * Handles the given arguments.
+     * @param c a Component
+     * @param ref the service reference
+     * @param service the service
+     */
+    void accept(S service, Component c, ServiceReference<S> ref);
+
+    default InstanceCbServiceComponentRef<S> 
andThen(InstanceCbServiceComponentRef<S> after) {
+        Objects.requireNonNull(after);
+        return (S service, Component c, ServiceReference<S> ref) -> {
+            accept(service, c, ref);
+            after.accept(service, c, ref);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceDict.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceDict.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceDict.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceDict.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,29 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Dictionary;
+import java.util.Objects;
+
+/**
+ * Represents a callback(Service, Dictionary) 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbServiceDict<S> {
+    /**
+     * Handles the given arguments.
+     * @param service a Service
+     * @param properties a Dictionary
+     */
+    void accept(S service, Dictionary<String, Object> properties);
+
+    default InstanceCbServiceDict<S> andThen(InstanceCbServiceDict<S> after) {
+        Objects.requireNonNull(after);
+        return (S service, Dictionary<String, Object> properties) -> {
+            accept(service, properties);
+            after.accept(service, properties);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceMap.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceMap.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceMap.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceMap.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,29 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * Represents a callback(Service, Map) 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbServiceMap<S> {
+    /**
+     * Handles the given arguments.
+     * @param service a Service 
+     * @param properties a Map
+     */
+    void accept(S service, Map<String, Object> properties);
+
+    default InstanceCbServiceMap<S> andThen(InstanceCbServiceMap<S> after) {
+        Objects.requireNonNull(after);
+        return (S service, Map<String, Object> properties) -> {
+            accept(service, properties);
+            after.accept(service, properties);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceRef.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceRef.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceRef.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceRef.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,30 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Represents a callback(Service, 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbServiceRef<S> {
+    /**
+     * Handles the given arguments.
+     * @param ref a Service Reference
+     * @param service a Service
+     */
+    void accept(S service, ServiceReference<S> ref);
+
+    default InstanceCbServiceRef<S> andThen(InstanceCbServiceRef<S> after) {
+        Objects.requireNonNull(after);
+        return (S service, ServiceReference<S> ref) -> {
+            accept(service, ref);
+            after.accept(service, ref);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceService.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceService.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceService.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceService.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,28 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+/**
+ * Represents a swap callback(Service, Service) 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbServiceService<S> extends SerializableLambda {
+    /**
+     * Handles the given argument
+     * @param old a Service
+     * @param replace a Service
+     */
+    void accept(S old, S replace);
+
+    default InstanceCbServiceService<S> andThen(InstanceCbServiceService<S> 
after) {
+        Objects.requireNonNull(after);
+        return (S old, S replace) -> {
+            accept(old, replace);
+            after.accept(old, replace);
+        };
+    }
+}

Added: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceServiceComponent.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceServiceComponent.java?rev=1731147&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceServiceComponent.java
 (added)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/InstanceCbServiceServiceComponent.java
 Thu Feb 18 21:07:16 2016
@@ -0,0 +1,31 @@
+package org.apache.felix.dm.lambda.callbacks;
+
+import java.util.Objects;
+
+import org.apache.felix.dm.Component;
+
+/**
+ * Represents a swap callback(Service, Service, 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:[email protected]";>Felix Project Team</a>
+ */
+@FunctionalInterface
+public interface InstanceCbServiceServiceComponent<S> extends 
SerializableLambda {
+    /**
+     * Handles the given arguments.
+     * @param c the component
+     * @param old the old service
+     * @param replace the new service
+     */
+    void accept(S old, S replace, Component c);
+
+    default InstanceCbServiceServiceComponent<S> 
andThen(InstanceCbServiceServiceComponent<S> after) {
+        Objects.requireNonNull(after);
+        return (S old, S replace, Component c) -> {
+            accept(old, replace, c);
+            after.accept(old, replace, c);
+        };
+    }
+}

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=1731147&r1=1731146&r2=1731147&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
 Thu Feb 18 21:07:16 2016
@@ -12,9 +12,10 @@ import org.apache.felix.dm.lambda.Config
 import org.apache.felix.dm.lambda.FluentProperty;
 import org.apache.felix.dm.lambda.FutureDependencyBuilder;
 import org.apache.felix.dm.lambda.ServiceDependencyBuilder;
+import org.apache.felix.dm.lambda.callbacks.Cb;
 import org.apache.felix.dm.lambda.callbacks.CbComponent;
-import org.apache.felix.dm.lambda.callbacks.CbConsumer;
-import org.apache.felix.dm.lambda.callbacks.CbTypeComponent;
+import org.apache.felix.dm.lambda.callbacks.InstanceCb;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbComponent;
 
 /**
  * Methods common to extended components like adapters or aspects.
@@ -156,18 +157,18 @@ public interface AdapterBase<B extends C
         return (B) this;
     }
     
-    default B withSrv(Class<?> service, String filter) {
-        andThenBuild(compBuilder -> compBuilder.withSrv(service, filter));
+    default B withSvc(Class<?> service, String filter) {
+        andThenBuild(compBuilder -> compBuilder.withSvc(service, filter));
         return (B) this;
     }
 
-    default B withSrv(Class<?> ... services) {
-        andThenBuild(compBuilder -> compBuilder.withSrv(services));
+    default B withSvc(Class<?> ... services) {
+        andThenBuild(compBuilder -> compBuilder.withSvc(services));
         return (B) this;
     }
 
-    default <U> B withSrv(Class<U> service, 
Consumer<ServiceDependencyBuilder<U>> consumer) {
-        andThenBuild(compBuilder -> compBuilder.withSrv(service, consumer));
+    default <U> B withSvc(Class<U> service, 
Consumer<ServiceDependencyBuilder<U>> consumer) {
+        andThenBuild(compBuilder -> compBuilder.withSvc(service, consumer));
         return (B) this;
     }
     
@@ -186,6 +187,11 @@ public interface AdapterBase<B extends C
         return (B) this;
     }
     
+    default B lifecycleCallbackInstance(Object lifecycleCallbackInstance) {
+        andThenBuild(compBuilder -> 
compBuilder.lifecycleCallbackInstance(lifecycleCallbackInstance));
+        return (B) this;
+    }
+    
     default B init(String callback) {
         andThenBuild(compBuilder -> compBuilder.init(callback));
         return (B) this;
@@ -205,103 +211,83 @@ public interface AdapterBase<B extends C
         andThenBuild(compBuilder -> compBuilder.destroy(callback));
         return (B) this;
     }
-    
-    default B init(Object callbackInstance, String callback) {
-        andThenBuild(compBuilder -> compBuilder.init(callbackInstance, 
callback));
-        return (B) this;
-    }
-    
-    default B start(Object callbackInstance, String callback) {
-        andThenBuild(compBuilder -> compBuilder.start(callbackInstance, 
callback));
-        return (B) this;
-    }
-
-    default B stop(Object callbackInstance, String callback) {
-        andThenBuild(compBuilder -> compBuilder.stop(callbackInstance, 
callback));
-        return (B) this;
-    }
-
-    default B destroy(Object callbackInstance, String callback) {
-        andThenBuild(compBuilder -> compBuilder.destroy(callbackInstance, 
callback));
-        return (B) this;
-    }
-    
-    default <U> B init(CbConsumer<U> callback) {
+        
+    default <U> B init(Cb<U> callback) {
         andThenBuild(compBuilder -> compBuilder.init(callback));
         return (B) this;
     }
     
-    default <U> B start(CbConsumer<U> callback) {
+    default <U> B start(Cb<U> callback) {
         andThenBuild(compBuilder -> compBuilder.start(callback));
         return (B) this;
     }
 
-    default <U> B stop(CbConsumer<U> callback) {
+    default <U> B stop(Cb<U> callback) {
         andThenBuild(compBuilder -> compBuilder.stop(callback));
         return (B) this;
     }
 
-    default <U> B destroy(CbConsumer<U> callback) {
+    default <U> B destroy(Cb<U> callback) {
         andThenBuild(compBuilder -> compBuilder.destroy(callback));
         return (B) this;
     }
         
-    default <U> B init(CbTypeComponent<U> callback) {
+    default <U> B init(CbComponent<U> callback) {
         andThenBuild(compBuilder -> compBuilder.init(callback));
         return (B) this;
     }
         
-    default <U> B start(CbTypeComponent<U> callback) {
+    default <U> B start(CbComponent<U> callback) {
         andThenBuild(compBuilder -> compBuilder.start(callback));
         return (B) this;
     }
         
-    default <U> B stop(CbTypeComponent<U> callback) {
+    default <U> B stop(CbComponent<U> callback) {
         andThenBuild(compBuilder -> compBuilder.stop(callback));
         return (B) this;
     }
         
-    default <U> B destroy(CbTypeComponent<U> callback) {
+    default <U> B destroy(CbComponent<U> callback) {
         andThenBuild(compBuilder -> compBuilder.destroy(callback));
         return (B) this;
     }
         
-    default B initInstance(Runnable callback) {
+    default B initInstance(InstanceCb callback) {
         andThenBuild(compBuilder -> compBuilder.initInstance(callback));
         return (B) this;
     }
         
-    default B startInstance(Runnable callback) {
+    default B startInstance(InstanceCb callback) {
         andThenBuild(compBuilder -> compBuilder.startInstance(callback));
         return (B) this;
     }
         
-    default B stopInstance(Runnable callback) {
+    default B stopInstance(InstanceCb callback) {
         andThenBuild(compBuilder -> compBuilder.stopInstance(callback));
         return (B) this;
     }
         
-    default B destroyInstance(Runnable callback) {
+    default B destroyInstance(InstanceCb callback) {
         andThenBuild(compBuilder -> compBuilder.destroyInstance(callback));
         return (B) this;
     }
         
-    default B initInstance(CbComponent callback) {
+    default B initInstance(InstanceCbComponent callback) {
         andThenBuild(compBuilder -> compBuilder.initInstance(callback));
         return (B) this;
     }
 
-    default B startInstance(CbComponent callback) {
+    default B startInstance(InstanceCbComponent callback) {
         andThenBuild(compBuilder -> compBuilder.startInstance(callback));
         return (B) this;
     }
 
-    default B stopInstance(CbComponent callback) {
+    default B stopInstance(InstanceCbComponent callback) {
         andThenBuild(compBuilder -> compBuilder.stopInstance(callback));
         return (B) this;
     }
 
-    default B destroyInstance(CbComponent callback) {
+    default B destroyInstance(InstanceCbComponent callback) {
         andThenBuild(compBuilder -> compBuilder.destroyInstance(callback));
         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=1731147&r1=1731146&r2=1731147&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
 Thu Feb 18 21:07:16 2016
@@ -12,9 +12,9 @@ import org.apache.felix.dm.DependencyMan
 import org.apache.felix.dm.lambda.BundleAdapterBuilder;
 import org.apache.felix.dm.lambda.ComponentBuilder;
 import org.apache.felix.dm.lambda.callbacks.CbBundle;
-import org.apache.felix.dm.lambda.callbacks.CbComponentBundle;
-import org.apache.felix.dm.lambda.callbacks.CbTypeBundle;
-import org.apache.felix.dm.lambda.callbacks.CbTypeComponentBundle;
+import org.apache.felix.dm.lambda.callbacks.CbBundleComponent;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbBundle;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbBundleComponent;
 import org.osgi.framework.Bundle;
 
 public class BundleAdapterBuilderImpl implements 
AdapterBase<BundleAdapterBuilder>, BundleAdapterBuilder {
@@ -82,45 +82,44 @@ public class BundleAdapterBuilderImpl im
         return this;
     }
 
-    public BundleAdapterBuilder cb(String ... callbacks) {
-        return cbi(null, callbacks);
+    public BundleAdapterBuilder add(String callback) {
+        return callbacks(callback, null, null);
     }
     
-    public BundleAdapterBuilder cbi(Object callbackInstance, String ... 
callbacks) {
-        switch (callbacks.length) {
-        case 1:
-            return cbi(callbackInstance, callbacks[0], null, null);
-            
-        case 2:
-            return cbi(callbackInstance, callbacks[0], null, callbacks[1]);
-            
-        case 3:
-            return cbi(callbackInstance, callbacks[0], callbacks[1], 
callbacks[2]);
-            
-        default:
-            throw new IllegalArgumentException("wrong number of arguments: " + 
callbacks.length + ". " +
-                "Possible arguments: [add], [add, remove] or [add, change, 
remove]");
-        }
+    public BundleAdapterBuilder change(String callback) {
+        return callbacks(null, callback, null);
     }
     
-    private BundleAdapterBuilder cbi(Object callbackInstance, String add, 
String change, String remove) {
-        checkHasNoMethodRefs();
+    public BundleAdapterBuilder remove(String callback) {
+        return callbacks(null, null, callback);
+    }
+    
+    public BundleAdapterBuilder callbackInstance(Object callbackInstance) {
         m_callbackInstance = callbackInstance;
-        m_add = add;
-        m_change = change;
-        m_remove = remove;
         return this;
     }
     
-    public <T> BundleAdapterBuilder cb(CbTypeBundle<T> add) {
-        return cb(add, (CbTypeBundle<T>) null, (CbTypeBundle<T>) null);
+    private BundleAdapterBuilder callbacks(String add, String change, String 
remove) {
+        checkHasNoMethodRefs();
+        m_add = add != null ? add : m_add;
+        m_change = change != null ? change : m_change;
+        m_remove = remove != null ? remove : m_remove;
+        return this;
+    }
+    
+    public <T> BundleAdapterBuilder add(CbBundle<T> add) {
+        return callbacks(add, (CbBundle<T>) null, (CbBundle<T>) null);
+    }
+
+    public <T> BundleAdapterBuilder change(CbBundle<T> change) {
+        return callbacks(null, change, null);
     }
 
-    public <T> BundleAdapterBuilder cb(CbTypeBundle<T> add, CbTypeBundle<T> 
remove) {
-        return cb(add, null, remove);
+    public <T> BundleAdapterBuilder remove(CbBundle<T> remove) {
+        return callbacks(null, null, remove);
     }
 
-    public <T> BundleAdapterBuilder cb(CbTypeBundle<T> add, CbTypeBundle<T> 
change, CbTypeBundle<T> remove) {
+    private <T> BundleAdapterBuilder callbacks(CbBundle<T> add, CbBundle<T> 
change, CbBundle<T> remove) {
         if (add != null) {
             Class<T> type = Helpers.getLambdaArgType(add, 0);
             setComponentCallbackRef(Cb.ADD, type, (instance, component, 
bundle) -> { add.accept((T) instance, bundle); });
@@ -136,57 +135,69 @@ public class BundleAdapterBuilderImpl im
         return this;
     }
     
-    public BundleAdapterBuilder cbi(CbBundle add) {
-        return cbi(add, null, null);
+    public BundleAdapterBuilder add(InstanceCbBundle add) {
+        return callbacks(add, null, null);
+    }
+    
+    public BundleAdapterBuilder change(InstanceCbBundle change) {
+        return callbacks(null, change, null);
     }
 
-    public BundleAdapterBuilder cbi(CbBundle add, CbBundle remove) {
-        return cbi(add, null, remove);
+    public BundleAdapterBuilder remove(InstanceCbBundle remove) {
+        return callbacks(null, null, remove);
     }
-    
-    public BundleAdapterBuilder cbi(CbBundle add, CbBundle change, CbBundle 
remove) {
+
+    public BundleAdapterBuilder callbacks(InstanceCbBundle add, 
InstanceCbBundle change, InstanceCbBundle remove) {
         if (add != null) setInstanceCallbackRef(Cb.ADD, (instance, component, 
bundle) -> { add.accept(bundle); });
         if (change != null) setInstanceCallbackRef(Cb.CHG, (instance, 
component, bundle) -> { change.accept(bundle); });
         if (remove != null) setInstanceCallbackRef(Cb.REM, (instance, 
component, bundle) -> { remove.accept(bundle); });
         return this;
     }
     
-    public <T> BundleAdapterBuilder cb(CbTypeComponentBundle<T> add) {
-        return cb((CbTypeComponentBundle<T>) add, (CbTypeComponentBundle<T>) 
null, (CbTypeComponentBundle<T>) null);
+    public <T> BundleAdapterBuilder add(CbBundleComponent<T> add) {
+        return callbacks(add, null, null);
+    }
+    
+    public <T> BundleAdapterBuilder change(CbBundleComponent<T> change) {
+        return callbacks(null, change, null);
     }
     
-    public <T> BundleAdapterBuilder cb(CbTypeComponentBundle<T> add, 
CbTypeComponentBundle<T> remove) {
-        return cb(add, null, remove);
+    public <T> BundleAdapterBuilder remove(CbBundleComponent<T> remove) {
+        return callbacks(null, null, remove);
     }
     
-    public <T> BundleAdapterBuilder cb(CbTypeComponentBundle<T> add, 
CbTypeComponentBundle<T> change, CbTypeComponentBundle<T> remove) {
+    public <T> BundleAdapterBuilder callbacks(CbBundleComponent<T> add, 
CbBundleComponent<T> change, CbBundleComponent<T> remove) {
         if (add != null) {
             Class<T> type = Helpers.getLambdaArgType(add, 0);
-            return setComponentCallbackRef(Cb.ADD, type, (instance, component, 
bundle) -> { add.accept((T) instance, component, bundle); });
+            return setComponentCallbackRef(Cb.ADD, type, (instance, component, 
bundle) -> { add.accept((T) instance, bundle, component); });
         }
         if (change != null) {
             Class<T> type = Helpers.getLambdaArgType(change, 0);
-            return setComponentCallbackRef(Cb.CHG, type, (instance, component, 
bundle) -> { change.accept((T) instance, component, bundle); });
+            return setComponentCallbackRef(Cb.CHG, type, (instance, component, 
bundle) -> { change.accept((T) instance, bundle, component); });
         }
         if (remove != null) {
             Class<T> type = Helpers.getLambdaArgType(remove, 0);
-            return setComponentCallbackRef(Cb.ADD, type, (instance, component, 
bundle) -> { remove.accept((T) instance, component, bundle); });
+            return setComponentCallbackRef(Cb.ADD, type, (instance, component, 
bundle) -> { remove.accept((T) instance, bundle, component); });
         }
         return this;
     }
     
-    public BundleAdapterBuilder cbi(CbComponentBundle add) {
-        return cbi(add, null, null);
+    public BundleAdapterBuilder add(InstanceCbBundleComponent add) {
+        return callbacks(add, null, null);
     }
     
-    public BundleAdapterBuilder cbi(CbComponentBundle add, CbComponentBundle 
remove) {
-        return cbi(add, null, remove);
+    public BundleAdapterBuilder change(InstanceCbBundleComponent change) {
+        return callbacks(null, change, null);
     }
-
-    public BundleAdapterBuilder cbi(CbComponentBundle add, CbComponentBundle 
change, CbComponentBundle remove) {
-        if (add != null) setInstanceCallbackRef(Cb.ADD, (instance, component, 
bundle) -> { add.accept(component, bundle); });
-        if (change != null) setInstanceCallbackRef(Cb.CHG, (instance, 
component, bundle) -> { change.accept(component, bundle); });
-        if (remove != null) setInstanceCallbackRef(Cb.REM, (instance, 
component, bundle) -> { remove.accept(component, bundle); });
+    
+    public BundleAdapterBuilder remove(InstanceCbBundleComponent remove) {
+        return callbacks(null, null, remove);
+    }
+    
+    public BundleAdapterBuilder callbacks(InstanceCbBundleComponent add, 
InstanceCbBundleComponent change, InstanceCbBundleComponent remove) {
+        if (add != null) setInstanceCallbackRef(Cb.ADD, (instance, component, 
bundle) -> { add.accept(bundle, component); });
+        if (change != null) setInstanceCallbackRef(Cb.CHG, (instance, 
component, bundle) -> { change.accept(bundle, component); });
+        if (remove != null) setInstanceCallbackRef(Cb.REM, (instance, 
component, bundle) -> { remove.accept(bundle, component); });
         return this;
     }
 

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/BundleDependencyBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/BundleDependencyBuilderImpl.java?rev=1731147&r1=1731146&r2=1731147&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/BundleDependencyBuilderImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/BundleDependencyBuilderImpl.java
 Thu Feb 18 21:07:16 2016
@@ -6,7 +6,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.function.Supplier;
+import java.util.function.Function;
 import java.util.stream.Stream;
 
 import org.apache.felix.dm.BundleDependency;
@@ -14,9 +14,9 @@ import org.apache.felix.dm.Component;
 import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.lambda.BundleDependencyBuilder;
 import org.apache.felix.dm.lambda.callbacks.CbBundle;
-import org.apache.felix.dm.lambda.callbacks.CbComponentBundle;
-import org.apache.felix.dm.lambda.callbacks.CbTypeBundle;
-import org.apache.felix.dm.lambda.callbacks.CbTypeComponentBundle;
+import org.apache.felix.dm.lambda.callbacks.CbBundleComponent;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbBundle;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbBundleComponent;
 import org.osgi.framework.Bundle;
 
 @SuppressWarnings("unchecked")
@@ -34,7 +34,7 @@ public class BundleDependencyBuilderImpl
        private boolean m_propagate;
        private Object m_propagateInstance;
        private String m_propagateMethod;
-       private Supplier<Dictionary<?, ?>> m_propagateSupplier;
+       private Function<Bundle, Dictionary<?, ?>> m_propagateCallback;
        private final Component m_component;
     
     enum Cb {
@@ -55,13 +55,14 @@ public class BundleDependencyBuilderImpl
         */
        private class Propagate {
                @SuppressWarnings("unused")
-               Dictionary<?, ?> propagate() {
-                       return m_propagateSupplier.get();
+               Dictionary<?, ?> propagate(Bundle bundle) {
+                       return m_propagateCallback.apply(bundle);
                }
        }
 
     public BundleDependencyBuilderImpl (Component component) {
         m_component = component;
+        m_required = Helpers.isDependencyRequiredByDefault(component);
     }
 
     @Override
@@ -121,7 +122,7 @@ public class BundleDependencyBuilderImpl
 
     @Override
     public BundleDependencyBuilder propagate(Object instance, String method) {
-        if (m_propagateSupplier != null || m_propagate) throw new 
IllegalStateException("Propagate callback already set.");
+        if (m_propagateCallback != null || m_propagate) throw new 
IllegalStateException("Propagate callback already set.");
         Objects.nonNull(method);
         Objects.nonNull(instance);
         m_propagateInstance = instance;
@@ -130,42 +131,38 @@ public class BundleDependencyBuilderImpl
     }
 
     @Override
-    public BundleDependencyBuilder propagate(Supplier<Dictionary<?, ?>> 
instance) {
+    public BundleDependencyBuilder propagate(Function<Bundle, Dictionary<?, 
?>> instance) {
         if (m_propagateInstance != null || m_propagate) throw new 
IllegalStateException("Propagate callback already set.");
-        m_propagateSupplier = instance;
+        m_propagateCallback = instance;
         return this;
     }
-        
-    public BundleDependencyBuilder cb(String ... callbacks) {
-        return cb(null, callbacks);
-    }
     
     @Override
-    public BundleDependencyBuilder cb(Object callbackInstance, String ... 
callbacks) {
-        switch (callbacks.length) {
-        case 1:
-            cbi(callbackInstance, callbacks[0], null, null);
-            break;
-            
-        case 2:
-            cbi(callbackInstance, callbacks[0], null, callbacks[1]);
-            break;
-            
-        case 3:
-            cbi(callbackInstance, callbacks[0], callbacks[1], callbacks[2]);
-            break;
-            
-        default:
-            throw new IllegalArgumentException("wrong number of arguments: " + 
callbacks.length + ". " +
-                "Possible arguments: [add], [add, remove] or [add, change, 
remove]");
-        }
+    public BundleDependencyBuilder callbackInstance(Object callbackInstance) {
+        m_instance = callbackInstance;
+        return this;
+    }
 
+    @Override
+    public BundleDependencyBuilder add(String add) {
+        callbacks(add, null, null);
         return this;
     }
     
-    private BundleDependencyBuilder cbi(Object callbackInstance, String added, 
String changed, String removed) {
+    @Override
+    public BundleDependencyBuilder change(String change) {
+        callbacks(null, change, null);
+        return this;
+    }
+    
+    @Override
+    public BundleDependencyBuilder remove(String remove) {
+        callbacks(null, null, remove);
+        return this;
+    }
+            
+    private BundleDependencyBuilder callbacks(String added, String changed, 
String removed) {
         requiresNoMethodRefs();
-        m_instance = callbackInstance;
         m_added = added != null ? added : m_added;
         m_changed = changed != null ? changed : m_changed;
         m_removed = removed != null ? removed : m_removed;
@@ -174,17 +171,21 @@ public class BundleDependencyBuilderImpl
     }
 
     @Override
-    public <T> BundleDependencyBuilder cb(CbTypeBundle<T> add) {
-        return cb(add, null, null);
+    public <T> BundleDependencyBuilder add(CbBundle<T> add) {
+        return callbacks(add, null, null);
     }
     
     @Override
-    public <T> BundleDependencyBuilder cb(CbTypeBundle<T> add, CbTypeBundle<T> 
remove) {
-        return cb(add, null, remove);
+    public <T> BundleDependencyBuilder change(CbBundle<T> change) {
+        return callbacks(null, change, null);
     }
     
     @Override
-    public <T> BundleDependencyBuilder cb(CbTypeBundle<T> add, CbTypeBundle<T> 
change, CbTypeBundle<T> remove) {
+    public <T> BundleDependencyBuilder remove(CbBundle<T> remove) {
+        return callbacks(null, null, remove);
+    }
+    
+    private <T> BundleDependencyBuilder callbacks(CbBundle<T> add, CbBundle<T> 
change, CbBundle<T> remove) {
         if (add != null) {
             setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), 
(inst, component, bundle) -> add.accept ((T) inst, bundle));
         }
@@ -198,41 +199,49 @@ public class BundleDependencyBuilderImpl
     }
 
     @Override
-    public <T> BundleDependencyBuilder cb(CbTypeComponentBundle<T> add) {
-        return cb(add, null, null);
+    public <T> BundleDependencyBuilder add(CbBundleComponent<T> add) {
+        return callbacks(add, null, null);
     }
     
     @Override
-    public <T> BundleDependencyBuilder cb(CbTypeComponentBundle<T> add, 
CbTypeComponentBundle<T> remove) {
-        return cb(add, null, remove);
+    public <T> BundleDependencyBuilder change(CbBundleComponent<T> change) {
+        return callbacks(null, change, null);
     }
     
     @Override
-    public <T> BundleDependencyBuilder cb(CbTypeComponentBundle<T> add, 
CbTypeComponentBundle<T> change, CbTypeComponentBundle<T> remove) {
+    public <T> BundleDependencyBuilder remove(CbBundleComponent<T> remove) {
+        return callbacks(null, null, remove);
+    }
+    
+    private <T> BundleDependencyBuilder callbacks(CbBundleComponent<T> add, 
CbBundleComponent<T> change, CbBundleComponent<T> remove) {
         if (add != null) {
-            setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), 
(inst, component, bundle) -> add.accept ((T) inst, component, bundle));
+            setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), 
(inst, component, bundle) -> add.accept ((T) inst, bundle, component));
         }
         if (change != null) {
-            setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 
0), (inst, component, bundle) -> change.accept ((T) inst, component, bundle));
+            setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 
0), (inst, component, bundle) -> change.accept ((T) inst, bundle, component));
         }
         if (remove != null) {
-            setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 
0), (inst, component, bundle) -> remove.accept ((T) inst, component, bundle));
+            setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 
0), (inst, component, bundle) -> remove.accept ((T) inst, bundle, component));
         }
         return this;  
     }
     
     @Override
-    public BundleDependencyBuilder cbi(CbBundle add) {
-        return cbi(add, null, null);
+    public BundleDependencyBuilder add(InstanceCbBundle add) {
+        return callbacks(add, null, null);
     }
     
     @Override
-    public BundleDependencyBuilder cbi(CbBundle add, CbBundle remove) {
-        return cbi(add, null, remove);
+    public BundleDependencyBuilder change(InstanceCbBundle change) {
+        return callbacks(null, change, null);
     }
     
     @Override
-    public BundleDependencyBuilder cbi(CbBundle add, CbBundle change, CbBundle 
remove) {
+    public BundleDependencyBuilder remove(InstanceCbBundle remove) {
+        return callbacks(null, null, remove);
+    }
+    
+    private BundleDependencyBuilder callbacks(InstanceCbBundle add, 
InstanceCbBundle change, InstanceCbBundle remove) {
         if (add != null) setInstanceCallbackRef(Cb.ADD, (inst, component, 
bundle) -> add.accept(bundle));
         if (change != null) setInstanceCallbackRef(Cb.CHG, (inst, component, 
bundle) -> change.accept(bundle));
         if (remove != null) setInstanceCallbackRef(Cb.REM, (inst, component, 
bundle) -> remove.accept(bundle));
@@ -240,20 +249,24 @@ public class BundleDependencyBuilderImpl
     }
 
     @Override
-    public BundleDependencyBuilder cbi(CbComponentBundle add) {
-        return cbi(add, null, null);
+    public BundleDependencyBuilder add(InstanceCbBundleComponent add) {
+        return callbacks(add, null, null);
     }
     
     @Override
-    public BundleDependencyBuilder cbi(CbComponentBundle add, 
CbComponentBundle remove) {
-        return cbi(add, null, remove);
+    public BundleDependencyBuilder change(InstanceCbBundleComponent add) {
+        return callbacks(add, null, null);
     }
-    
+
     @Override
-    public BundleDependencyBuilder cbi(CbComponentBundle add, 
CbComponentBundle change, CbComponentBundle remove) {
-        if (add != null) setInstanceCallbackRef(Cb.ADD, (inst, component, 
bundle) -> add.accept(component, bundle));
-        if (change != null) setInstanceCallbackRef(Cb.CHG, (inst, component, 
bundle) -> change.accept(component, bundle));
-        if (remove != null) setInstanceCallbackRef(Cb.REM, (inst, component, 
bundle) -> remove.accept(component, bundle));
+    public BundleDependencyBuilder remove(InstanceCbBundleComponent remove) {
+        return callbacks(null, null, remove);
+    }
+    
+    private BundleDependencyBuilder callbacks(InstanceCbBundleComponent add, 
InstanceCbBundleComponent change, InstanceCbBundleComponent remove) {
+        if (add != null) setInstanceCallbackRef(Cb.ADD, (inst, component, 
bundle) -> add.accept(bundle, component));
+        if (change != null) setInstanceCallbackRef(Cb.CHG, (inst, component, 
bundle) -> change.accept(bundle, component));
+        if (remove != null) setInstanceCallbackRef(Cb.REM, (inst, component, 
bundle) -> remove.accept(bundle, component));
         return this;
     }
 
@@ -280,7 +293,7 @@ public class BundleDependencyBuilderImpl
             dep.setPropagate(true);
         } else if (m_propagateInstance != null) {
             dep.setPropagate(m_propagateInstance, m_propagateMethod);
-        } else if (m_propagateSupplier != null) {
+        } else if (m_propagateCallback != null) {
                dep.setPropagate(new Propagate(), "propagate");
         }
         

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/CompletableFutureDependencyImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/CompletableFutureDependencyImpl.java?rev=1731147&r1=1731146&r2=1731147&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/CompletableFutureDependencyImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/CompletableFutureDependencyImpl.java
 Thu Feb 18 21:07:16 2016
@@ -14,7 +14,7 @@ import org.apache.felix.dm.context.Event
 import org.apache.felix.dm.context.EventType;
 import org.apache.felix.dm.lambda.FutureDependencyBuilder;
 import org.apache.felix.dm.lambda.callbacks.CbFuture;
-import org.apache.felix.dm.lambda.callbacks.CbTypeFuture;
+import org.apache.felix.dm.lambda.callbacks.InstanceCbFuture;
 import org.osgi.service.log.LogService;
 
 public class CompletableFutureDependencyImpl<F> extends 
AbstractDependency<CompletableFutureDependencyImpl<F>> implements 
FutureDependencyBuilder<F> {
@@ -23,8 +23,8 @@ public class CompletableFutureDependency
        private Component m_comp;
        private boolean m_async;
        private Executor m_exec;
-    private CbFuture<F> m_accept = (future) -> {};
-    private CbTypeFuture<Object, F> m_accept2;
+    private InstanceCbFuture<F> m_accept = (future) -> {};
+    private CbFuture<Object, F> m_accept2;
     private Class<?> m_accept2Type;
     
        public CompletableFutureDependencyImpl(Component c, 
CompletableFuture<F> future) {
@@ -51,24 +51,24 @@ public class CompletableFutureDependency
        }
 
        @Override
-    public FutureDependencyBuilder<F> cb(String callback) {
-           return cbi(null, callback);
+    public FutureDependencyBuilder<F> complete(String callback) {
+           return complete(null, callback);
        }
        
        @Override
-    public FutureDependencyBuilder<F> cbi(Object callbackInstance, String 
callback) {
+    public FutureDependencyBuilder<F> complete(Object callbackInstance, String 
callback) {
            super.setCallbacks(callbackInstance, callback, null);
            return this;
        }
 
        @Override
-       public <T> FutureDependencyBuilder<F> cb(CbTypeFuture<T, ? super F> 
consumer) {
-           return cb(consumer, false);
+       public <T> FutureDependencyBuilder<F> complete(CbFuture<T, ? super F> 
consumer) {
+           return complete(consumer, false);
        }
 
        @SuppressWarnings("unchecked")
        @Override
-       public <T> FutureDependencyBuilder<F> cb(CbTypeFuture<T, ? super F> 
consumer, boolean async) {
+       public <T> FutureDependencyBuilder<F> complete(CbFuture<T, ? super F> 
consumer, boolean async) {
            m_accept2Type = Helpers.getLambdaArgType(consumer, 0);;
            m_accept2 = (instance, result) -> consumer.accept((T) instance, 
result);
            m_async = async;
@@ -76,28 +76,28 @@ public class CompletableFutureDependency
        }   
 
        @Override
-       public <T> FutureDependencyBuilder<F> cb(CbTypeFuture<T, ? super F> 
consumer, Executor executor) {
-           cb(consumer, true /* async */);
+       public <T> FutureDependencyBuilder<F> complete(CbFuture<T, ? super F> 
consumer, Executor executor) {
+           complete(consumer, true /* async */);
            m_exec = executor;
            return this;
        }
 
        @Override
-       public FutureDependencyBuilder<F> cbi(CbFuture<? super F> consumer) {
-           cbi(consumer, false);
+       public FutureDependencyBuilder<F> complete(InstanceCbFuture<? super F> 
consumer) {
+           complete(consumer, false);
                return this;
        }
        
        @Override
-       public FutureDependencyBuilder<F> cbi(CbFuture<? super F> consumer, 
boolean async) {
+       public FutureDependencyBuilder<F> complete(InstanceCbFuture<? super F> 
consumer, boolean async) {
            m_accept = m_accept.andThen(future -> consumer.accept(future));
            m_async = async;
            return this;
        }   
 
     @Override
-    public FutureDependencyBuilder<F> cbi(CbFuture<? super F> consumer, 
Executor executor) {
-        cbi(consumer, true /* async */);
+    public FutureDependencyBuilder<F> complete(InstanceCbFuture<? super F> 
consumer, Executor executor) {
+        complete(consumer, true /* async */);
         m_exec = executor;
         return this;
     }
@@ -212,7 +212,7 @@ public class CompletableFutureDependency
        }
     
     /**
-     * Injects the completed fiture result in a method by reflection.
+     * Injects the completed future result in a method by reflection.
      * We try to find a method which has in its signature a parameter that is 
compatible with the future result
      * (including any interfaces the result may implements).
      * 


Reply via email to