Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/device/Activator.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/device/Activator.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/device/Activator.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/device/Activator.java Wed Jan 13 22:20:11 2016 @@ -19,7 +19,7 @@ package org.apache.felix.dependencymanager.lambda.samples.device; import static java.lang.System.out; -import static org.apache.felix.dm.builder.lambda.CB.ADD; +import static org.apache.felix.dm.builder.lambda.Cb.ADD; import org.apache.felix.dm.builder.lambda.DependencyActivatorBase; import org.osgi.service.log.LogService; @@ -47,10 +47,10 @@ public class Activator extends Dependenc private void createDeviceAndParameter(int id) { component(buicomplder -> buicomplder .factory(() -> new DeviceImpl(id)) - .provides(Device.class).properties("device.id", id)); + .provides(Device.class, "device.id", id)); component(comp -> comp .factory(() -> new DeviceParameterImpl(id)) - .provides(DeviceParameter.class).properties("device.id", id)); + .provides(DeviceParameter.class, "device.id", id)); } }
Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/factory/Activator.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/factory/Activator.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/factory/Activator.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/factory/Activator.java Wed Jan 13 22:20:11 2016 @@ -19,7 +19,7 @@ package org.apache.felix.dependencymanager.lambda.samples.factory; import static java.lang.System.out; -import static org.apache.felix.dm.builder.lambda.CB.ADD; +import static org.apache.felix.dm.builder.lambda.Cb.ADD; import org.apache.felix.dm.builder.lambda.DependencyActivatorBase; import org.osgi.service.log.LogService; Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/future/Activator.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/future/Activator.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/future/Activator.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/future/Activator.java Wed Jan 13 22:20:11 2016 @@ -19,7 +19,7 @@ package org.apache.felix.dependencymanager.lambda.samples.future; import static java.lang.System.out; -import static org.apache.felix.dm.builder.lambda.CB.ADD; +import static org.apache.felix.dm.builder.lambda.Cb.ADD; import java.util.List; import java.util.concurrent.CompletableFuture; Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/hello/Activator.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/hello/Activator.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/hello/Activator.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/hello/Activator.java Wed Jan 13 22:20:11 2016 @@ -19,7 +19,7 @@ package org.apache.felix.dependencymanager.lambda.samples.hello; import static java.lang.System.out; -import static org.apache.felix.dm.builder.lambda.CB.ADD; +import static org.apache.felix.dm.builder.lambda.Cb.ADD; import org.apache.felix.dm.builder.lambda.DependencyActivatorBase; import org.osgi.service.cm.ConfigurationAdmin; @@ -35,17 +35,14 @@ public class Activator extends Dependenc component(comp -> comp .impl(ServiceProviderImpl.class) - .provides(ServiceProvider.class) - .properties(foo -> "bar", gabu -> "zo") // property names are deduced from lambda parameter names + .provides(ServiceProvider.class, property1 -> "value1", property2 -> 123) // property names are deduced from lambda parameter names .start(ServiceProviderImpl::activate) .withService(LogService.class, srv -> srv.cb(ADD, ServiceProviderImpl::bind))); - // service can also be injected using reflection: - // .withService(LogService.class, srv -> srv.cb("bind"))); component(comp -> comp .impl(ServiceConsumer.class) .withService(LogService.class) - .withService(ServiceProvider.class, srv -> srv.filter("(foo=bar)")) + .withService(ServiceProvider.class, srv -> srv.filter("(property1=value1)")) .withConfiguration(conf -> conf.pid(ServiceConsumer.class).cb(ServiceConsumer::updated))); component(comp -> comp.impl(Configurator.class).withService(ConfigurationAdmin.class)); Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/rx/completable/Activator.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/rx/completable/Activator.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/rx/completable/Activator.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dependencymanager/lambda/samples/rx/completable/Activator.java Wed Jan 13 22:20:11 2016 @@ -19,7 +19,7 @@ package org.apache.felix.dependencymanager.lambda.samples.rx.completable; import static java.lang.System.out; -import static org.apache.felix.dm.builder.lambda.CB.ADD; +import static org.apache.felix.dm.builder.lambda.Cb.ADD; import org.apache.felix.dm.builder.lambda.DependencyActivatorBase; import org.osgi.service.log.LogService; Added: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/Cb.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/Cb.java?rev=1724517&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/Cb.java (added) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/Cb.java Wed Jan 13 22:20:11 2016 @@ -0,0 +1,21 @@ +package org.apache.felix.dm.builder.lambda; + +/** + * Defines various types of dependency callbacks. + */ +public enum Cb { + /** + * Service is added. + */ + ADD, + + /** + * Service properties updated + */ + CHG, + + /** + * Service removed. + */ + REM +} Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilder.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilder.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilder.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilder.java Wed Jan 13 22:20:11 2016 @@ -24,7 +24,7 @@ import java.util.function.Supplier; * component(comp -> comp * .factory(ServiceImplFactory::new, ServiceImplFactory::create) * .provides(Service.class) - * .withService(LogService.class, srv -> srv.required().onAdd(ServiceImpl::set)) + * .withService(LogService.class, srv -> srv.required().cb(ADD, ServiceImpl::set)) * .start(ServiceImpl::activate)); * } * } Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilderBase.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilderBase.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilderBase.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ComponentBuilderBase.java Wed Jan 13 22:20:11 2016 @@ -16,19 +16,25 @@ import org.apache.felix.dm.builder.lambd * @param <B> the builder that extends this class. */ public interface ComponentBuilderBase<T, B extends ComponentBuilderBase<T, B>> { - /** - * Configures the services registered by this component in the OSGgi registry - * @param ifaces the OSGi service(s) components. - * @return this builder - */ - B provides(Class<?> ... ifaces); - - /** - * Configures the services registered by this component in the OSGgi registry - * @param ifaces the OSGi service(s) components. - * @return this builder - */ - B provides(String ... ifaces); + B provides(Class<?> iface); + B provides(Class<?> iface, String name, Object value, Object ... rest); + B provides(Class<?> iface, FluentProperties ... properties); + B provides(Class<?> iface, Dictionary<?,?> properties); + + B provides(Class<?>[] ifaces); + B provides(Class<?>[] ifaces, String name, Object value, Object ... rest); + B provides(Class<?>[] ifaces, FluentProperties ... properties); + B provides(Class<?>[] ifaces, Dictionary<?,?> properties); + + B provides(String iface); + B provides(String iface, String name, Object value, Object ... rest); + B provides(String iface, FluentProperties ... properties); + B provides(String iface, Dictionary<?,?> properties); + + B provides(String[] ifaces); + B provides(String[] ifaces, String name, Object value, Object ... rest); + B provides(String[] ifaces, FluentProperties ... properties); + B provides(String[] ifaces, Dictionary<?,?> properties); /** * Sets the component's service properties Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/DependencyActivatorBase.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/DependencyActivatorBase.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/DependencyActivatorBase.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/DependencyActivatorBase.java Wed Jan 13 22:20:11 2016 @@ -74,6 +74,32 @@ public abstract class DependencyActivato } /** + * Creates a Component builder that can be used to create a Component. + * @return a Component builder that can be used to create a Component. + */ + protected ComponentBuilder<?> component() { + return new ComponentBuilderImpl<Object>(m_manager); + } + + /** + * Creates a service Aspect builder that can be used to create an Aspect Component. + * @return a service Aspect builder that can be used to create an Aspect Component. + */ + protected <T> ServiceAspectBuilder<T, ?> aspect(Class<T> aspectType) { + ServiceAspectBuilderImpl<T, ?> aspectBuilder = new ServiceAspectBuilderImpl<>(m_manager, aspectType); + return aspectBuilder; + } + + /** + * Creates a service Adapter builder that can be used to create an Adapter Component. + * @return a service Adapter builder that can be used to create an Adapter Component. + */ + protected <T> ServiceAdapterBuilder<T,?> adapter(Class<T> adapteeType) { + ServiceAdapterBuilderImpl<T, ?> adapterBuilder = new ServiceAdapterBuilderImpl<>(m_manager, adapteeType); + return adapterBuilder; + } + + /** * Builds a DM Component using a Java8 style ComponentBuilder. * @param consumer the lambda that will use the ComponentBuilder for building the DM component. * The component is auto-added to the DependencyManager, unless the lambda calls the ComponentBuilder.autoAdd(false) method. @@ -116,6 +142,36 @@ public abstract class DependencyActivato // These static methods can be used when building DM components outside of an activator. /** + * Creates a Component builder that can be used to create a Component. + * @return a Component builder that can be used to create a Component. + */ + public static ComponentBuilder<?> component(DependencyManager dm) { + return new ComponentBuilderImpl<Object>(dm); + } + + /** + * Creates a service Aspect builder that can be used to create an Aspect Component. + * @param dm the DependencyManager object used to register the built component + * @param aspect the type of the aspect service + * @return a service Aspect builder that can be used to create an Aspect Component. + */ + public static <T> ServiceAspectBuilder<T, ?> aspect(DependencyManager dm, Class<T> aspect) { + ServiceAspectBuilderImpl<T, ?> aspectBuilder = new ServiceAspectBuilderImpl<>(dm, aspect); + return aspectBuilder; + } + + /** + * Creates a service Adapter builder that can be used to create an Adapter Component. + * @param dm the DependencyManager object used to register the built component + * @param adaptee the type of the adaptee service + * @return a service Adapter builder that can be used to create an Adapter Component. + */ + public static <T> ServiceAdapterBuilder<T,?> adapter(DependencyManager dm, Class<T> adaptee) { + ServiceAdapterBuilderImpl<T, ?> adapterBuilder = new ServiceAdapterBuilderImpl<>(dm, adaptee); + return adapterBuilder; + } + + /** * Builds a component using a lambda and a component builder * @param dm the DependencyManager where the component is auto-added (unless the component.autoAdd(false) is called) * @param consumer a lambda that is called to build the component. When the lambda is called, it will be provided with a @@ -165,7 +221,7 @@ public abstract class DependencyActivato /** * Builds an adapter DM Component. * @param dm the DependencyManager object used to register the built component - * @param aspect the type of the adaptee service + * @param adaptee the type of the adapted service * @param consumer a lambda used to build the DM adapter component * @return a new DM adapter component. The adapter component is auto-added into the dm object, unless the lambda calls * the AspectBuilder.autoAdd(false) method is called. Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceCallbacksBuilder.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceCallbacksBuilder.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceCallbacksBuilder.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/ServiceCallbacksBuilder.java Wed Jan 13 22:20:11 2016 @@ -68,29 +68,29 @@ public interface ServiceCallbacksBuilder B cb(String add, String change, String remove); B cb(String add, String change, String remove, String swap); - <T> B cb(CB cbType, CbTypeService<T, S> callback); - <T> B cb(CB cbType, CbTypeServiceMap<T, S> callback); - <T> B cb(CB cbType, CbTypeServiceDict<T, S> callback); - <T> B cb(CB cbType, CbTypeRef<T, S> callback); - <T> B cb(CB cbType, CbTypeRefService<T, S> callback); - <T> B cb(CB cbType, CbTypeComponent<T> callback); - <T> B cb(CB cbType, CbTypeComponentService<T, S> callback); - <T> B cb(CB cbType, CbTypeComponentServiceMap<T, S> callback); - <T> B cb(CB cbType, CbTypeComponentServiceDict<T, S> callback); - <T> B cb(CB cbType, CbTypeComponentRef<T, S> callback); - <T> B cb(CB cbType, CbTypeComponentRefService<T, S> callback); + <T> B cb(Cb callbackType, CbTypeService<T, S> callback); + <T> B cb(Cb callbackType, CbTypeServiceMap<T, S> callback); + <T> B cb(Cb callbackType, CbTypeServiceDict<T, S> callback); + <T> B cb(Cb callbackType, CbTypeRef<T, S> callback); + <T> B cb(Cb callbackType, CbTypeRefService<T, S> callback); + <T> B cb(Cb callbackType, CbTypeComponent<T> callback); + <T> B cb(Cb callbackType, CbTypeComponentService<T, S> callback); + <T> B cb(Cb callbackType, CbTypeComponentServiceMap<T, S> callback); + <T> B cb(Cb callbackType, CbTypeComponentServiceDict<T, S> callback); + <T> B cb(Cb callbackType, CbTypeComponentRef<T, S> callback); + <T> B cb(Cb callbackType, CbTypeComponentRefService<T, S> callback); - B cbi(CB cbType, CbService<S> callback); - B cbi(CB cbType, CbServiceMap<S> callback); - B cbi(CB cbType, CbServiceDict<S> callback); - B cbi(CB cbType, CbRef<S> callback); - B cbi(CB cbType, CbRefService<S> callback); - B cbi(CB cbType, CbComponent callback); - B cbi(CB cbType, CbComponentService<S> callback); - B cbi(CB cbType, CbComponentServiceMap<S> callback); - B cbi(CB cbType, CbComponentServiceDict<S> callback); - B cbi(CB cbType, CbComponentRef<S> callback); - B cbi(CB cbType, CbComponentRefService<S> callback); + B cbi(Cb callbackType, CbService<S> callback); + B cbi(Cb callbackType, CbServiceMap<S> callback); + B cbi(Cb callbackType, CbServiceDict<S> callback); + B cbi(Cb callbackType, CbRef<S> callback); + B cbi(Cb callbackType, CbRefService<S> callback); + B cbi(Cb callbackType, CbComponent callback); + B cbi(Cb callbackType, CbComponentService<S> callback); + B cbi(Cb callbackType, CbComponentServiceMap<S> callback); + B cbi(Cb callbackType, CbComponentServiceDict<S> callback); + B cbi(Cb callbackType, CbComponentRef<S> callback); + B cbi(Cb callbackType, CbComponentRefService<S> callback); <T> B sw(CbTypeServiceService<T, S> swap); <T> B sw(CbTypeRefServiceRefService<T, S> swap); Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/AdapterBase.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/AdapterBase.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/AdapterBase.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/AdapterBase.java Wed Jan 13 22:20:11 2016 @@ -25,15 +25,87 @@ public interface AdapterBase<T, B extend void andThenBuild(Consumer<ComponentBuilder<T>> builder); - default B provides(Class<?> ... ifaces) { + 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 ... ifaces) { + + 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)); Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ComponentBuilderImpl.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ComponentBuilderImpl.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ComponentBuilderImpl.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ComponentBuilderImpl.java Wed Jan 13 22:20:11 2016 @@ -62,17 +62,113 @@ public class ComponentBuilderImpl<T> imp } @Override - public ComponentBuilderImpl<T> provides(Class<?>... ifaces) { + public ComponentBuilderImpl<T> provides(Class<?> iface) { + m_serviceNames = new String[] {iface.getName()}; + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(Class<?> iface, String name, Object value, Object ... rest) { + provides(iface); + properties(name, value, rest); + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(Class<?> iface, FluentProperties ... properties) { + provides(iface); + properties(properties); + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(Class<?> iface, Dictionary<?,?> properties) { + provides(iface); + properties(properties); + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(Class<?>[] ifaces) { m_serviceNames = Stream.of(ifaces).map(c -> c.getName()).toArray(String[]::new); return this; } + + @Override + public ComponentBuilderImpl<T> provides(Class<?>[] ifaces, String name, Object value, Object ... rest) { + provides(ifaces); + properties(name, value, rest); + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(Class<?>[] ifaces, FluentProperties ... properties) { + provides(ifaces); + properties(properties); + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(Class<?>[] ifaces, Dictionary<?,?> properties) { + provides(ifaces); + properties(properties); + return this; + } @Override - public ComponentBuilderImpl<T> provides(String... ifaces) { - m_serviceNames = ifaces; + public ComponentBuilderImpl<T> provides(String iface) { + m_serviceNames = new String[] {iface}; + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(String iface, String name, Object value, Object ... rest) { + provides(iface); + properties(name, value, rest); + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(String iface, FluentProperties ... properties) { + provides(iface); + properties(properties); + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(String iface, Dictionary<?,?> properties) { + provides(iface); + properties(properties); return this; } + @Override + public ComponentBuilderImpl<T> provides(String[] ifaces) { + m_serviceNames = ifaces; + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(String[] ifaces, String name, Object value, Object ... rest) { + provides(ifaces); + properties(name, value, rest); + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(String[] ifaces, FluentProperties ... properties) { + provides(ifaces); + properties(properties); + return this; + } + + @Override + public ComponentBuilderImpl<T> provides(String[] ifaces, Dictionary<?,?> properties) { + provides(ifaces); + properties(properties); + return this; + } + @SuppressWarnings("unchecked") @Override public ComponentBuilderImpl<T> properties(Dictionary<?, ?> properties) { Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceCallbacksBuilderImpl.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceCallbacksBuilderImpl.java?rev=1724517&r1=1724516&r2=1724517&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceCallbacksBuilderImpl.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceCallbacksBuilderImpl.java Wed Jan 13 22:20:11 2016 @@ -7,7 +7,7 @@ import java.util.Map; import java.util.stream.Stream; import org.apache.felix.dm.Component; -import org.apache.felix.dm.builder.lambda.CB; +import org.apache.felix.dm.builder.lambda.Cb; import org.apache.felix.dm.builder.lambda.Functions.CbComponent; import org.apache.felix.dm.builder.lambda.Functions.CbComponentRef; import org.apache.felix.dm.builder.lambda.Functions.CbComponentRefService; @@ -144,112 +144,112 @@ public abstract class ServiceCallbacksBu return (B) this; } - public <T> B cb(CB cbType, CbTypeService<T, S> callback) { + public <T> B cb(Cb cbType, CbTypeService<T, S> callback) { return setComponentCallbackRef(getCallback(cbType), Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, service)); } - public <T> B cb(CB cbType, CbTypeServiceMap<T, S> callback) { + public <T> B cb(Cb cbType, CbTypeServiceMap<T, S> callback) { return setComponentCallbackRef(getCallback(cbType), Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, service, new SRefAsMap(ref))); } - public <T> B cb(CB cbType, CbTypeServiceDict<T, S> callback) { + public <T> B cb(Cb cbType, CbTypeServiceDict<T, S> callback) { return setComponentCallbackRef(getCallback(cbType), Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, service, new SRefAsDictionary(ref))); } - public <T> B cb(CB cbType, CbTypeRef<T, S> callback) { + public <T> B cb(Cb cbType, CbTypeRef<T, S> callback) { return setComponentCallbackRef(getCallback(cbType), Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, ref)); } - public <T> B cb(CB cbType, CbTypeRefService<T, S> callback) { + public <T> B cb(Cb cbType, CbTypeRefService<T, S> callback) { return setComponentCallbackRef(getCallback(cbType), Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, ref, service)); } - public <T> B cb(CB cbType, CbTypeComponent<T> callback) { + public <T> B cb(Cb cbType, CbTypeComponent<T> callback) { return setComponentCallbackRef(getCallback(cbType), Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, component)); } - public <T> B cb(CB cbType, CbTypeComponentService<T, S> callback) { + public <T> B cb(Cb cbType, CbTypeComponentService<T, S> callback) { return setComponentCallbackRef(getCallback(cbType), Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, component, service)); } - public <T> B cb(CB cbType, CbTypeComponentServiceMap<T, S> callback) { + public <T> B cb(Cb cbType, CbTypeComponentServiceMap<T, S> callback) { return setComponentCallbackRef(getCallback(cbType), Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, component, service, new SRefAsMap(ref))); } - public <T> B cb(CB cbType, CbTypeComponentServiceDict<T, S> callback) { + public <T> B cb(Cb cbType, CbTypeComponentServiceDict<T, S> callback) { return setComponentCallbackRef(getCallback(cbType), Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, component, service, new SRefAsDictionary(ref))); } - public <T> B cb(CB cbType, CbTypeComponentRef<T, S> callback) { + public <T> B cb(Cb cbType, CbTypeComponentRef<T, S> callback) { return setComponentCallbackRef(getCallback(cbType), Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, component, ref)); } - public <T> B cb(CB cbType, CbTypeComponentRefService<T, S> callback) { + public <T> B cb(Cb cbType, CbTypeComponentRefService<T, S> callback) { return setComponentCallbackRef(getCallback(cbType), Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, component, ref, service)); } - public B cbi(CB cbType, CbService<S> callback) { + public B cbi(Cb cbType, CbService<S> callback) { return setInstanceCallbackRef(getCallback(cbType), (instance, component, ref, service) -> callback.accept(service)); } - public B cbi(CB cbType, CbServiceMap<S> callback) { + public B cbi(Cb cbType, CbServiceMap<S> callback) { return setInstanceCallbackRef(getCallback(cbType), (instance, component, ref, service) -> callback.accept(service, new SRefAsMap(ref))); } - public B cbi(CB cbType, CbServiceDict<S> callback) { + public B cbi(Cb cbType, CbServiceDict<S> callback) { return setInstanceCallbackRef(getCallback(cbType), (instance, component, ref, service) -> callback.accept(service, new SRefAsDictionary(ref))); } - public B cbi(CB cbType, CbRef<S> callback) { + public B cbi(Cb cbType, CbRef<S> callback) { return setInstanceCallbackRef(getCallback(cbType), (instance, component, ref, service) -> callback.accept(ref)); } - public B cbi(CB cbType, CbRefService<S> callback) { + public B cbi(Cb cbType, CbRefService<S> callback) { return setInstanceCallbackRef(getCallback(cbType), (instance, component, ref, service) -> callback.accept(ref, service)); } - public B cbi(CB cbType, CbComponent callback) { + public B cbi(Cb cbType, CbComponent callback) { return setInstanceCallbackRef(getCallback(cbType), (instance, component, ref, service) -> callback.accept(component)); } - public B cbi(CB cbType, CbComponentService<S> callback) { + public B cbi(Cb cbType, CbComponentService<S> callback) { return setInstanceCallbackRef(getCallback(cbType), (instance, component, ref, service) -> callback.accept(component, service)); } - public B cbi(CB cbType, CbComponentServiceMap<S> callback) { + public B cbi(Cb cbType, CbComponentServiceMap<S> callback) { return setInstanceCallbackRef(getCallback(cbType), (instance, component, ref, service) -> callback.accept(component, service, new SRefAsMap(ref))); } - public B cbi(CB cbType, CbComponentServiceDict<S> callback) { + public B cbi(Cb cbType, CbComponentServiceDict<S> callback) { return setInstanceCallbackRef(getCallback(cbType), (instance, component, ref, service) -> callback.accept(component, service, new SRefAsDictionary(ref))); } - public B cbi(CB cbType, CbComponentRef<S> callback) { + public B cbi(Cb cbType, CbComponentRef<S> callback) { return setInstanceCallbackRef(getCallback(cbType), (instance, component, ref, service) -> callback.accept(component, ref)); } - public B cbi(CB cbType, CbComponentRefService<S> callback) { + public B cbi(Cb cbType, CbComponentRefService<S> callback) { return setInstanceCallbackRef(getCallback(cbType), (instance, component, ref, service) -> callback.accept(component, ref, service)); } @@ -397,7 +397,7 @@ public abstract class ServiceCallbacksBu } } - private String getCallback(CB cbType) { + private String getCallback(Cb cbType) { switch (cbType) { case ADD: return "add"; case CHG: return "change";
