Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceDependencyBuilder.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceDependencyBuilder.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceDependencyBuilder.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/ServiceDependencyBuilder.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,132 @@ +package org.apache.felix.dm.lambda; + +import java.util.Dictionary; +import java.util.function.BiFunction; +import java.util.function.Function; + +import org.apache.felix.dm.ServiceDependency; +import org.osgi.framework.ServiceReference; + +/** + * Builds a Dependency Manager Service Dependency. Dependency callbacks can be defined using methods reflection like + * in original DM API, or using Java8 method references. + * + * Unlike with original DM, dependencies are required by default. + * + * @param <S> the type of the service dependency + */ +public interface ServiceDependencyBuilder<S> extends DependencyBuilder<ServiceDependency>, ServiceCallbacksBuilder<S, ServiceDependencyBuilder<S>> { + /** + * Configures the service dependency filter + * @param filter the service filter + * @return this builder + */ + ServiceDependencyBuilder<S> filter(String filter); + + /** + * Configures this dependency with the given ServiceReference. + * @param ref the service reference + * @return this builder + */ + ServiceDependencyBuilder<S> ref(ServiceReference<S> ref); + + /** + * Configures this dependency as optional. By default, a dependency is required. + * @return this builder + */ + ServiceDependencyBuilder<S> optional(); + + /** + * Configures this dependency as required. By default, a dependency is required. + * @return this builder + */ + ServiceDependencyBuilder<S> required(); + + /** + * Configures whether this dependency is required or not. + * + * @param required true if the dependency is required, false if not. Unlike with the original DM API, service dependencies are required by default. + * @return this builder + */ + ServiceDependencyBuilder<S> required(boolean required); + + /** + * Configures debug mode + * @param label the label used by debug messages + * @return this builder + */ + ServiceDependencyBuilder<S> debug(String label); + + /** + * Propagates the dependency properties to the component service properties. + * @return this builder + */ + ServiceDependencyBuilder<S> propagate(); + + /** + * Configures whether the dependency properties must be propagated or not to the component service properties. + * + * @param propagate true if the service dependency properties should be propagated to the properties provided by the component using this dependency. + * @return this builder + */ + ServiceDependencyBuilder<S> propagate(boolean propagate); + + /** + * Configures a method that can is called in order to get propagated service properties. + * + * @param instance an object instance + * @param method the method name to call on the object instance. This method returns the propagated service properties. + * @return this builder + */ + ServiceDependencyBuilder<S> propagate(Object instance, String method); + + /** + * Specifies a function that is called to get the propagated service properties for this service dependency. + * @param propagate a function that is called to get the propagated service properties for this service dependency. + * @return this builder + */ + ServiceDependencyBuilder<S> propagate(Function<ServiceReference<S>, Dictionary<String, Object>> propagate); + + /** + * Specifies a function that is called to get the propagated service properties for this service dependency. + * @param propagate a function that is called to get the propagated service properties for this service dependency. + * @return this builder + */ + ServiceDependencyBuilder<S> propagate(BiFunction<ServiceReference<S>, S, Dictionary<String, Object>> propagate); + + /** + * Sets the default implementation if the service is not available. + * @param defaultImpl the implementation used by default when the service is not available. + * @return this builder + */ + ServiceDependencyBuilder<S> defImpl(Object defaultImpl); + + /** + * Sets a timeout for this dependency. A timed dependency blocks the invoker thread is the required dependency is currently unavailable, until it comes up again. + * @param timeout the timeout to wait in milliseconds when the service disappears. If the timeout expires, an IllegalStateException is thrown + * when the missing service is invoked. + * + * @return this builder + */ + ServiceDependencyBuilder<S> timeout(long timeout); + + /** + * Injects this dependency in all fields matching the dependency type. + * @return this builder + */ + ServiceDependencyBuilder<S> autoConfig(); + + /** + * Configures whether or not the dependency can be injected in all fields matching the dependency type. + * @param autoConfig true if the dependency can be injected in all fields matching the dependency type + * @return this builder + */ + ServiceDependencyBuilder<S> autoConfig(boolean autoConfig); + + /** + * Injects this dependency on the field with the given name + * @param field the field name where the dependency must be injected + * @return this builder + */ + ServiceDependencyBuilder<S> autoConfig(String field); +} \ No newline at end of file
Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbBundle.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbBundle.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbBundle.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbBundle.java Sun Jan 31 23:27:05 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 CbBundle extends SerializableLambda { + /** + * Handles the given argument. + * @param bundle the callback parameter + */ + void accept(Bundle bundle); + + default CbBundle andThen(CbBundle 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/CbComponent.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponent.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponent.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponent.java Sun Jan 31 23:27:05 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 CbComponent { + /** + * Handles the given argument. + * @param component the callback parameter + */ + void accept(Component component); + + default CbComponent andThen(CbComponent 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/CbComponentBundle.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentBundle.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentBundle.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentBundle.java Sun Jan 31 23:27:05 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(Component, Bundle) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbComponentBundle { + /** + * Handles the given arguments. + * @param component the callback parameter + * @param bundle the callback parameter + */ + void accept(Component component, Bundle bundle); + + default CbComponentBundle andThen(CbComponentBundle after) { + Objects.requireNonNull(after); + return (Component component, Bundle bundle) -> { + accept(component, bundle); + after.accept(component, bundle); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentDictionary.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentDictionary.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentDictionary.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentDictionary.java Sun Jan 31 23:27:05 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(Component, Dictionary) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbComponentDictionary { + /** + * Handles the given arguments. + * @param component a Component + * @param properties some service properties + */ + void accept(Component component, Dictionary<String, Object> properties); + + default CbComponentDictionary andThen(CbComponentDictionary after) { + Objects.requireNonNull(after); + return (Component component, Dictionary<String, Object> properties) -> { + accept(component, properties); + after.accept(component, properties); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRef.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRef.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRef.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRef.java Sun Jan 31 23:27:05 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.ServiceReference; + +/** + * Represents a callback(Component, ServiceReference) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbComponentRef<S> { + /** + * Handles the given arguments. + * @param c a Component + * @param ref the service reference + */ + void accept(Component c, ServiceReference<S> ref); + + default CbComponentRef<S> andThen(CbComponentRef<S> after) { + Objects.requireNonNull(after); + return (Component c, ServiceReference<S> ref) -> { + accept(c, ref); + after.accept(c, ref); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRefService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRefService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRefService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRefService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,30 @@ +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(Component, ServiceReference, Service) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbComponentRefService<S> { + /** + * Handles the given arguments. + * @param c a Component + * @param ref the service reference + * @param service the service + */ + void accept(Component c, ServiceReference<S> ref, S service); + + default CbComponentRefService<S> andThen(CbComponentRefService<S> after) { + Objects.requireNonNull(after); + return (Component c, ServiceReference<S> ref, S service) -> { + accept(c, ref, service); + after.accept(c, ref, service); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRefServiceRefService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRefServiceRefService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRefServiceRefService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentRefServiceRefService.java Sun Jan 31 23:27:05 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(Component, ServiceReference, Service, ServiceReference, Service) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbComponentRefServiceRefService<S> { + /** + * Handles the given arguments + * @param c a Component + * @param oldRef an old swapped service reference + * @param old an old swapped service + * @param replaceRef the new service reference + * @param replace the new service + */ + void accept(Component c, ServiceReference<S> oldRef, S old, ServiceReference<S> replaceRef, S replace); + + default CbComponentRefServiceRefService<S> andThen(CbComponentRefServiceRefService<S> after) { + Objects.requireNonNull(after); + return (Component c, ServiceReference<S> oldRef, S old, ServiceReference<S> replaceRef, S replace) -> { + accept(c, oldRef, old, replaceRef, replace); + after.accept(c, oldRef, old, replaceRef, replace); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,28 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +import org.apache.felix.dm.Component; + +/** + * Represents a callback(Component, Service) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbComponentService<S> { + /** + * Handles the given arguments + * @param c the component + * @param service the service + */ + void accept(Component c, S service); + + default CbComponentService<S> andThen(CbComponentService<S> after) { + Objects.requireNonNull(after); + return (Component c, S service) -> { + accept(c, service); + after.accept(c, service); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentServiceService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentServiceService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentServiceService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbComponentServiceService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,29 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +import org.apache.felix.dm.Component; + +/** + * Represents a callback(Component, Service, Service) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbComponentServiceService<S> extends SerializableLambda { + /** + * Handles the given arguments. + * @param c the component + * @param old the old service + * @param replace the new service + */ + void accept(Component c, S old, S replace); + + default CbComponentServiceService<S> andThen(CbComponentServiceService<S> after) { + Objects.requireNonNull(after); + return (Component c, S old, S replace) -> { + accept(c, old, replace); + after.accept(c, old, replace); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConsumer.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConsumer.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConsumer.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbConsumer.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,26 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +/** + * Represents a callback(T param) on an Object instance. + * + * @param T the type of the callback parameter. + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbConsumer<T> extends SerializableLambda { + /** + * Handles the given argument + * @param t the argument + */ + void accept(T t); + + default CbConsumer<T> andThen(CbConsumer<? super T> after) { + Objects.requireNonNull(after); + return (T t) -> { + accept(t); + after.accept(t); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbDictionary.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbDictionary.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbDictionary.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbDictionary.java Sun Jan 31 23:27:05 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 CbDictionary { + /** + * Handles the given argument. + * @param conf the properties + */ + void accept(Dictionary<String, Object> conf); + + default CbDictionary andThen(CbDictionary 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/CbFuture.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbFuture.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbFuture.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbFuture.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,25 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +/** + * Represents a callback that accepts a 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 CbFuture<F> { + /** + * Handles the result of a CompletableFuture operation. + * @param future the result of a CompletableFuture operation. + */ + void accept(F future); + + default CbFuture<F> andThen(CbFuture<? 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/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=1727869&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 Sun Jan 31 23:27:05 2016 @@ -0,0 +1,26 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +import org.osgi.framework.ServiceReference; + +/** + * Represents a callback(ServiceReference) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbRef<S> { + /** + * Handles the given argument + * @param ref a service reference + */ + void accept(ServiceReference<S> ref); + + default CbRef<S> andThen(CbRef<S> after) { + Objects.requireNonNull(after); + return (ServiceReference<S> ref) -> { + after.accept(ref); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,28 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +import org.osgi.framework.ServiceReference; + +/** + * Represents a callback(ServiceReference, Service) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbRefService<S> { + /** + * Handles the given arguments. + * @param ref a Service Reference + * @param service a Service + */ + void accept(ServiceReference<S> ref, S service); + + default CbRefService<S> andThen(CbRefService<S> after) { + Objects.requireNonNull(after); + return (ServiceReference<S> ref, S service) -> { + accept(ref, service); + after.accept(ref, service); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefServiceRefService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefServiceRefService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefServiceRefService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbRefServiceRefService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,30 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +import org.osgi.framework.ServiceReference; + +/** + * Represents a callback(ServiceReference, Service, ServiceReference, Service) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbRefServiceRefService<S> { + /** + * Handles the given arguments + * @param oldRef a service reference + * @param old a service + * @param replaceRef a service reference + * @param replace a service + */ + void accept(ServiceReference<S> oldRef, S old, ServiceReference<S> replaceRef, S replace); + + default CbRefServiceRefService<S> andThen(CbRefServiceRefService<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/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=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,25 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +/** + * Represents a callback(Service) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbService<S> { + /** + * Handles the given argument. + * @param service a Service + */ + void accept(S service); + + default CbService<S> andThen(CbService<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/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=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceDict.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceDict.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,27 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Dictionary; +import java.util.Objects; + +/** + * Represents a callback(Service, Dictionary) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbServiceDict<S> { + /** + * Handles the given arguments. + * @param service a Service + * @param properties a Dictionary + */ + void accept(S service, Dictionary<String, Object> properties); + + default CbServiceDict<S> andThen(CbServiceDict<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/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=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceMap.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceMap.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,27 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Map; +import java.util.Objects; + +/** + * Represents a callback(Service, Map) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbServiceMap<S> { + /** + * Handles the given arguments. + * @param service a Service + * @param properties a Map + */ + void accept(S service, Map<String, Object> properties); + + default CbServiceMap<S> andThen(CbServiceMap<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/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=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbServiceService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,26 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +/** + * Represents a callback(Service, Service) on an Object instance. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbServiceService<S> extends SerializableLambda { + /** + * Handles the given argument + * @param old a Service + * @param replace a Service + */ + void accept(S old, S replace); + + default CbServiceService<S> andThen(CbServiceService<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/CbTypeBundle.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeBundle.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeBundle.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeBundle.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,29 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +import org.osgi.framework.Bundle; + +/** + * Represents a callback(Bundle) 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 CbTypeBundle<T> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param bundle the callback parameter + */ + void accept(T instance, Bundle bundle); + + default CbTypeBundle<T> andThen(CbTypeBundle<? super T> after) { + Objects.requireNonNull(after); + return (T instance, Bundle bundle) -> { + accept(instance, bundle); + after.accept(instance, bundle); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponent.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponent.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponent.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponent.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,29 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +import org.apache.felix.dm.Component; + +/** + * Represents a callback(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 CbTypeComponent<T> extends SerializableLambda { + /** + * Handles the given arguments + * @param instance the Component implementation instance on which the callback is invoked on. + * @param component the callback parameter + */ + void accept(T instance, Component component); + + default CbTypeComponent<T> andThen(CbTypeComponent<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/CbTypeComponentBundle.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentBundle.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentBundle.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentBundle.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,31 @@ +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(Component, Bundle) 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 CbTypeComponentBundle<T> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param component the first callback parameter + * @param bundle the second callback parameter + */ + void accept(T instance, Component component, Bundle bundle); + + default CbTypeComponentBundle<T> andThen(CbTypeComponentBundle<? super T> after) { + Objects.requireNonNull(after); + return (T instance, Component component, Bundle bundle) -> { + accept(instance, component, bundle); + after.accept(instance, component, bundle); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentDictionary.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentDictionary.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentDictionary.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentDictionary.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,31 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Dictionary; +import java.util.Objects; + +import org.apache.felix.dm.Component; + +/** + * Represents a callback(Component, 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 CbTypeComponentDictionary<T> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param component the first callback parameter + * @param conf the second callback parameter + */ + void accept(T instance, Component component, Dictionary<String, Object> conf); + + default CbTypeComponentDictionary<T> andThen(CbTypeComponentDictionary<? super T> after) { + Objects.requireNonNull(after); + return (T instance, Component component, Dictionary<String, Object> conf) -> { + accept(instance, component, conf); + after.accept(instance, component, conf); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRef.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRef.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRef.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRef.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,31 @@ +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(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 CbTypeComponentRef<T, S> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param c the first callback parameter + * @param ref the second callback parameter + */ + void accept(T instance, Component c, ServiceReference<S> ref); + + default CbTypeComponentRef<T, S> andThen(CbTypeComponentRef<T, S> after) { + Objects.requireNonNull(after); + return (T instance, Component c, ServiceReference<S> ref) -> { + accept(instance, c, ref); + after.accept(instance, c, ref); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRefService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRefService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRefService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRefService.java Sun Jan 31 23:27:05 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(Component, ServiceReference, 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 CbTypeComponentRefService<T, S> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param c the first callback parameter + * @param ref the second callback parameter + * @param service the third callback parameter + */ + void accept(T instance, Component c, ServiceReference<S> ref, S service); + + default CbTypeComponentRefService<T, S> andThen(CbTypeComponentRefService<T, S> after) { + Objects.requireNonNull(after); + return (T instance, Component c, ServiceReference<S> ref, S service) -> { + accept(instance, c, ref, service); + after.accept(instance, c, ref, service); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRefServiceRefService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRefServiceRefService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRefServiceRefService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentRefServiceRefService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,35 @@ +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(Component, ServiceReference, Service, ServiceReference, 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 CbTypeComponentRefServiceRefService<T, S> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param c first callback param + * @param oldRef second callback param + * @param old third callback param + * @param replaceRef fourth callback param + * @param replace fifth callback param + */ + void accept(T instance, Component c, ServiceReference<S> oldRef, S old, ServiceReference<S> replaceRef, S replace); + + default CbTypeComponentRefServiceRefService<T, S> andThen(CbTypeComponentRefServiceRefService<? super T, S> after) { + Objects.requireNonNull(after); + return (T instance, Component c, ServiceReference<S> oldRef, S old, ServiceReference<S> replaceRef, + S replace) -> { + accept(instance, c, oldRef, old, replaceRef, replace); + after.accept(instance, c, oldRef, old, replaceRef, replace); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentService.java Sun Jan 31 23:27:05 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(Component, 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 CbTypeComponentService<T, S> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param c first callback param + * @param service second callback param + */ + void accept(T instance, Component c, S service); + + default CbTypeComponentService<T, S> andThen(CbTypeComponentService<T, S> after) { + Objects.requireNonNull(after); + return (T instance, Component c, S s) -> { + accept(instance, c, s); + after.accept(instance, c, s); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceDict.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceDict.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceDict.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceDict.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,32 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Dictionary; +import java.util.Objects; + +import org.apache.felix.dm.Component; + +/** + * Represents a callback(Component, ServiceReference, 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 CbTypeComponentServiceDict<T, S> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param c first callback param + * @param service second callback param + * @param props third callback param + */ + void accept(T instance, Component c, S service, Dictionary<String, Object> props); + + default CbTypeComponentServiceDict<T, S> andThen(CbTypeComponentServiceDict<T, S> after) { + Objects.requireNonNull(after); + return (T instance, Component c, S s, Dictionary<String, Object> props) -> { + accept(instance, c, s, props); + after.accept(instance, c, s, props); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceMap.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceMap.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceMap.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceMap.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,32 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Map; +import java.util.Objects; + +import org.apache.felix.dm.Component; + +/** + * Represents a callback(Component, ServiceReference, Service, Service Reference, 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 CbTypeComponentServiceMap<T, S> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param c first callback param + * @param service second callback param + * @param props third callback param + */ + void accept(T instance, Component c, S service, Map<String, Object> props); + + default CbTypeComponentServiceMap<T, S> andThen(CbTypeComponentServiceMap<T, S> after) { + Objects.requireNonNull(after); + return (T instance, Component c, S s, Map<String, Object> props) -> { + accept(instance, c, s, props); + after.accept(instance, c, s, props); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeComponentServiceService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,31 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +import org.apache.felix.dm.Component; + +/** + * Represents a callback(Component, 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 CbTypeComponentServiceService<T, S> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param c first callback param + * @param old second callback param + * @param replace third callback param + */ + void accept(T instance, Component c, S old, S replace); + + default CbTypeComponentServiceService<T, S> andThen(CbTypeComponentServiceService<? super T, S> after) { + Objects.requireNonNull(after); + return (T instance, Component c, S old, S replace) -> { + accept(instance, c, old, replace); + after.accept(instance, c, old, replace); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeDictionary.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeDictionary.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeDictionary.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeDictionary.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,28 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Dictionary; +import java.util.Objects; + +/** + * Represents a callback(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 CbTypeDictionary<T> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param conf first callback param + */ + void accept(T instance, Dictionary<String, Object> conf); + + default CbTypeDictionary<T> andThen(CbTypeDictionary<? super T> after) { + Objects.requireNonNull(after); + return (T instance, Dictionary<String, Object> conf) -> { + accept(instance, conf); + after.accept(instance, conf); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeFuture.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeFuture.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeFuture.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeFuture.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,28 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +/** + * Represents a callback that accepts the result of a CompletableFuture operation. The callback 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. + * The type of the result of the CompletableFuture is represented by the F generic parameter. + * + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbTypeFuture<T, F> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param future the result of a CompletableFuture operation. + */ + void accept(T instance, F future); + + default CbTypeFuture<T, F> andThen(CbTypeFuture<? super T, F> after) { + Objects.requireNonNull(after); + return (T instance, F future) -> { + accept(instance, future); + after.accept(instance, future); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeRef.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeRef.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeRef.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeRef.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,29 @@ +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:[email protected]">Felix Project Team</a> + */ +@FunctionalInterface +public interface CbTypeRef<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 param + */ + void accept(T instance, ServiceReference<S> service); + + default CbTypeRef<T, S> andThen(CbTypeRef<? 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/CbTypeRefService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeRefService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeRefService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeRefService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,30 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +import org.osgi.framework.ServiceReference; + +/** + * Represents a callback(ServiceReference, 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 CbTypeRefService<T, S> extends SerializableLambda { + /** + * Handles the given arguments. + * @param instance the Component implementation instance on which the callback is invoked on. + * @param ref first callback param + * @param service second callback param + */ + void accept(T instance, ServiceReference<S> ref, S service); + + default CbTypeRefService<T, S> andThen(CbTypeRefService<? super T, S> after) { + Objects.requireNonNull(after); + return (T instance, ServiceReference<S> ref, S service) -> { + accept(instance, ref, service); + after.accept(instance, ref, service); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeRefServiceRefService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeRefServiceRefService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeRefServiceRefService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeRefServiceRefService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,32 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +import org.osgi.framework.ServiceReference; + +/** + * Represents a callback(ServiceReference, Service, ServiceReference, 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 CbTypeRefServiceRefService<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 param + * @param old second callback param + * @param replaceRef third callback param + * @param replace fourth callback param + */ + void accept(T instance, ServiceReference<S> oldRef, S old, ServiceReference<S> replaceRef, S replace); + + default CbTypeRefServiceRefService<T, S> andThen(CbTypeRefServiceRefService<? super T, S> after) { + Objects.requireNonNull(after); + return (T instance, ServiceReference<S> oldRef, S old, ServiceReference<S> replaceRef, S replace) -> { + accept(instance, oldRef, old, replaceRef, replace); + after.accept(instance, oldRef, old, replaceRef, replace); + }; + } +} Added: felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,27 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +/** + * 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 CbTypeService<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 param + */ + void accept(T instance, S service); + + default CbTypeFuture<T, S> andThen(CbTypeFuture<? super T, S> after) { + Objects.requireNonNull(after); + 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/CbTypeServiceDict.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeServiceDict.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeServiceDict.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeServiceDict.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,29 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Dictionary; +import java.util.Objects; + +/** + * Represents a callback(Component, 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 CbTypeServiceDict<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 param + * @param properties second callback param + */ + void accept(T instance, S service, Dictionary<String, Object> properties); + + default CbTypeServiceDict<T, S> andThen(CbTypeServiceDict<? super T, S> after) { + Objects.requireNonNull(after); + return (T instance, S service, Dictionary<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/CbTypeServiceMap.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeServiceMap.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeServiceMap.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeServiceMap.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,29 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Map; +import java.util.Objects; + +/** + * Represents a callback(Component, 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 CbTypeServiceMap<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 param + * @param properties second callback param + */ + void accept(T instance, S service, Map<String, Object> properties); + + default CbTypeServiceMap<T, S> andThen(CbTypeServiceMap<? super T, S> after) { + Objects.requireNonNull(after); + 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/CbTypeServiceService.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeServiceService.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeServiceService.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/CbTypeServiceService.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,28 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.util.Objects; + +/** + * Represents a 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 CbTypeServiceService<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 param + * @param replace second callback param + */ + void accept(T instance, S old, S replace); + + default CbTypeServiceService<T, S> andThen(CbTypeServiceService<? super T, S> after) { + Objects.requireNonNull(after); + 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/SerializableLambda.java URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/SerializableLambda.java?rev=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/SerializableLambda.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/SerializableLambda.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,9 @@ +package org.apache.felix.dm.lambda.callbacks; + +import java.io.Serializable; + +/** + * Base interface for serializable lambdas. Some lambda must be serializable in order to allow to introspect their type and method signatures. + */ +public interface SerializableLambda extends Serializable { +} Added: 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=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/packageinfo (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/callbacks/packageinfo Sun Jan 31 23:27:05 2016 @@ -0,0 +1 @@ +version 1.0.0 Added: 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=1727869&view=auto ============================================================================== --- felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/AdapterBase.java (added) +++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/lambda/impl/AdapterBase.java Sun Jan 31 23:27:05 2016 @@ -0,0 +1,338 @@ +package org.apache.felix.dm.lambda.impl; + +import java.util.Dictionary; +import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; + +import org.apache.felix.dm.lambda.BundleDependencyBuilder; +import org.apache.felix.dm.lambda.ComponentBuilder; +import org.apache.felix.dm.lambda.ConfigurationDependencyBuilder; +import org.apache.felix.dm.lambda.FluentProperties; +import org.apache.felix.dm.lambda.FutureDependencyBuilder; +import org.apache.felix.dm.lambda.ServiceDependencyBuilder; +import org.apache.felix.dm.lambda.callbacks.CbComponent; +import org.apache.felix.dm.lambda.callbacks.CbConsumer; +import org.apache.felix.dm.lambda.callbacks.CbTypeComponent; + +/** + * Methods common to extended components like adapters or aspects. + * + * TODO javadoc + */ +@SuppressWarnings({"unchecked"}) +public interface AdapterBase<B extends ComponentBuilder<B>> extends ComponentBuilder<B> { + + void andThenBuild(Consumer<ComponentBuilder<?>> builder); + + default B impl(Object impl) { + andThenBuild(compBuilder -> compBuilder.impl(impl)); + return (B) this; + } + + default <U> B impl(Class<U> implClass) { + andThenBuild(compBuilder -> compBuilder.impl(implClass)); + return (B) this; + } + + default B factory(Object factory, String createMethod) { + andThenBuild(compBuilder -> compBuilder.factory(factory, createMethod)); + return (B) this; + } + + default B factory(Supplier<?> create) { + andThenBuild(compBuilder -> compBuilder.factory(create)); + return (B) this; + } + + default <U, V> B factory(Supplier<U> factory, Function<U, V> create) { + andThenBuild(compBuilder -> compBuilder.factory(factory, create)); + return (B) this; + } + + default B factory(Supplier<?> factory, Supplier<Object[]> getComposition) { + andThenBuild(compBuilder -> compBuilder.factory(factory, getComposition)); + return (B) this; + } + + default <U> B factory(Supplier<U> factory, Function<U, ?> create, Function<U, Object[]> getComposition) { + andThenBuild(compBuilder -> compBuilder.factory(factory, create, getComposition)); + return (B) this; + } + + default B provides(Class<?> iface) { + andThenBuild(compBuilder -> compBuilder.provides(iface)); + return (B) this; + } + + default B provides(Class<?> iface, String name, Object value, Object ... rest) { + andThenBuild(compBuilder -> compBuilder.provides(iface, name, value, rest)); + return (B) this; + } + + default B provides(Class<?> iface, FluentProperties ... properties) { + andThenBuild(compBuilder -> compBuilder.provides(iface, properties)); + return (B) this; + } + + default B provides(Class<?> iface, Dictionary<?,?> properties) { + andThenBuild(compBuilder -> compBuilder.provides(iface, properties)); + return (B) this; + } + + default B provides(Class<?>[] ifaces) { + andThenBuild(compBuilder -> compBuilder.provides(ifaces)); + return (B) this; + } + + default B provides(Class<?>[] ifaces, String name, Object value, Object ... rest) { + andThenBuild(compBuilder -> compBuilder.provides(ifaces, name, value, rest)); + return (B) this; + } + + default B provides(Class<?>[] ifaces, FluentProperties ... properties) { + andThenBuild(compBuilder -> compBuilder.provides(ifaces, properties)); + return (B) this; + } + + default B provides(Class<?>[] ifaces, Dictionary<?,?> properties) { + andThenBuild(compBuilder -> compBuilder.provides(ifaces, properties)); + return (B) this; + } + + default B provides(String iface) { + andThenBuild(compBuilder -> compBuilder.provides(iface)); + return (B) this; + } + + default B provides(String iface, String name, Object value, Object ... rest) { + andThenBuild(compBuilder -> compBuilder.provides(iface, name, value, rest)); + return (B) this; + } + + default B provides(String iface, FluentProperties ... properties) { + andThenBuild(compBuilder -> compBuilder.provides(iface, properties)); + return (B) this; + } + + default B provides(String iface, Dictionary<?,?> properties) { + andThenBuild(compBuilder -> compBuilder.provides(iface, properties)); + return (B) this; + } + + default B provides(String[] ifaces) { + andThenBuild(compBuilder -> compBuilder.provides(ifaces)); + return (B) this; + } + + default B provides(String[] ifaces, String name, Object value, Object ... rest) { + andThenBuild(compBuilder -> compBuilder.provides(ifaces, name, value, rest)); + return (B) this; + } + + default B provides(String[] ifaces, FluentProperties ... properties) { + andThenBuild(compBuilder -> compBuilder.provides(ifaces, properties)); + return (B) this; + } + + default B provides(String[] ifaces, Dictionary<?,?> properties) { + andThenBuild(compBuilder -> compBuilder.provides(ifaces, properties)); + return (B) this; + } + + default B properties(Dictionary<?, ?> properties) { + andThenBuild(compBuilder -> compBuilder.properties(properties)); + return (B) this; + } + + default B properties(String name, Object value, Object ... rest) { + andThenBuild(compBuilder -> compBuilder.properties(name, value, rest)); + return (B) this; + } + + default B properties(FluentProperties ...properties) { + andThenBuild(compBuilder -> compBuilder.properties(properties)); + return (B) this; + } + + default B withSrv(Class<?> service, String filter) { + andThenBuild(compBuilder -> compBuilder.withSrv(service, filter)); + return (B) this; + } + + default B withSrv(Class<?> ... services) { + andThenBuild(compBuilder -> compBuilder.withSrv(services)); + return (B) this; + } + + default <U> B withSrv(Class<U> service, Consumer<ServiceDependencyBuilder<U>> consumer) { + andThenBuild(compBuilder -> compBuilder.withSrv(service, consumer)); + return (B) this; + } + + default B withCnf(Consumer<ConfigurationDependencyBuilder> consumer) { + andThenBuild(compBuilder -> compBuilder.withCnf(consumer)); + return (B) this; + } + + default B withBundle(Consumer<BundleDependencyBuilder> consumer) { + andThenBuild(compBuilder -> compBuilder.withBundle(consumer)); + return (B) this; + } + + default <U> B withFuture(CompletableFuture<U> future, Consumer<FutureDependencyBuilder<U>> consumer) { + andThenBuild(compBuilder -> compBuilder.withFuture(future, consumer)); + return (B) this; + } + + default B init(String callback) { + andThenBuild(compBuilder -> compBuilder.init(callback)); + return (B) this; + } + + default B start(String callback) { + andThenBuild(compBuilder -> compBuilder.start(callback)); + return (B) this; + } + + default B stop(String callback) { + andThenBuild(compBuilder -> compBuilder.stop(callback)); + return (B) this; + } + + default B destroy(String callback) { + 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) { + andThenBuild(compBuilder -> compBuilder.init(callback)); + return (B) this; + } + + default <U> B start(CbConsumer<U> callback) { + andThenBuild(compBuilder -> compBuilder.start(callback)); + return (B) this; + } + + default <U> B stop(CbConsumer<U> callback) { + andThenBuild(compBuilder -> compBuilder.stop(callback)); + return (B) this; + } + + default <U> B destroy(CbConsumer<U> callback) { + andThenBuild(compBuilder -> compBuilder.destroy(callback)); + return (B) this; + } + + default <U> B init(CbTypeComponent<U> callback) { + andThenBuild(compBuilder -> compBuilder.init(callback)); + return (B) this; + } + + default <U> B start(CbTypeComponent<U> callback) { + andThenBuild(compBuilder -> compBuilder.start(callback)); + return (B) this; + } + + default <U> B stop(CbTypeComponent<U> callback) { + andThenBuild(compBuilder -> compBuilder.stop(callback)); + return (B) this; + } + + default <U> B destroy(CbTypeComponent<U> callback) { + andThenBuild(compBuilder -> compBuilder.destroy(callback)); + return (B) this; + } + + default B initInstance(Runnable callback) { + andThenBuild(compBuilder -> compBuilder.initInstance(callback)); + return (B) this; + } + + default B startInstance(Runnable callback) { + andThenBuild(compBuilder -> compBuilder.startInstance(callback)); + return (B) this; + } + + default B stopInstance(Runnable callback) { + andThenBuild(compBuilder -> compBuilder.stopInstance(callback)); + return (B) this; + } + + default B destroyInstance(Runnable callback) { + andThenBuild(compBuilder -> compBuilder.destroyInstance(callback)); + return (B) this; + } + + default B initInstance(CbComponent callback) { + andThenBuild(compBuilder -> compBuilder.initInstance(callback)); + return (B) this; + } + + default B startInstance(CbComponent callback) { + andThenBuild(compBuilder -> compBuilder.startInstance(callback)); + return (B) this; + } + + default B stopInstance(CbComponent callback) { + andThenBuild(compBuilder -> compBuilder.stopInstance(callback)); + return (B) this; + } + + default B destroyInstance(CbComponent callback) { + andThenBuild(compBuilder -> compBuilder.destroyInstance(callback)); + return (B) this; + } + + default B autoConfig(Class<?> clazz, boolean autoConfig) { + andThenBuild(compBuilder -> compBuilder.autoConfig(clazz, autoConfig)); + return (B) this; + } + + default B autoConfig(Class<?> clazz, String field) { + andThenBuild(compBuilder -> compBuilder.autoConfig(clazz, field)); + return (B) this; + } + + default B debug(String label) { + andThenBuild(compBuilder -> compBuilder.debug(label)); + return (B) this; + } + + default B composition(String getCompositionMethod) { + andThenBuild(compBuilder -> compBuilder.composition(getCompositionMethod)); + return (B) this; + } + + default B composition(Object instance, String getCompositionMethod) { + andThenBuild(compBuilder -> compBuilder.composition(instance, getCompositionMethod)); + return (B) this; + } + + default B composition(Supplier<Object[]> getCompositionMethod) { + andThenBuild(compBuilder -> compBuilder.composition(getCompositionMethod)); + return (B) this; + } +}
