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=1726125&r1=1726124&r2=1726125&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 Thu Jan 21 22:52:22 2016 @@ -60,32 +60,68 @@ public interface ServiceCallbacksBuilder B cb(String ... callbacks); B cbi(Object callbackInstance, String ... callbacks); - <T> B cb(Cb callbackType, CbTypeService<T, S> callback); - B cbi(Cb callbackType, CbService<S> callback); + <T> B cb(CbTypeService<T, S> add); + <T> B cb(CbTypeService<T, S> add, CbTypeService<T, S> remove); + <T> B cb(CbTypeService<T, S> add, CbTypeService<T, S> change, CbTypeService<T, S> remove); + B cbi(CbService<S> add); + B cbi(CbService<S> add, CbService<S> remove); + B cbi(CbService<S> add, CbService<S> change, CbService<S> remove); - <T> B cb(Cb callbackType, CbTypeServiceMap<T, S> callback); - B cbi(Cb callbackType, CbServiceMap<S> callback); - - <T> B cb(Cb callbackType, CbTypeServiceDict<T, S> callback); - B cbi(Cb callbackType, CbServiceDict<S> callback); - - <T> B cb(Cb callbackType, CbTypeRefService<T, S> callback); - B cbi(Cb callbackType, CbRefService<S> callback); - - <T> B cb(Cb callbackType, CbTypeRef<T, S> callback); - B cbi(Cb callbackType, CbRef<S> callback); - - <T> B cb(Cb callbackType, CbTypeComponent<T> callback); - B cbi(Cb callbackType, CbComponent callback); - - <T> B cb(Cb callbackType, CbTypeComponentRef<T, S> callback); - B cbi(Cb callbackType, CbComponentRef<S> callback); - - <T> B cb(Cb callbackType, CbTypeComponentService<T, S> callback); - B cbi(Cb callbackType, CbComponentRefService<S> callback); - - <T> B cb(Cb callbackType, CbTypeComponentRefService<T, S> callback); - B cbi(Cb callbackType, CbComponentService<S> callback); + <T> B cb(CbTypeServiceMap<T, S> add); + <T> B cb(CbTypeServiceMap<T, S> add, CbTypeServiceMap<T, S> remove); + <T> B cb(CbTypeServiceMap<T, S> add, CbTypeServiceMap<T, S> change, CbTypeServiceMap<T, S> remove); + B cbi(CbServiceMap<S> add); + B cbi(CbServiceMap<S> add, CbServiceMap<S> remove); + B cbi(CbServiceMap<S> add, CbServiceMap<S> change, CbServiceMap<S> remove); + + <T> B cb(CbTypeServiceDict<T, S> add); + <T> B cb(CbTypeServiceDict<T, S> add, CbTypeServiceDict<T, S> remove); + <T> B cb(CbTypeServiceDict<T, S> add, CbTypeServiceDict<T, S> change, CbTypeServiceDict<T, S> remove); + B cbi(CbServiceDict<S> add); + B cbi(CbServiceDict<S> add, CbServiceDict<S> remove); + B cbi(CbServiceDict<S> add, CbServiceDict<S> change, CbServiceDict<S> remove); + + <T> B cb(CbTypeRefService<T, S> add); + <T> B cb(CbTypeRefService<T, S> add, CbTypeRefService<T, S> remove); + <T> B cb(CbTypeRefService<T, S> add, CbTypeRefService<T, S> change, CbTypeRefService<T, S> remove); + B cbi(CbRefService<S> add); + B cbi(CbRefService<S> add, CbRefService<S> remove); + B cbi(CbRefService<S> add, CbRefService<S> change, CbRefService<S> remove); + + <T> B cb(CbTypeRef<T, S> add); + <T> B cb(CbTypeRef<T, S> add, CbTypeRef<T, S> remove); + <T> B cb(CbTypeRef<T, S> add, CbTypeRef<T, S> change, CbTypeRef<T, S> remove); + B cbi(CbRef<S> add); + B cbi(CbRef<S> add, CbRef<S> remove); + B cbi(CbRef<S> add, CbRef<S> change, CbRef<S> remove); + + <T> B cb(CbTypeComponent<T> add); + <T> B cb(CbTypeComponent<T> add, CbTypeComponent<T> remove); + <T> B cb(CbTypeComponent<T> add, CbTypeComponent<T> change, CbTypeComponent<T> remove); + B cbi(CbComponent add); + B cbi(CbComponent add, CbComponent remove); + B cbi(CbComponent add, CbComponent change, CbComponent remove); + + <T> B cb(CbTypeComponentRef<T, S> add); + <T> B cb(CbTypeComponentRef<T, S> add, CbTypeComponentRef<T, S> remove); + <T> B cb(CbTypeComponentRef<T, S> add, CbTypeComponentRef<T, S> change, CbTypeComponentRef<T, S> remove); + B cbi(CbComponentRef<S> add); + B cbi(CbComponentRef<S> add, CbComponentRef<S> remove); + B cbi(CbComponentRef<S> add, CbComponentRef<S> change, CbComponentRef<S> remove); + + <T> B cb(CbTypeComponentService<T, S> add); + <T> B cb(CbTypeComponentService<T, S> add, CbTypeComponentService<T, S> remove); + <T> B cb(CbTypeComponentService<T, S> add, CbTypeComponentService<T, S> change, CbTypeComponentService<T, S> remove); + B cbi(CbComponentService<S> add); + B cbi(CbComponentService<S> add, CbComponentService<S> remove); + B cbi(CbComponentService<S> add, CbComponentService<S> change, CbComponentService<S> remove); + + <T> B cb(CbTypeComponentRefService<T, S> add); + <T> B cb(CbTypeComponentRefService<T, S> add, CbTypeComponentRefService<T, S> remove); + <T> B cb(CbTypeComponentRefService<T, S> add, CbTypeComponentRefService<T, S> change, CbTypeComponentRefService<T, S> remove); + B cbi(CbComponentRefService<S> add); + B cbi(CbComponentRefService<S> add, CbComponentRefService<S> remove); + B cbi(CbComponentRefService<S> add, CbComponentRefService<S> change, CbComponentRefService<S> remove); <T> B sw(CbTypeServiceService<T, S> swap); B swi(CbServiceService<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=1726125&r1=1726124&r2=1726125&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 Thu Jan 21 22:52:22 2016 @@ -7,7 +7,6 @@ import java.util.function.Function; import java.util.function.Supplier; import org.apache.felix.dm.builder.lambda.BundleDependencyBuilder; -import org.apache.felix.dm.builder.lambda.Cb; import org.apache.felix.dm.builder.lambda.ComponentBuilder; import org.apache.felix.dm.builder.lambda.ConfigurationDependencyBuilder; import org.apache.felix.dm.builder.lambda.Functions.CbComponent; @@ -167,8 +166,8 @@ public interface AdapterBase<B extends C return (B) this; } - default B withService(Class<?> service, Class<?> ... services) { - andThenBuild(compBuilder -> compBuilder.withService(service, services)); + default B withService(Class<?> ... services) { + andThenBuild(compBuilder -> compBuilder.withService(services)); return (B) this; } @@ -177,8 +176,8 @@ public interface AdapterBase<B extends C return (B) this; } - default B withConfiguration(Consumer<ConfigurationDependencyBuilder> consumer) { - andThenBuild(compBuilder -> compBuilder.withConfiguration(consumer)); + default B withConf(Consumer<ConfigurationDependencyBuilder> consumer) { + andThenBuild(compBuilder -> compBuilder.withConf(consumer)); return (B) this; } Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleAdapterBuilderImpl.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/BundleAdapterBuilderImpl.java?rev=1726125&r1=1726124&r2=1726125&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleAdapterBuilderImpl.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleAdapterBuilderImpl.java Thu Jan 21 22:52:22 2016 @@ -10,7 +10,6 @@ import java.util.stream.Stream; import org.apache.felix.dm.Component; import org.apache.felix.dm.DependencyManager; import org.apache.felix.dm.builder.lambda.BundleAdapterBuilder; -import org.apache.felix.dm.builder.lambda.Cb; import org.apache.felix.dm.builder.lambda.ComponentBuilder; import org.apache.felix.dm.builder.lambda.Functions.CbBundle; import org.apache.felix.dm.builder.lambda.Functions.CbComponentBundle; @@ -34,6 +33,12 @@ public class BundleAdapterBuilderImpl im private String m_change; private String m_remove; + enum Cb { + ADD, + CHG, + REM + }; + @FunctionalInterface interface MethodRef<I> { public void accept(I instance, Component c, Bundle b); @@ -112,23 +117,83 @@ public class BundleAdapterBuilderImpl im m_remove = remove; return this; } + + public <T> BundleAdapterBuilder cb(CbTypeBundle<T> add) { + return cb(add, null, null); + } + + public <T> BundleAdapterBuilder cb(CbTypeBundle<T> add, CbTypeBundle<T> remove) { + return cb(add, null, remove); + } + + public <T> BundleAdapterBuilder cb(CbTypeBundle<T> add, CbTypeBundle<T> change, CbTypeBundle<T> remove) { + if (add != null) { + Class<T> type = Helpers.getLambdaArgType(add, 0); + setComponentCallbackRef(Cb.ADD, type, (instance, component, bundle) -> { add.accept((T) instance, bundle); }); + } + if (change != null) { + Class<T> type = Helpers.getLambdaArgType(change, 0); + setComponentCallbackRef(Cb.CHG, type, (instance, component, bundle) -> { change.accept((T) instance, bundle); }); + } + if (remove != null) { + Class<T> type = Helpers.getLambdaArgType(remove, 0); + setComponentCallbackRef(Cb.REM, type, (instance, component, bundle) -> { remove.accept((T) instance, bundle); }); + } + return this; + } + + public BundleAdapterBuilder cbi(CbBundle add) { + return cbi(add, null, null); + } - public <T> BundleAdapterBuilder cb(Cb callbackType, CbTypeBundle<T> callback) { - Class<T> type = Helpers.getLambdaGenericType(callback, 0); - return setComponentCallbackRef(callbackType, type, (instance, component, bundle) -> { callback.accept((T) instance, bundle); }); + public BundleAdapterBuilder cbi(CbBundle add, CbBundle remove) { + return cbi(add, null, remove); } - public <T> BundleAdapterBuilder cb(Cb callbackType, CbTypeComponentBundle<T> callback) { - Class<T> type = Helpers.getLambdaGenericType(callback, 0); - return setComponentCallbackRef(callbackType, type, (instance, component, bundle) -> { callback.accept((T) instance, component, bundle); }); + public BundleAdapterBuilder cbi(CbBundle add, CbBundle change, CbBundle remove) { + if (add != null) setInstanceCallbackRef(Cb.ADD, (instance, component, bundle) -> { add.accept(bundle); }); + if (change != null) setInstanceCallbackRef(Cb.CHG, (instance, component, bundle) -> { change.accept(bundle); }); + if (remove != null) setInstanceCallbackRef(Cb.REM, (instance, component, bundle) -> { remove.accept(bundle); }); + return this; } - public BundleAdapterBuilder cbi(Cb callbackType, CbBundle callback) { - return setInstanceCallbackRef(callbackType, (instance, component, bundle) -> { callback.accept(bundle); }); + public <T> BundleAdapterBuilder cb(CbTypeComponentBundle<T> add) { + return cb(add, null, null); } - public BundleAdapterBuilder cbi(Cb callbackType, CbComponentBundle callback) { - return setInstanceCallbackRef(callbackType, (instance, component, bundle) -> { callback.accept(component, bundle); }); + public <T> BundleAdapterBuilder cb(CbTypeComponentBundle<T> add, CbTypeComponentBundle<T> remove) { + return cb(add, null, remove); + } + + public <T> BundleAdapterBuilder cb(CbTypeComponentBundle<T> add, CbTypeComponentBundle<T> change, CbTypeComponentBundle<T> remove) { + if (add != null) { + Class<T> type = Helpers.getLambdaArgType(add, 0); + return setComponentCallbackRef(Cb.ADD, type, (instance, component, bundle) -> { add.accept((T) instance, component, bundle); }); + } + if (change != null) { + Class<T> type = Helpers.getLambdaArgType(change, 0); + return setComponentCallbackRef(Cb.CHG, type, (instance, component, bundle) -> { change.accept((T) instance, component, bundle); }); + } + if (remove != null) { + Class<T> type = Helpers.getLambdaArgType(remove, 0); + return setComponentCallbackRef(Cb.ADD, type, (instance, component, bundle) -> { remove.accept((T) instance, component, bundle); }); + } + return this; + } + + public BundleAdapterBuilder cbi(CbComponentBundle add) { + return cbi(add, null, null); + } + + public BundleAdapterBuilder cbi(CbComponentBundle add, CbComponentBundle remove) { + return cbi(add, null, remove); + } + + public BundleAdapterBuilder cbi(CbComponentBundle add, CbComponentBundle change, CbComponentBundle remove) { + if (add != null) setInstanceCallbackRef(Cb.ADD, (instance, component, bundle) -> { add.accept(component, bundle); }); + if (change != null) setInstanceCallbackRef(Cb.CHG, (instance, component, bundle) -> { change.accept(component, bundle); }); + if (remove != null) setInstanceCallbackRef(Cb.REM, (instance, component, bundle) -> { remove.accept(component, bundle); }); + return this; } @Override @@ -168,7 +233,6 @@ public class BundleAdapterBuilderImpl im @SuppressWarnings("unchecked") private <U> BundleAdapterBuilder setComponentCallbackRef(Cb cbType, Class<U> type, MethodRef<U> ref) { - cbType.ensureServiceCallback(); checkHasNoReflectionCallbacks(); List<MethodRef<Object>> list = m_refs.computeIfAbsent(cbType, l -> new ArrayList<>()); list.add((instance, component, bundle) -> { Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleDependencyBuilderImpl.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/BundleDependencyBuilderImpl.java?rev=1726125&r1=1726124&r2=1726125&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleDependencyBuilderImpl.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/BundleDependencyBuilderImpl.java Thu Jan 21 22:52:22 2016 @@ -13,7 +13,6 @@ import org.apache.felix.dm.BundleDepende import org.apache.felix.dm.Component; import org.apache.felix.dm.DependencyManager; import org.apache.felix.dm.builder.lambda.BundleDependencyBuilder; -import org.apache.felix.dm.builder.lambda.Cb; import org.apache.felix.dm.builder.lambda.Functions.CbBundle; import org.apache.felix.dm.builder.lambda.Functions.CbComponentBundle; import org.apache.felix.dm.builder.lambda.Functions.CbTypeBundle; @@ -38,6 +37,12 @@ public class BundleDependencyBuilderImpl private Supplier<Dictionary<?, ?>> m_propagateSupplier; private final Component m_component; + enum Cb { + ADD, + CHG, + REM + }; + private final Map<Cb, List<MethodRef<Object>>> m_refs = new HashMap<>(); @FunctionalInterface @@ -169,25 +174,87 @@ public class BundleDependencyBuilderImpl } @Override - public <T> BundleDependencyBuilder cb(Cb callbackType, CbTypeBundle<T> callback) { - return setComponentCallbackRef(callbackType, Helpers.getLambdaGenericType(callback, 0), - (inst, component, bundle) -> callback.accept ((T) inst, bundle)); + public <T> BundleDependencyBuilder cb(CbTypeBundle<T> add) { + return cb(add, null, null); + } + + @Override + public <T> BundleDependencyBuilder cb(CbTypeBundle<T> add, CbTypeBundle<T> remove) { + return cb(add, null, remove); + } + + @Override + public <T> BundleDependencyBuilder cb(CbTypeBundle<T> add, CbTypeBundle<T> change, CbTypeBundle<T> remove) { + if (add != null) { + setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, component, bundle) -> add.accept ((T) inst, bundle)); + } + if (change != null) { + setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, component, bundle) -> change.accept ((T) inst, bundle)); + } + if (remove != null) { + setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, component, bundle) -> remove.accept ((T) inst, bundle)); + } + return this; } @Override - public <T> BundleDependencyBuilder cb(Cb callbackType, CbTypeComponentBundle<T> callback) { - return setComponentCallbackRef(callbackType, Helpers.getLambdaGenericType(callback, 0), - (inst, component, bundle) -> callback.accept ((T) inst, component, bundle)); + public <T> BundleDependencyBuilder cb(CbTypeComponentBundle<T> add) { + return cb(add, null, null); + } + + @Override + public <T> BundleDependencyBuilder cb(CbTypeComponentBundle<T> add, CbTypeComponentBundle<T> remove) { + return cb(add, null, remove); + } + + @Override + public <T> BundleDependencyBuilder cb(CbTypeComponentBundle<T> add, CbTypeComponentBundle<T> change, CbTypeComponentBundle<T> remove) { + if (add != null) { + setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, component, bundle) -> add.accept ((T) inst, component, bundle)); + } + if (change != null) { + setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, component, bundle) -> change.accept ((T) inst, component, bundle)); + } + if (remove != null) { + setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, component, bundle) -> remove.accept ((T) inst, component, bundle)); + } + return this; } @Override - public BundleDependencyBuilder cbi(Cb callbackType, CbBundle callback) { - return setInstanceCallbackRef(callbackType, (inst, component, bundle) -> callback.accept(bundle)); + public BundleDependencyBuilder cbi(CbBundle add) { + return cbi(add, null, null); + } + + @Override + public BundleDependencyBuilder cbi(CbBundle add, CbBundle remove) { + return cbi(add, null, remove); + } + + @Override + public BundleDependencyBuilder cbi(CbBundle add, CbBundle change, CbBundle remove) { + if (add != null) setInstanceCallbackRef(Cb.ADD, (inst, component, bundle) -> add.accept(bundle)); + if (change != null) setInstanceCallbackRef(Cb.CHG, (inst, component, bundle) -> change.accept(bundle)); + if (remove != null) setInstanceCallbackRef(Cb.REM, (inst, component, bundle) -> remove.accept(bundle)); + return this; } @Override - public BundleDependencyBuilder cbi(Cb callbackType, CbComponentBundle callback) { - return setInstanceCallbackRef(callbackType, (inst, component, bundle) -> callback.accept(component, bundle)); + public BundleDependencyBuilder cbi(CbComponentBundle add) { + return cbi(add, null, null); + } + + @Override + public BundleDependencyBuilder cbi(CbComponentBundle add, CbComponentBundle remove) { + return cbi(add, null, remove); + } + + @Override + public BundleDependencyBuilder cbi(CbComponentBundle add, CbComponentBundle change, CbComponentBundle remove) { + if (add != null) setInstanceCallbackRef(Cb.ADD, (inst, component, bundle) -> add.accept(component, bundle)); + if (change != null) setInstanceCallbackRef(Cb.CHG, (inst, component, bundle) -> change.accept(component, bundle)); + if (remove != null) setInstanceCallbackRef(Cb.REM, (inst, component, bundle) -> remove.accept(component, bundle)); + return this; } @Override @@ -229,7 +296,6 @@ public class BundleDependencyBuilderImpl } private <T> BundleDependencyBuilder setInstanceCallbackRef(Cb cbType, MethodRef<T> ref) { - cbType.ensureServiceCallback(); requiresNoStringCallbacks(); if (! m_autoConfigInvoked) m_autoConfig = false; List<MethodRef<Object>> list = m_refs.computeIfAbsent(cbType, l -> new ArrayList<>()); @@ -238,7 +304,6 @@ public class BundleDependencyBuilderImpl } private <T> BundleDependencyBuilder setComponentCallbackRef(Cb cbType, Class<T> type, MethodRef<T> ref) { - cbType.ensureServiceCallback(); requiresNoStringCallbacks(); if (! m_autoConfigInvoked) m_autoConfig = false; List<MethodRef<Object>> list = m_refs.computeIfAbsent(cbType, l -> new ArrayList<>()); Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/CompletableFutureDependencyImpl.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/CompletableFutureDependencyImpl.java?rev=1726125&r1=1726124&r2=1726125&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/CompletableFutureDependencyImpl.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/CompletableFutureDependencyImpl.java Thu Jan 21 22:52:22 2016 @@ -69,7 +69,7 @@ public class CompletableFutureDependency @SuppressWarnings("unchecked") @Override public <T> FutureDependencyBuilder<F> cb(CbTypeFuture<T, ? super F> consumer, boolean async) { - m_accept2Type = Helpers.getLambdaGenericType(consumer, 0);; + m_accept2Type = Helpers.getLambdaArgType(consumer, 0);; m_accept2 = (instance, result) -> consumer.accept((T) instance, result); m_async = async; return this; 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=1726125&r1=1726124&r2=1726125&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 Thu Jan 21 22:52:22 2016 @@ -18,7 +18,6 @@ import org.apache.felix.dm.Component; import org.apache.felix.dm.Dependency; import org.apache.felix.dm.DependencyManager; import org.apache.felix.dm.builder.lambda.BundleDependencyBuilder; -import org.apache.felix.dm.builder.lambda.Cb; import org.apache.felix.dm.builder.lambda.ComponentBuilder; import org.apache.felix.dm.builder.lambda.ConfigurationDependencyBuilder; import org.apache.felix.dm.builder.lambda.DependencyBuilder; @@ -379,8 +378,7 @@ public class ComponentBuilderImpl implem } @Override - public ComponentBuilderImpl withService(Class<?> service, Class<?> ... services) { - doWithService(service); + public ComponentBuilderImpl withService(Class<?> ... services) { for (Class<?> s : services) { doWithService(s); } @@ -401,7 +399,7 @@ public class ComponentBuilderImpl implem } @Override - public ComponentBuilderImpl withConfiguration(Consumer<ConfigurationDependencyBuilder> consumer) { + public ComponentBuilderImpl withConf(Consumer<ConfigurationDependencyBuilder> consumer) { ConfigurationDependencyBuilder dep = new ConfigurationDependencyBuilderImpl(m_component); consumer.accept(dep); m_dependencyBuilders.add(dep); @@ -462,13 +460,13 @@ public class ComponentBuilderImpl implem @Override public <U> ComponentBuilderImpl life(Cb callbackType, CbConsumer<U> callback) { - Class<U> type = Helpers.getLambdaGenericType(callback, 0); + Class<U> type = Helpers.getLambdaArgType(callback, 0); return setComponentCallbackRef(callbackType, type, (inst, component) -> callback.accept((U) inst)); } @Override public <U> ComponentBuilderImpl life(Cb callbackType, CbTypeComponent<U> callback) { - Class<U> type = Helpers.getLambdaGenericType(callback, 0); + Class<U> type = Helpers.getLambdaArgType(callback, 0); return setComponentCallbackRef(callbackType, type, (inst, component) -> callback.accept((U) inst, component)); } @@ -545,7 +543,6 @@ public class ComponentBuilderImpl implem protected <U> ComponentBuilderImpl setInstanceCallbackRef(Cb cbType, MethodRef<U> ref) { ensureHasNoLifecycleMethods(); - cbType.ensureLifecyleCallback(); List<MethodRef<Object>> list = m_refs.computeIfAbsent(cbType, l -> new ArrayList<>()); list.add((instance, component) -> { ref.accept(null, component); @@ -555,7 +552,6 @@ public class ComponentBuilderImpl implem private <U> ComponentBuilderImpl setComponentCallbackRef(Cb cbType, Class<U> type, MethodRef<U> callback) { ensureHasNoLifecycleMethods(); - cbType.ensureLifecyleCallback(); List<MethodRef<Object>> list = m_refs.computeIfAbsent(cbType, l -> new ArrayList<>()); list.add((instance, component) -> { Stream.of(component.getInstances()).forEach(inst -> { Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ConfigurationDependencyBuilderImpl.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/ConfigurationDependencyBuilderImpl.java?rev=1726125&r1=1726124&r2=1726125&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ConfigurationDependencyBuilderImpl.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ConfigurationDependencyBuilderImpl.java Thu Jan 21 22:52:22 2016 @@ -79,13 +79,13 @@ public class ConfigurationDependencyBuil @Override public <T> ConfigurationDependencyBuilder cb(CbTypeDictionary<T> callback) { - Class<T> type = Helpers.getLambdaGenericType(callback, 0); + Class<T> type = Helpers.getLambdaArgType(callback, 0); return setComponentCallbackRef(type, (instance, component, props) -> { callback.accept((T) instance, props); }); } @Override public <T> ConfigurationDependencyBuilder cb(CbTypeComponentDictionary<T> callback) { - Class<T> type = Helpers.getLambdaGenericType(callback, 0); + Class<T> type = Helpers.getLambdaArgType(callback, 0); return setComponentCallbackRef(type, (instance, component, props) -> { callback.accept((T) instance, component, props); }); } Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/FactoryPidAdapterBuilderImpl.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/FactoryPidAdapterBuilderImpl.java?rev=1726125&r1=1726124&r2=1726125&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/FactoryPidAdapterBuilderImpl.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/FactoryPidAdapterBuilderImpl.java Thu Jan 21 22:52:22 2016 @@ -96,13 +96,13 @@ public class FactoryPidAdapterBuilderImp @Override public <U> FactoryPidAdapterBuilder cb(CbTypeDictionary<U> callback) { - Class<U> type = Helpers.getLambdaGenericType(callback, 0); + Class<U> type = Helpers.getLambdaArgType(callback, 0); return setComponentCallbackRef(type, (instance, component, props) -> { callback.accept((U) instance, props); }); } @Override public <U> FactoryPidAdapterBuilder cb(CbTypeComponentDictionary<U> callback) { - Class<U> type = Helpers.getLambdaGenericType(callback, 0); + Class<U> type = Helpers.getLambdaArgType(callback, 0); return setComponentCallbackRef(type, (instance, component, props) -> { callback.accept((U) instance, component, props); }); } Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/Helpers.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/Helpers.java?rev=1726125&r1=1726124&r2=1726125&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/Helpers.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/Helpers.java Thu Jan 21 22:52:22 2016 @@ -41,7 +41,7 @@ public class Helpers { * @return the type of the lambda generic parameter that corresponds to the <code>genericParamIndex</code> */ @SuppressWarnings("unchecked") - public static <T> Class<T> getLambdaGenericType(SerializableLambda lambda, int genericParamIndex) { + public static <T> Class<T> getLambdaArgType(SerializableLambda lambda, int genericParamIndex) { String[] lambdaParams = getGenericTypeStrings(lambda); Class<?> clazz; try { 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=1726125&r1=1726124&r2=1726125&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 Thu Jan 21 22:52:22 2016 @@ -8,7 +8,6 @@ import java.util.Objects; 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.Functions.CbComponent; import org.apache.felix.dm.builder.lambda.Functions.CbComponentRef; import org.apache.felix.dm.builder.lambda.Functions.CbComponentRefService; @@ -57,6 +56,12 @@ public abstract class ServiceCallbacksBu protected String m_swapped; protected final Class<S> m_serviceClass; + enum Cb { + ADD, + CHG, + REM + }; + /** * List of service (add/change/remove) callbacks. */ @@ -155,116 +160,350 @@ public abstract class ServiceCallbacksBu return (B) this; } - public <T> B cb(Cb cbType, CbTypeService<T, S> callback) { - return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), - (instance, component, ref, service) -> callback.accept((T) instance, service)); + public <T> B cb(CbTypeService<T, S> add) { + return cb(add, null, null); + } + + public <T> B cb(CbTypeService<T, S> add, CbTypeService<T, S> remove) { + return cb(add, null, remove); } - public <T> B cb(Cb cbType, CbTypeServiceMap<T, S> callback) { - return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), - (instance, component, ref, service) -> callback.accept((T) instance, service, new SRefAsMap(ref))); + public <T> B cb(CbTypeService<T, S> add, CbTypeService<T, S> change, CbTypeService<T, S> remove) { + if (add != null) + setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, comp, ref, srv) -> add.accept((T) inst, srv)); + if (change != null) + setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, comp, ref, srv) -> change.accept((T) inst, srv)); + if (remove != null) + setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, comp, ref, srv) -> remove.accept((T) inst, srv)); + return (B) this; } - public <T> B cb(Cb cbType, CbTypeServiceDict<T, S> callback) { - return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), - (instance, component, ref, service) -> callback.accept((T) instance, service, new SRefAsDictionary(ref))); + public B cbi(CbService<S> add) { + return cbi(add, null, null); } - public <T> B cb(Cb cbType, CbTypeRefService<T, S> callback) { - return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), - (instance, component, ref, service) -> callback.accept((T) instance, ref, service)); + public B cbi(CbService<S> add, CbService<S> remove) { + return cbi(add, null, remove); } - public <T> B cb(Cb cbType, CbTypeRef<T, S> callback) { - return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), - (instance, component, ref, service) -> callback.accept((T) instance, ref)); + public B cbi(CbService<S> add, CbService<S> change, CbService<S> remove) { + if (add != null) + setInstanceCallbackRef(Cb.ADD, (inst, comp, ref, srv) -> add.accept(srv)); + if (change != null) + setInstanceCallbackRef(Cb.CHG, (inst, comp, ref, srv) -> change.accept(srv)); + if (remove != null) + setInstanceCallbackRef(Cb.REM, (inst, comp, ref, srv) -> remove.accept(srv)); + return (B) this; + } + + public <T> B cb(CbTypeServiceMap<T, S> add) { + return cb(add, null, null); + } + + public <T> B cb(CbTypeServiceMap<T, S> add, CbTypeServiceMap<T, S> remove) { + return cb(add, null, remove); } - public <T> B cb(Cb cbType, CbTypeComponent<T> callback) { - return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), - (instance, component, ref, service) -> callback.accept((T) instance, component)); + public <T> B cb(CbTypeServiceMap<T, S> add, CbTypeServiceMap<T, S> change, CbTypeServiceMap<T, S> remove) { + if (add != null) + setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, comp, ref, srv) -> add.accept((T) inst, srv, new SRefAsMap(ref))); + if (change != null) + setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, comp, ref, srv) -> change.accept((T) inst, srv, new SRefAsMap(ref))); + if (remove != null) + setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, comp, ref, srv) -> remove.accept((T) inst, srv, new SRefAsMap(ref))); + return (B) this; + } + + public B cbi(CbServiceMap<S> add) { + return cbi(add, null, null); + } + + public B cbi(CbServiceMap<S> add, CbServiceMap<S> remove) { + return cbi(add, null, remove); } - public <T> B cb(Cb cbType, CbTypeComponentService<T, S> callback) { - return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), - (instance, component, ref, service) -> callback.accept((T) instance, component, service)); + public B cbi(CbServiceMap<S> add, CbServiceMap<S> change, CbServiceMap<S> remove) { + if (add != null) + setInstanceCallbackRef(Cb.ADD, (inst, comp, ref, srv) -> add.accept(srv, new SRefAsMap(ref))); + if (change != null) + setInstanceCallbackRef(Cb.CHG, (inst, comp, ref, srv) -> change.accept(srv, new SRefAsMap(ref))); + if (remove != null) + setInstanceCallbackRef(Cb.REM, (inst, comp, ref, srv) -> remove.accept(srv, new SRefAsMap(ref))); + return (B) this; } - public <T> B cb(Cb cbType, CbTypeComponentRef<T, S> callback) { - return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), - (instance, component, ref, service) -> callback.accept((T) instance, component, ref)); + public <T> B cb(CbTypeServiceDict<T, S> add) { + return cb(add, null, null); } - public <T> B cb(Cb cbType, CbTypeComponentRefService<T, S> callback) { - return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), - (instance, component, ref, service) -> callback.accept((T) instance, component, ref, service)); + public <T> B cb(CbTypeServiceDict<T, S> add, CbTypeServiceDict<T, S> remove) { + return cb(add, null, remove); + } + + public <T> B cb(CbTypeServiceDict<T, S> add, CbTypeServiceDict<T, S> change, CbTypeServiceDict<T, S> remove) { + if (add != null) + setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, comp, ref, srv) -> add.accept((T) inst, srv, new SRefAsDictionary(ref))); + if (change != null) + setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, comp, ref, srv) -> change.accept((T) inst, srv, new SRefAsDictionary(ref))); + if (remove != null) + setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, comp, ref, srv) -> remove.accept((T) inst, srv, new SRefAsDictionary(ref))); + return (B) this; } - public B cbi(Cb cbType, CbService<S> callback) { - return setInstanceCallbackRef(cbType, - (instance, component, ref, service) -> callback.accept(service)); + public B cbi(CbServiceDict<S> add) { + return cbi(add, null, null); } - public B cbi(Cb cbType, CbServiceMap<S> callback) { - return setInstanceCallbackRef(cbType, - (instance, component, ref, service) -> callback.accept(service, new SRefAsMap(ref))); + public B cbi(CbServiceDict<S> add, CbServiceDict<S> remove) { + return cbi(add, null, remove); } - public B cbi(Cb cbType, CbServiceDict<S> callback) { - return setInstanceCallbackRef(cbType, - (instance, component, ref, service) -> callback.accept(service, new SRefAsDictionary(ref))); + public B cbi(CbServiceDict<S> add, CbServiceDict<S> change, CbServiceDict<S> remove) { + if (add != null) + setInstanceCallbackRef(Cb.ADD, (inst, comp, ref, srv) -> add.accept(srv, new SRefAsDictionary(ref))); + if (change != null) + setInstanceCallbackRef(Cb.CHG, (inst, comp, ref, srv) -> change.accept(srv, new SRefAsDictionary(ref))); + if (remove != null) + setInstanceCallbackRef(Cb.REM, (inst, comp, ref, srv) -> remove.accept(srv, new SRefAsDictionary(ref))); + return (B) this; } - public B cbi(Cb cbType, CbRef<S> callback) { - return setInstanceCallbackRef(cbType, - (instance, component, ref, service) -> callback.accept(ref)); + public <T> B cb(CbTypeRefService<T, S> add) { + return cb(add, null, null); } - public B cbi(Cb cbType, CbRefService<S> callback) { - return setInstanceCallbackRef(cbType, - (instance, component, ref, service) -> callback.accept(ref, service)); + public <T> B cb(CbTypeRefService<T, S> add, CbTypeRefService<T, S> remove) { + return cb(add, null, remove); + } + + public <T> B cb(CbTypeRefService<T, S> add, CbTypeRefService<T, S> change, CbTypeRefService<T, S> remove) { + if (add != null) + setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, comp, ref, srv) -> add.accept((T) inst, ref, srv)); + if (change != null) + setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, comp, ref, srv) -> change.accept((T) inst, ref, srv)); + if (remove != null) + setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, comp, ref, srv) -> remove.accept((T) inst, ref, srv)); + return (B) this; } - public B cbi(Cb cbType, CbComponent callback) { - return setInstanceCallbackRef(cbType, - (instance, component, ref, service) -> callback.accept(component)); + public B cbi(CbRefService<S> add) { + return cbi(add, null, null); + } + + public B cbi(CbRefService<S> add, CbRefService<S> remove) { + return cbi(add, null, remove); + } + + public B cbi(CbRefService<S> add, CbRefService<S> change, CbRefService<S> remove) { + if (add != null) + setInstanceCallbackRef(Cb.ADD, (inst, comp, ref, srv) -> add.accept(ref, srv)); + if (change != null) + setInstanceCallbackRef(Cb.CHG, (inst, comp, ref, srv) -> change.accept(ref, srv)); + if (remove != null) + setInstanceCallbackRef(Cb.REM, (inst, comp, ref, srv) -> remove.accept(ref, srv)); + return (B) this; + } + + public <T> B cb(CbTypeRef<T, S> add) { + return cb(add, null, null); + } + + public <T> B cb(CbTypeRef<T, S> add, CbTypeRef<T, S> remove) { + return cb(add, null, remove); + } + + public <T> B cb(CbTypeRef<T, S> add, CbTypeRef<T, S> change, CbTypeRef<T, S> remove) { + if (add != null) + setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, comp, ref, srv) -> add.accept((T) inst, ref)); + if (change != null) + setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, comp, ref, srv) -> change.accept((T) inst, ref)); + if (remove != null) + setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, comp, ref, srv) -> remove.accept((T) inst, ref)); + return (B) this; + } + + public B cbi(CbRef<S> add) { + return cbi(add, null, null); + } + + public B cbi(CbRef<S> add, CbRef<S> remove) { + return cbi(add, null, remove); + } + + public B cbi(CbRef<S> add, CbRef<S> change, CbRef<S> remove) { + if (add != null) + setInstanceCallbackRef(Cb.ADD, (inst, comp, ref, srv) -> add.accept(ref)); + if (change != null) + setInstanceCallbackRef(Cb.CHG, (inst, comp, ref, srv) -> change.accept(ref)); + if (remove != null) + setInstanceCallbackRef(Cb.REM, (inst, comp, ref, srv) -> remove.accept(ref)); + return (B) this; + } + + public <T> B cb(CbTypeComponent<T> add) { + return cb(add, null, null); + } + + public <T> B cb(CbTypeComponent<T> add, CbTypeComponent<T> remove) { + return cb(add, null, remove); + } + + public <T> B cb(CbTypeComponent<T> add, CbTypeComponent<T> change, CbTypeComponent<T> remove) { + if (add != null) + setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, comp, ref, srv) -> add.accept((T) inst, comp)); + if (change != null) + setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, comp, ref, srv) -> change.accept((T) inst, comp)); + if (remove != null) + setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, comp, ref, srv) -> remove.accept((T) inst, comp)); + return (B) this; } - public B cbi(Cb cbType, CbComponentService<S> callback) { - return setInstanceCallbackRef(cbType, - (instance, component, ref, service) -> callback.accept(component, service)); + public B cbi(CbComponent add) { + return cbi(add, null, null); } - public B cbi(Cb cbType, CbComponentRef<S> callback) { - return setInstanceCallbackRef(cbType, - (instance, component, ref, service) -> callback.accept(component, ref)); + public B cbi(CbComponent add, CbComponent remove) { + return cbi(add, null, remove); } - public B cbi(Cb cbType, CbComponentRefService<S> callback) { - return setInstanceCallbackRef(cbType, - (instance, component, ref, service) -> callback.accept(component, ref, service)); + public B cbi(CbComponent add, CbComponent change, CbComponent remove) { + if (add != null) + setInstanceCallbackRef(Cb.ADD, (inst, comp, ref, srv) -> add.accept(comp)); + if (change != null) + setInstanceCallbackRef(Cb.CHG, (inst, comp, ref, srv) -> change.accept(comp)); + if (remove != null) + setInstanceCallbackRef(Cb.REM, (inst, comp, ref, srv) -> remove.accept(comp)); + return (B) this; + } + + public <T> B cb(CbTypeComponentRef<T, S> add) { + return cb(add, null, null); + } + + public <T> B cb(CbTypeComponentRef<T, S> add, CbTypeComponentRef<T, S> remove) { + return cb(add, null, remove); + } + + public <T> B cb(CbTypeComponentRef<T, S> add, CbTypeComponentRef<T, S> change, CbTypeComponentRef<T, S> remove) { + if (add != null) + setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, comp, ref, srv) -> add.accept((T) inst, comp, ref)); + if (change != null) + setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, comp, ref, srv) -> change.accept((T) inst, comp, ref)); + if (remove != null) + setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, comp, ref, srv) -> remove.accept((T) inst, comp, ref)); + return (B) this; + } + + public B cbi(CbComponentRef<S> add) { + return cbi(add, null, null); + } + + public B cbi(CbComponentRef<S> add, CbComponentRef<S> remove) { + return cbi(add, null, remove); + } + + public B cbi(CbComponentRef<S> add, CbComponentRef<S> change, CbComponentRef<S> remove) { + if (add != null) + setInstanceCallbackRef(Cb.ADD, (inst, comp, ref, srv) -> add.accept(comp, ref)); + if (change != null) + setInstanceCallbackRef(Cb.CHG, (inst, comp, ref, srv) -> change.accept(comp, ref)); + if (remove != null) + setInstanceCallbackRef(Cb.REM, (inst, comp, ref, srv) -> remove.accept(comp, ref)); + return (B) this; + } + + public <T> B cb(CbTypeComponentService<T, S> add) { + return cb(add, null, null); + } + + public <T> B cb(CbTypeComponentService<T, S> add, CbTypeComponentService<T, S> remove) { + return cb(add, null, remove); + } + + public <T> B cb(CbTypeComponentService<T, S> add, CbTypeComponentService<T, S> change, CbTypeComponentService<T, S> remove) { + if (add != null) + setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, comp, ref, srv) -> add.accept((T) inst, comp, srv)); + if (change != null) + setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, comp, ref, srv) -> change.accept((T) inst, comp, srv)); + if (remove != null) + setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, comp, ref, srv) -> remove.accept((T) inst, comp, srv)); + return (B) this; + } + + public B cbi(CbComponentService<S> add) { + return cbi(add, null, null); + } + + public B cbi(CbComponentService<S> add, CbComponentService<S> remove) { + return cbi(add, null, remove); + } + + public B cbi(CbComponentService<S> add, CbComponentService<S> change, CbComponentService<S> remove) { + if (add != null) + setInstanceCallbackRef(Cb.ADD, (inst, comp, ref, srv) -> add.accept(comp, srv)); + if (change != null) + setInstanceCallbackRef(Cb.CHG, (inst, comp, ref, srv) -> change.accept(comp, srv)); + if (remove != null) + setInstanceCallbackRef(Cb.REM, (inst, comp, ref, srv) -> remove.accept(comp, srv)); + return (B) this; + } + + public <T> B cb(CbTypeComponentRefService<T, S> add) { + return cb(add, null, null); + } + + public <T> B cb(CbTypeComponentRefService<T, S> add, CbTypeComponentRefService<T, S> remove) { + return cb(add, null, remove); + } + + public <T> B cb(CbTypeComponentRefService<T, S> add, CbTypeComponentRefService<T, S> change, CbTypeComponentRefService<T, S> remove) { + if (add != null) + setComponentCallbackRef(Cb.ADD, Helpers.getLambdaArgType(add, 0), (inst, comp, ref, srv) -> add.accept((T) inst, comp, ref, srv)); + if (change != null) + setComponentCallbackRef(Cb.CHG, Helpers.getLambdaArgType(change, 0), (inst, comp, ref, srv) -> change.accept((T) inst, comp, ref, srv)); + if (remove != null) + setComponentCallbackRef(Cb.REM, Helpers.getLambdaArgType(remove, 0), (inst, comp, ref, srv) -> remove.accept((T) inst, comp, ref, srv)); + return (B) this; + } + + public B cbi(CbComponentRefService<S> add) { + return cbi(add, null, null); + } + + public B cbi(CbComponentRefService<S> add, CbComponentRefService<S> remove) { + return cbi(add, null, remove); + } + + public B cbi(CbComponentRefService<S> add, CbComponentRefService<S> change, CbComponentRefService<S> remove) { + if (add != null) + setInstanceCallbackRef(Cb.ADD, (inst, comp, ref, srv) -> add.accept(comp, ref, srv)); + if (change != null) + setInstanceCallbackRef(Cb.CHG, (inst, comp, ref, srv) -> change.accept(comp, ref, srv)); + if (remove != null) + setInstanceCallbackRef(Cb.REM, (inst, comp, ref, srv) -> remove.accept(comp, ref, srv)); + return (B) this; } public <T> B sw(CbTypeServiceService<T, S> swap) { - Class<T> type = Helpers.getLambdaGenericType(swap, 0); + Class<T> type = Helpers.getLambdaArgType(swap, 0); return setComponentSwapCallbackRef(type, (inst, component, oref, oserv, nref, nserv) -> swap.accept((T) inst, oserv, nserv)); } public <T> B sw(CbTypeComponentServiceService<T, S> swap) { - Class<T> type = Helpers.getLambdaGenericType(swap, 0); + Class<T> type = Helpers.getLambdaArgType(swap, 0); return setComponentSwapCallbackRef(type, (inst, component, oref, oserv, nref, nserv) -> swap.accept((T) inst, component, oserv, nserv)); } public <T> B sw(CbTypeRefServiceRefService<T, S> swap) { - Class<T> type = Helpers.getLambdaGenericType(swap, 0); + Class<T> type = Helpers.getLambdaArgType(swap, 0); return setComponentSwapCallbackRef(type, (inst, component, oref, oserv, nref, nserv) -> swap.accept((T) inst, oref, oserv, nref, nserv)); } public <T> B sw(CbTypeComponentRefServiceRefService<T, S> swap) { - Class<T> type = Helpers.getLambdaGenericType(swap, 0); + Class<T> type = Helpers.getLambdaArgType(swap, 0); return setComponentSwapCallbackRef(type, (inst, component, oref, oserv, nref, nserv) -> swap.accept((T) inst, component, oref, oserv, nref, nserv)); } @@ -286,7 +525,6 @@ public abstract class ServiceCallbacksBu } protected <I> B setComponentCallbackRef(Cb cbType, Class<I> type, MethodRef<I, S> ref) { - cbType.ensureServiceCallback(); requiresNoCallbacks(); if (! m_autoConfigInvoked) m_autoConfig = false; List<MethodRef<Object, S>> list = m_refs.computeIfAbsent(cbType, l -> new ArrayList<>()); @@ -301,7 +539,6 @@ public abstract class ServiceCallbacksBu } protected <T> B setInstanceCallbackRef(Cb cbType, MethodRef<T, S> ref) { - cbType.ensureServiceCallback(); requiresNoCallbacks(); if (! m_autoConfigInvoked) m_autoConfig = false; List<MethodRef<Object, S>> list = m_refs.computeIfAbsent(cbType, l -> new ArrayList<>());
