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=1724881&r1=1724880&r2=1724881&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 Fri Jan 15 21:43:31 2016 @@ -19,15 +19,19 @@ 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; +import org.apache.felix.dm.builder.lambda.Functions.CbBiConsumer; import org.apache.felix.dm.builder.lambda.Functions.CbComponent; +import org.apache.felix.dm.builder.lambda.Functions.CbConsumer; import org.apache.felix.dm.builder.lambda.Functions.FluentProperties; +import org.apache.felix.dm.builder.lambda.impl.ServiceCallbacksBuilderImpl.MethodRef; import org.apache.felix.dm.builder.lambda.FutureDependencyBuilder; import org.apache.felix.dm.builder.lambda.ServiceDependencyBuilder; -public class ComponentBuilderImpl<T> implements ComponentBuilder<T> { +public class ComponentBuilderImpl implements ComponentBuilder<ComponentBuilderImpl> { private final List<DependencyBuilder<?>> m_dependencyBuilders = new ArrayList<>(); private final Component m_component; private final boolean m_componentUpdated; @@ -37,10 +41,15 @@ public class ComponentBuilderImpl<T> imp private Object m_factory; private boolean m_factoryHasComposite; private boolean m_autoAdd = true; - private final Map<String, Consumer<Component>> m_lfclCallbacks = new HashMap<>(); + protected final Map<Cb, List<MethodRef<Object>>> m_refs = new HashMap<>(); private Object m_compositionInstance; private String m_compositionMethod; + @FunctionalInterface + interface MethodRef<I> { + public void accept(I instance, Component c); + } + public ComponentBuilderImpl(DependencyManager dm) { m_component = dm.createComponent(); m_componentUpdated = false; @@ -52,120 +61,120 @@ public class ComponentBuilderImpl<T> imp } @Override - public <U> ComponentBuilderImpl<T> autoInject(Class<U> clazz, boolean autoConfig) { + public <U> ComponentBuilderImpl autoInject(Class<U> clazz, boolean autoConfig) { m_component.setAutoConfig(clazz, autoConfig); return this; } @Override - public <U> ComponentBuilderImpl<T> autoInject(Class<U> clazz, String instanceName) { + public <U> ComponentBuilderImpl autoInject(Class<U> clazz, String instanceName) { m_component.setAutoConfig(clazz, instanceName); return this; } @Override - public ComponentBuilderImpl<T> provides(Class<?> iface) { + public ComponentBuilderImpl provides(Class<?> iface) { m_serviceNames = new String[] {iface.getName()}; return this; } @Override - public ComponentBuilderImpl<T> provides(Class<?> iface, String name, Object value, Object ... rest) { + public ComponentBuilderImpl 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) { + public ComponentBuilderImpl provides(Class<?> iface, FluentProperties ... properties) { provides(iface); properties(properties); return this; } @Override - public ComponentBuilderImpl<T> provides(Class<?> iface, Dictionary<?,?> properties) { + public ComponentBuilderImpl provides(Class<?> iface, Dictionary<?,?> properties) { provides(iface); properties(properties); return this; } @Override - public ComponentBuilderImpl<T> provides(Class<?>[] ifaces) { + public ComponentBuilderImpl 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) { + public ComponentBuilderImpl 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) { + public ComponentBuilderImpl provides(Class<?>[] ifaces, FluentProperties ... properties) { provides(ifaces); properties(properties); return this; } @Override - public ComponentBuilderImpl<T> provides(Class<?>[] ifaces, Dictionary<?,?> properties) { + public ComponentBuilderImpl provides(Class<?>[] ifaces, Dictionary<?,?> properties) { provides(ifaces); properties(properties); return this; } @Override - public ComponentBuilderImpl<T> provides(String iface) { + public ComponentBuilderImpl provides(String iface) { m_serviceNames = new String[] {iface}; return this; } @Override - public ComponentBuilderImpl<T> provides(String iface, String name, Object value, Object ... rest) { + public ComponentBuilderImpl 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) { + public ComponentBuilderImpl provides(String iface, FluentProperties ... properties) { provides(iface); properties(properties); return this; } @Override - public ComponentBuilderImpl<T> provides(String iface, Dictionary<?,?> properties) { + public ComponentBuilderImpl provides(String iface, Dictionary<?,?> properties) { provides(iface); properties(properties); return this; } @Override - public ComponentBuilderImpl<T> provides(String[] ifaces) { + public ComponentBuilderImpl provides(String[] ifaces) { m_serviceNames = ifaces; return this; } @Override - public ComponentBuilderImpl<T> provides(String[] ifaces, String name, Object value, Object ... rest) { + public ComponentBuilderImpl 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) { + public ComponentBuilderImpl provides(String[] ifaces, FluentProperties ... properties) { provides(ifaces); properties(properties); return this; } @Override - public ComponentBuilderImpl<T> provides(String[] ifaces, Dictionary<?,?> properties) { + public ComponentBuilderImpl provides(String[] ifaces, Dictionary<?,?> properties) { provides(ifaces); properties(properties); return this; @@ -173,13 +182,13 @@ public class ComponentBuilderImpl<T> imp @SuppressWarnings("unchecked") @Override - public ComponentBuilderImpl<T> properties(Dictionary<?, ?> properties) { + public ComponentBuilderImpl properties(Dictionary<?, ?> properties) { m_properties = (Dictionary<Object, Object>) properties; return this; } @Override - public ComponentBuilderImpl<T> properties(String name, Object value, Object ... rest) { + public ComponentBuilderImpl properties(String name, Object value, Object ... rest) { Objects.nonNull(name); Objects.nonNull(value); Properties props = new Properties(); @@ -197,7 +206,7 @@ public class ComponentBuilderImpl<T> imp } @Override - public ComponentBuilderImpl<T> properties(FluentProperties ... properties) { + public ComponentBuilderImpl properties(FluentProperties ... properties) { Dictionary<Object, Object> props = new Hashtable<>(); Stream.of(properties).forEach(property -> { String name = Helpers.getLambdaParameterName(property, 0); @@ -212,18 +221,18 @@ public class ComponentBuilderImpl<T> imp } @Override - public ComponentBuilderImpl<T> debug(String label) { + public ComponentBuilderImpl debug(String label) { m_component.setDebug(label); return this; } @Override - public ComponentBuilderImpl<T> autoAdd(boolean autoAdd) { + public ComponentBuilderImpl autoAdd(boolean autoAdd) { m_autoAdd = autoAdd; return this; } - public ComponentBuilderImpl<T> autoAdd() { + public ComponentBuilderImpl autoAdd() { m_autoAdd = true; return this; } @@ -232,23 +241,20 @@ public class ComponentBuilderImpl<T> imp return m_autoAdd; } - @SuppressWarnings("unchecked") @Override - public <U> ComponentBuilder<U> impl(U instance) { + public <U> ComponentBuilderImpl impl(U instance) { m_impl = instance; - return (ComponentBuilder<U>) this; + return this; } - @SuppressWarnings("unchecked") @Override - public <U> ComponentBuilder<U> impl(Class<U> implClass) { + public <U> ComponentBuilderImpl impl(Class<U> implClass) { m_impl = implClass; - return (ComponentBuilder<U>) this; + return this; } - @SuppressWarnings("unchecked") @Override - public <U> ComponentBuilder<U> factory(Supplier<U> create) { + public <U> ComponentBuilderImpl factory(Supplier<U> create) { Objects.nonNull(create); m_factory = new Object() { @SuppressWarnings("unused") @@ -256,12 +262,11 @@ public class ComponentBuilderImpl<T> imp return create.get(); } }; - return (ComponentBuilder<U>) this; + return this; } - @SuppressWarnings("unchecked") @Override - public <U, V> ComponentBuilder<V> factory(Supplier<U> supplier, Function<U, V> create) { + public <U, V> ComponentBuilderImpl factory(Supplier<U> supplier, Function<U, V> create) { Objects.nonNull(supplier); Objects.nonNull(create); @@ -272,12 +277,11 @@ public class ComponentBuilderImpl<T> imp return create.apply(factoryImpl); } }; - return (ComponentBuilder<V>) this; + return this; } - @SuppressWarnings("unchecked") @Override - public <U> ComponentBuilder<U> factory(Supplier<U> create, Supplier<Object[]> getComposite) { + public <U> ComponentBuilderImpl factory(Supplier<U> create, Supplier<Object[]> getComposite) { Objects.nonNull(create); Objects.nonNull(getComposite); @@ -293,11 +297,11 @@ public class ComponentBuilderImpl<T> imp } }; m_factoryHasComposite = true; - return (ComponentBuilder<U>) this; + return this; } @Override - public <U, V> ComponentBuilder<V> factory(Supplier<U> factorySupplier, Function<U, V> factoryCreate, Function<U, Object[]> factoryGetComposite) { + public <U, V> ComponentBuilderImpl factory(Supplier<U> factorySupplier, Function<U, V> factoryCreate, Function<U, Object[]> factoryGetComposite) { Objects.nonNull(factorySupplier); Objects.nonNull(factoryCreate); Objects.nonNull(factoryGetComposite); @@ -317,20 +321,20 @@ public class ComponentBuilderImpl<T> imp } }; m_factoryHasComposite = true; - return (ComponentBuilder<V>) this; + return this; } - public ComponentBuilderImpl<T> composition(String getCompositionMethod) { + public ComponentBuilderImpl composition(String getCompositionMethod) { return composition(null, getCompositionMethod); } - public ComponentBuilderImpl<T> composition(Object instance, String getCompositionMethod) { + public ComponentBuilderImpl composition(Object instance, String getCompositionMethod) { m_compositionInstance = instance; m_compositionMethod = getCompositionMethod; return this; } - public ComponentBuilderImpl<T> composition(Supplier<Object[]> getCompositionMethod) { + public ComponentBuilderImpl composition(Supplier<Object[]> getCompositionMethod) { m_compositionInstance = new Object() { public Object[] getComposition() { return getCompositionMethod.get(); @@ -341,7 +345,7 @@ public class ComponentBuilderImpl<T> imp } @Override - public ComponentBuilderImpl<T> withService(Class<?> service, Class<?> ... services) { + public ComponentBuilderImpl withService(Class<?> service, Class<?> ... services) { doWithService(service); for (Class<?> s : services) { doWithService(s); @@ -355,7 +359,7 @@ public class ComponentBuilderImpl<T> imp } @Override - public <U> ComponentBuilderImpl<T> withService(Class<U> service, Consumer<ServiceDependencyBuilder<U>> consumer) { + public <U> ComponentBuilderImpl withService(Class<U> service, Consumer<ServiceDependencyBuilder<U>> consumer) { ServiceDependencyBuilder<U> dep = new ServiceDependencyBuilderImpl<>(m_component, service); consumer.accept(dep); m_dependencyBuilders.add(dep); @@ -363,7 +367,7 @@ public class ComponentBuilderImpl<T> imp } @Override - public ComponentBuilderImpl<T> withConfiguration(Consumer<ConfigurationDependencyBuilder> consumer) { + public ComponentBuilderImpl withConfiguration(Consumer<ConfigurationDependencyBuilder> consumer) { ConfigurationDependencyBuilder dep = new ConfigurationDependencyBuilderImpl(m_component); consumer.accept(dep); m_dependencyBuilders.add(dep); @@ -371,7 +375,7 @@ public class ComponentBuilderImpl<T> imp } @Override - public ComponentBuilderImpl<T> withBundle(Consumer<BundleDependencyBuilder> consumer) { + public ComponentBuilderImpl withBundle(Consumer<BundleDependencyBuilder> consumer) { BundleDependencyBuilder dep = new BundleDependencyBuilderImpl(m_component); consumer.accept(dep); m_dependencyBuilders.add(dep); @@ -379,7 +383,7 @@ public class ComponentBuilderImpl<T> imp } @Override - public <V> ComponentBuilder<T> withFuture(CompletableFuture<V> future, Consumer<FutureDependencyBuilder<V>> consumer) { + public <V> ComponentBuilderImpl withFuture(CompletableFuture<V> future, Consumer<FutureDependencyBuilder<V>> consumer) { FutureDependencyBuilder<V> dep = new CompletableFutureDependencyImpl<>(m_component, future); consumer.accept(dep); m_dependencyBuilders.add(dep); @@ -387,126 +391,25 @@ public class ComponentBuilderImpl<T> imp } @Override - public final ComponentBuilderImpl<T> init(Consumer<T> callback) { - return setLifecycleComponentCallback("init", callback); - } - - @Override - public final ComponentBuilderImpl<T> init(BiConsumer<T, Component> callback) { - return setLifecycleComponentCallback("init", callback); - } - - @Override - public <U> ComponentBuilderImpl<T> init(Class<U> type, Consumer<U> callback) { - return setLifecycleCompositeCallback("init", type, callback); - } - - @Override - public <U> ComponentBuilderImpl<T> init(Class<U> type, BiConsumer<U, Component> callback) { - return setLifecycleCompositeCallback("init", type, callback); - } - - @Override - public ComponentBuilderImpl<T> init(Runnable callback) { - return setLifecycleCallback("init", callback); - } - - @Override - public final ComponentBuilderImpl<T> init(CbComponent callback) { - m_lfclCallbacks.put("init", component -> callback.accept(component)); - return this; - } - - @Override - public final ComponentBuilderImpl<T> start(Consumer<T> callback) { - return setLifecycleComponentCallback("start", callback); - } - - @Override - public final ComponentBuilderImpl<T> start(BiConsumer<T, Component> callback) { - return setLifecycleComponentCallback("start", callback); - } - - @Override - public <U> ComponentBuilderImpl<T> start(Class<U> type, Consumer<U> callback) { - return setLifecycleCompositeCallback("start", type, callback); - } - - @Override - public <U> ComponentBuilderImpl<T> start(Class<U> type, BiConsumer<U, Component> callback) { - return setLifecycleCompositeCallback("start", type, callback); - } - - @Override - public ComponentBuilderImpl<T> start(Runnable callback) { - return setLifecycleCallback("start", callback); - } - - @Override - public final ComponentBuilderImpl<T> start(CbComponent callback) { - m_lfclCallbacks.put("start", component -> callback.accept(component)); - return this; - } - - @Override - public final ComponentBuilderImpl<T> stop(Consumer<T> callback) { - return setLifecycleComponentCallback("stop", callback); - } - - @Override - public final ComponentBuilderImpl<T> stop(BiConsumer<T, Component> callback) { - return setLifecycleComponentCallback("stop", callback); - } - - @Override - public <U> ComponentBuilderImpl<T> stop(Class<U> type, Consumer<U> callback) { - return setLifecycleCompositeCallback("stop", type, callback); - } - - @Override - public <U> ComponentBuilderImpl<T> stop(Class<U> type, BiConsumer<U, Component> callback) { - return setLifecycleCompositeCallback("stop", type, callback); + public <U> ComponentBuilderImpl cb(Cb callbackType, CbConsumer<U> callback) { + Class<U> type = Helpers.getLambdaGenericType(callback, 0); + return setComponentCallbackRef(callbackType, type, (inst, component) -> callback.accept((U) inst)); } @Override - public ComponentBuilderImpl stop(Runnable callback) { - return setLifecycleCallback("stop", callback); + public <U> ComponentBuilderImpl cb(Cb callbackType, CbBiConsumer<U, Component> callback) { + Class<U> type = Helpers.getLambdaGenericType(callback, 0); + return setComponentCallbackRef(callbackType, type, (inst, component) -> callback.accept((U) inst, component)); } @Override - public final ComponentBuilderImpl<T> stop(CbComponent callback) { - m_lfclCallbacks.put("stop", component -> callback.accept(component)); - return this; - } - - @Override - public final ComponentBuilderImpl<T> destroy(Consumer<T> callback) { - return setLifecycleComponentCallback("destroy", callback); - } - - @Override - public final ComponentBuilderImpl<T> destroy(BiConsumer<T, Component> callback) { - return setLifecycleComponentCallback("destroy", callback); - } - - public <U> ComponentBuilderImpl<T> destroy(Class<U> type, Consumer<U> callback) { - return setLifecycleCompositeCallback("destroy", type, callback); - } - - @Override - public <U> ComponentBuilderImpl<T> destroy(Class<U> type, BiConsumer<U, Component> callback) { - return setLifecycleCompositeCallback("destroy", type, callback); + public ComponentBuilderImpl cbi(Cb callbackType, Runnable callback) { + return setInstanceCallbackRef(callbackType, (inst, component) -> callback.run()); } @Override - public ComponentBuilderImpl<T> destroy(Runnable callback) { - return setLifecycleCallback("destroy", callback); - } - - @Override - public final ComponentBuilderImpl<T> destroy(CbComponent callback) { - m_lfclCallbacks.put("destroy", component -> callback.accept(component)); - return this; + public ComponentBuilderImpl cbi(Cb callbackType, CbComponent callback) { + return setInstanceCallbackRef(callbackType, (inst, component) -> callback.accept(component)); } public Component build() { @@ -530,7 +433,7 @@ public class ComponentBuilderImpl<T> imp } } - if (m_lfclCallbacks.size() > 0) { + if (m_refs.size() > 0) { setLifecycleMethodRefs(); } } @@ -544,78 +447,55 @@ public class ComponentBuilderImpl<T> imp return m_component; } - @SuppressWarnings("unchecked") - private ComponentBuilderImpl<T> setLifecycleComponentCallback(String method, Consumer<T> callback) { - m_lfclCallbacks.put(method, component -> { - callback.accept((T) component.getInstance()); + protected <U> ComponentBuilderImpl setInstanceCallbackRef(Cb cbType, MethodRef<U> ref) { + cbType.ensureLifecyleCallback(); + List<MethodRef<Object>> list = m_refs.computeIfAbsent(cbType, l -> new ArrayList<>()); + list.add((instance, component) -> { + ref.accept(null, component); }); return this; } - @SuppressWarnings("unchecked") - private ComponentBuilderImpl<T> setLifecycleComponentCallback(String method, BiConsumer<T, Component> callback) { - m_lfclCallbacks.put(method, component -> { - callback.accept((T) component.getInstance(), component); - }); - return this; - } - - private <U> ComponentBuilderImpl<T> setLifecycleCompositeCallback(String method, Class<U> type, Consumer<U> callback) { - m_lfclCallbacks.put("init", component -> { - for (Object instance : component.getInstances()) { - if (Helpers.getClass(instance).equals(type)) { - callback.accept((U) instance); - break; - } - } - }); - return this; - } - - private <U> ComponentBuilderImpl<T> setLifecycleCompositeCallback(String method, Class<U> type, BiConsumer<U, Component> callback) { - m_lfclCallbacks.put("init", component -> { - for (Object instance : component.getInstances()) { - if (Helpers.getClass(instance).equals(type)) { - callback.accept((U) instance, component); - break; + private <U> ComponentBuilderImpl setComponentCallbackRef(Cb cbType, Class<U> type, MethodRef<U> callback) { + cbType.ensureLifecyleCallback(); + List<MethodRef<Object>> list = m_refs.computeIfAbsent(cbType, l -> new ArrayList<>()); + list.add((instance, component) -> { + Stream.of(component.getInstances()).forEach(inst -> { + if (Helpers.getClass(inst).equals(type)) { + callback.accept((U) inst, component); } - } + }); }); return this; } - - private ComponentBuilderImpl<T> setLifecycleCallback(String method, Runnable callback) { - m_lfclCallbacks.put(method, component -> callback.run()); - return this; - } - + @SuppressWarnings("unused") private void setLifecycleMethodRefs() { Object cb = new Object() { void init(Component comp) { - invokeLfcleCallbacks("init", comp); + invokeLfcleCallbacks(Cb.INIT, comp); } void start(Component comp) { - invokeLfcleCallbacks("start", comp); + invokeLfcleCallbacks(Cb.START, comp); } void stop(Component comp) { - invokeLfcleCallbacks("stop", comp); + invokeLfcleCallbacks(Cb.STOP, comp); } void destroy(Component comp) { - invokeLfcleCallbacks("destroy", comp); + invokeLfcleCallbacks(Cb.DESTROY, comp); } }; m_component.setCallbacks(cb, "init", "start", "stop", "destroy"); } - private void invokeLfcleCallbacks(String method, Component component) { - m_lfclCallbacks.computeIfPresent(method, (m, componentConsumer) -> { - componentConsumer.accept(component); - return componentConsumer; - }); + private void invokeLfcleCallbacks(Cb cbType, Component component) { + m_refs.computeIfPresent(cbType, (k, mrefs) -> { + mrefs.forEach(mref -> mref.accept(null, component)); + return mrefs; + }); } }
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=1724881&r1=1724880&r2=1724881&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 Fri Jan 15 21:43:31 2016 @@ -5,8 +5,6 @@ import java.util.Dictionary; import java.util.List; import java.util.Objects; import java.util.function.Consumer; -import java.util.function.Function; -import java.util.function.Supplier; import java.util.stream.Stream; import org.apache.felix.dm.Component; @@ -18,10 +16,7 @@ import org.apache.felix.dm.builder.lambd import org.apache.felix.dm.builder.lambda.Functions.CbTypeComponentDictionary; import org.apache.felix.dm.builder.lambda.Functions.CbTypeDictionary; -public class FactoryPidAdapterBuilderImpl<T> implements - AdapterBase<T, FactoryPidAdapterBuilder<T>>, - FactoryPidAdapterBuilder<T> -{ +public class FactoryPidAdapterBuilderImpl implements AdapterBase<FactoryPidAdapterBuilder>, FactoryPidAdapterBuilder { private String m_factoryPid; private boolean m_propagate; private final DependencyManager m_dm; @@ -30,7 +25,7 @@ public class FactoryPidAdapterBuilderImp private Object m_updateCallbackInstance; private boolean m_hasMethodRefs; private boolean m_hasReflectionCallback; - private Consumer<ComponentBuilder<T>> m_compBuilder = (componentBuilder -> {}); + private Consumer<ComponentBuilder> m_compBuilder = (componentBuilder -> {}); private final List<MethodRef<Object>> m_refs = new ArrayList<>(); @FunctionalInterface @@ -42,54 +37,18 @@ public class FactoryPidAdapterBuilderImp m_dm = dm; } - public void andThenBuild(Consumer<ComponentBuilder<T>> builder) { + public void andThenBuild(Consumer<ComponentBuilder> builder) { m_compBuilder = m_compBuilder.andThen(builder); } - @SuppressWarnings("unchecked") - public <U> FactoryPidAdapterBuilder<U> impl(U impl) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.impl(impl)); - return (FactoryPidAdapterBuilder<U>) this; - } - - @SuppressWarnings("unchecked") - public <U> FactoryPidAdapterBuilder<U> impl(Class<U> implClass) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.impl(implClass)); - return (FactoryPidAdapterBuilder<U>) this; - } - - @SuppressWarnings("unchecked") - public <U> FactoryPidAdapterBuilder<U> factory(Supplier<U> create) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(create)); - return (FactoryPidAdapterBuilder<U>) this; - } - - @SuppressWarnings("unchecked") - public <U, V> FactoryPidAdapterBuilder<V> factory(Supplier<U> factory, Function<U, V> create) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(factory, create)); - return (FactoryPidAdapterBuilder<V>) this; - } - - @SuppressWarnings("unchecked") - public <U> FactoryPidAdapterBuilder<U> factory(Supplier<U> factory, Supplier<Object[]> getComposition) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(factory, getComposition)); - return (FactoryPidAdapterBuilder<U>) this; - } - - @SuppressWarnings("unchecked") - public <U, V> FactoryPidAdapterBuilder<V> factory(Supplier<U> factory, Function<U, V> create, Function<U, Object[]> getComposition) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(factory, create, getComposition)); - return (FactoryPidAdapterBuilder<V>) this; - } - @Override - public FactoryPidAdapterBuilderImpl<T> autoAdd(boolean autoAdd) { + public FactoryPidAdapterBuilderImpl autoAdd(boolean autoAdd) { m_autoAdd = autoAdd; return this; } @Override - public FactoryPidAdapterBuilderImpl<T> autoAdd() { + public FactoryPidAdapterBuilderImpl autoAdd() { m_autoAdd = true; return this; } @@ -99,61 +58,61 @@ public class FactoryPidAdapterBuilderImp } @Override - public FactoryPidAdapterBuilder<T> factoryPid(String pid) { + public FactoryPidAdapterBuilder factoryPid(String pid) { m_factoryPid = pid; return this; } @Override - public FactoryPidAdapterBuilder<T> factoryPid(Class<?> pidClass) { + public FactoryPidAdapterBuilder factoryPid(Class<?> pidClass) { m_factoryPid = pidClass.getName(); return this; } @Override - public FactoryPidAdapterBuilder<T> propagate() { + public FactoryPidAdapterBuilder propagate() { m_propagate = true; return this; } @Override - public FactoryPidAdapterBuilder<T> propagate(boolean propagate) { + public FactoryPidAdapterBuilder propagate(boolean propagate) { m_propagate = propagate; return this; } - public FactoryPidAdapterBuilder<T> cb(String update) { + public FactoryPidAdapterBuilder cb(String update) { checkHasNoMethodRefs(); m_hasReflectionCallback = true; m_updateMethodName = update; return this; } - public FactoryPidAdapterBuilder<T> cb(Object callbackInstance, String update) { + public FactoryPidAdapterBuilder cb(Object callbackInstance, String update) { cb(update); m_updateCallbackInstance = callbackInstance; return this; } @Override - public <U> FactoryPidAdapterBuilder<T> cb(CbTypeDictionary<U> callback) { + public <U> FactoryPidAdapterBuilder cb(CbTypeDictionary<U> callback) { Class<U> type = Helpers.getLambdaGenericType(callback, 0); return setComponentCallbackRef(type, (instance, component, props) -> { callback.accept((U) instance, props); }); } @Override - public <U> FactoryPidAdapterBuilder<T> cb(CbTypeComponentDictionary<U> callback) { + public <U> FactoryPidAdapterBuilder cb(CbTypeComponentDictionary<U> callback) { Class<U> type = Helpers.getLambdaGenericType(callback, 0); return setComponentCallbackRef(type, (instance, component, props) -> { callback.accept((U) instance, component, props); }); } @Override - public FactoryPidAdapterBuilder<T> cbi(CbDictionary callback) { + public FactoryPidAdapterBuilder cbi(CbDictionary callback) { return setInstanceCallbackRef((instance, component, props) -> { callback.accept(props); }); } @Override - public FactoryPidAdapterBuilder<T> cbi(CbComponentDictionary callback) { + public FactoryPidAdapterBuilder cbi(CbComponentDictionary callback) { return setInstanceCallbackRef((instance, component, props) -> { callback.accept(component, props); }); } @@ -173,12 +132,12 @@ public class FactoryPidAdapterBuilderImp } else { c = m_dm.createFactoryConfigurationAdapterService(m_factoryPid, m_updateMethodName, m_propagate, m_updateCallbackInstance); } - ComponentBuilderImpl<T> cb = new ComponentBuilderImpl<>(c, false); + ComponentBuilderImpl cb = new ComponentBuilderImpl(c, false); m_compBuilder.accept (cb); return cb.build(); } - private <U> FactoryPidAdapterBuilder<T> setInstanceCallbackRef(MethodRef<U> ref) { + private <U> FactoryPidAdapterBuilder setInstanceCallbackRef(MethodRef<U> ref) { checkHasNoReflectionCallbacks(); m_hasMethodRefs = true; m_refs.add((instance, component, props) -> ref.accept(null, component, props)); @@ -186,7 +145,7 @@ public class FactoryPidAdapterBuilderImp } @SuppressWarnings("unchecked") - private <U> FactoryPidAdapterBuilder<T> setComponentCallbackRef(Class<U> type, MethodRef<U> ref) { + private <U> FactoryPidAdapterBuilder setComponentCallbackRef(Class<U> type, MethodRef<U> ref) { checkHasNoReflectionCallbacks(); m_hasMethodRefs = true; m_refs.add((instance, component, props) -> { Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceAdapterBuilderImpl.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/ServiceAdapterBuilderImpl.java?rev=1724881&r1=1724880&r2=1724881&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceAdapterBuilderImpl.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceAdapterBuilderImpl.java Fri Jan 15 21:43:31 2016 @@ -10,16 +10,16 @@ import org.apache.felix.dm.DependencyMan import org.apache.felix.dm.builder.lambda.ComponentBuilder; import org.apache.felix.dm.builder.lambda.ServiceAdapterBuilder; -public class ServiceAdapterBuilderImpl<T, C> extends ServiceCallbacksBuilderImpl<T, ServiceAdapterBuilderImpl<T, C>> implements - AdapterBase<C, ServiceAdapterBuilder<T, C>>, - ServiceAdapterBuilder<T, C> +public class ServiceAdapterBuilderImpl<T> extends ServiceCallbacksBuilderImpl<T, ServiceAdapterBuilderImpl<T>> implements + AdapterBase<ServiceAdapterBuilder<T>>, + ServiceAdapterBuilder<T> { private final Class<?> m_adapteeType; private String m_adapteeFilter; private boolean m_propagate = true; private final DependencyManager m_dm; private boolean m_autoAdd = true; - private Consumer<ComponentBuilder<C>> m_compBuilder = (componentBuilder -> {}); + private Consumer<ComponentBuilder> m_compBuilder = (componentBuilder -> {}); public ServiceAdapterBuilderImpl(DependencyManager dm, Class<T> type) { super(type); @@ -28,53 +28,17 @@ public class ServiceAdapterBuilderImpl<T } @Override - public void andThenBuild(Consumer<ComponentBuilder<C>> after) { + public void andThenBuild(Consumer<ComponentBuilder> after) { m_compBuilder = m_compBuilder.andThen(after); } - @SuppressWarnings("unchecked") - public <U> ServiceAdapterBuilder<T, U> impl(U impl) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.impl(impl)); - return (ServiceAdapterBuilder<T, U>) this; - } - - @SuppressWarnings("unchecked") - public <U> ServiceAdapterBuilder<T, U> impl(Class<U> impl) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.impl(impl)); - return (ServiceAdapterBuilder<T, U>) this; - } - - @SuppressWarnings("unchecked") - public <U> ServiceAdapterBuilder<T, U> factory(Supplier<U> create) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(create)); - return (ServiceAdapterBuilder<T, U>) this; - } - - @SuppressWarnings("unchecked") - public <U, V> ServiceAdapterBuilder<T, V> factory(Supplier<U> factory, Function<U, V> create) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(factory, create)); - return (ServiceAdapterBuilder<T, V>) this; - } - - @SuppressWarnings("unchecked") - public <U> ServiceAdapterBuilder<T, U> factory(Supplier<U> factory, Supplier<Object[]> getComposition) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(factory, getComposition)); - return (ServiceAdapterBuilder<T, U>) this; - } - - @SuppressWarnings("unchecked") - public <U, V> ServiceAdapterBuilder<T, V> factory(Supplier<U> factory, Function<U, V> create, Function<U, Object[]> getComposition) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(factory, create, getComposition)); - return (ServiceAdapterBuilder<T, V>) this; - } - @Override - public ServiceAdapterBuilderImpl<T, C> autoAdd(boolean autoAdd) { + public ServiceAdapterBuilderImpl<T> autoAdd(boolean autoAdd) { m_autoAdd = autoAdd; return this; } - public ServiceAdapterBuilderImpl<T, C> autoAdd() { + public ServiceAdapterBuilderImpl<T> autoAdd() { m_autoAdd = true; return this; } @@ -84,19 +48,19 @@ public class ServiceAdapterBuilderImpl<T } @Override - public ServiceAdapterBuilder<T, C> filter(String adapteeFilter) { + public ServiceAdapterBuilder<T> filter(String adapteeFilter) { m_adapteeFilter = adapteeFilter; return this; } @Override - public ServiceAdapterBuilder<T, C> propagate() { + public ServiceAdapterBuilder<T> propagate() { m_propagate = true; return this; } @Override - public ServiceAdapterBuilder<T, C> propagate(boolean propagate) { + public ServiceAdapterBuilder<T> propagate(boolean propagate) { m_propagate = propagate; return this; } Modified: felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceAspectBuilderImpl.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/ServiceAspectBuilderImpl.java?rev=1724881&r1=1724880&r2=1724881&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceAspectBuilderImpl.java (original) +++ felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda/src/org/apache/felix/dm/builder/lambda/impl/ServiceAspectBuilderImpl.java Fri Jan 15 21:43:31 2016 @@ -10,16 +10,16 @@ import org.apache.felix.dm.DependencyMan import org.apache.felix.dm.builder.lambda.ComponentBuilder; import org.apache.felix.dm.builder.lambda.ServiceAspectBuilder; -public class ServiceAspectBuilderImpl<T, C> extends ServiceCallbacksBuilderImpl<T, ServiceAspectBuilderImpl<T, C>> implements - AdapterBase<C, ServiceAspectBuilder<T, C>>, - ServiceAspectBuilder<T, C> +public class ServiceAspectBuilderImpl<T> extends ServiceCallbacksBuilderImpl<T, ServiceAspectBuilderImpl<T>> implements + AdapterBase<ServiceAspectBuilder<T>>, + ServiceAspectBuilder<T> { private final DependencyManager m_dm; private final Class<?> m_aspectType; private String m_aspectFilter; private int m_aspectRanking; private boolean m_autoAdd = true; - private Consumer<ComponentBuilder<C>> m_compBuilder = (componentBuilder -> {}); + private Consumer<ComponentBuilder> m_compBuilder = (componentBuilder -> {}); public ServiceAspectBuilderImpl(DependencyManager dm, Class<T> type) { super(type); @@ -28,54 +28,18 @@ public class ServiceAspectBuilderImpl<T, } @Override - public void andThenBuild(Consumer<ComponentBuilder<C>> after) { + public void andThenBuild(Consumer<ComponentBuilder> after) { m_compBuilder = m_compBuilder.andThen(after); } - @SuppressWarnings("unchecked") - public <U> ServiceAspectBuilderImpl<T, U> impl(U impl) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.impl(impl)); - return (ServiceAspectBuilderImpl<T, U>) this; - } - - @SuppressWarnings("unchecked") - public <U> ServiceAspectBuilderImpl<T, U> impl(Class<U> impl) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.impl(impl)); - return (ServiceAspectBuilderImpl<T, U>) this; - } - - @SuppressWarnings("unchecked") - public <U> ServiceAspectBuilderImpl<T, U> factory(Supplier<U> create) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(create)); - return (ServiceAspectBuilderImpl<T, U>) this; - } - - @SuppressWarnings("unchecked") - public <U, V> ServiceAspectBuilderImpl<T, V> factory(Supplier<U> factory, Function<U, V> create) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(factory, create)); - return (ServiceAspectBuilderImpl<T, V>) this; - } - - @SuppressWarnings("unchecked") - public <U> ServiceAspectBuilderImpl<T, U> factory(Supplier<U> factory, Supplier<Object[]> getComposition) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(factory, getComposition)); - return (ServiceAspectBuilderImpl<T, U>) this; - } - - @SuppressWarnings("unchecked") - public <U, V> ServiceAspectBuilderImpl<T, V> factory(Supplier<U> factory, Function<U, V> create, Function<U, Object[]> getComposition) { - m_compBuilder = m_compBuilder.andThen(compBuilder -> compBuilder.factory(factory, create, getComposition)); - return (ServiceAspectBuilderImpl<T, V>) this; - } - @Override - public ServiceAspectBuilderImpl<T, C> autoAdd(boolean autoAdd) { + public ServiceAspectBuilderImpl<T> autoAdd(boolean autoAdd) { m_autoAdd = autoAdd; return this; } @Override - public ServiceAspectBuilderImpl<T, C> autoAdd() { + public ServiceAspectBuilderImpl<T> autoAdd() { m_autoAdd = true; return this; } @@ -85,13 +49,13 @@ public class ServiceAspectBuilderImpl<T, } @Override - public ServiceAspectBuilder<T, C> filter(String aspectFilter) { + public ServiceAspectBuilder<T> filter(String aspectFilter) { m_aspectFilter = aspectFilter; return this; } @Override - public ServiceAspectBuilder<T, C> rank(int ranking) { + public ServiceAspectBuilder<T> rank(int ranking) { m_aspectRanking = ranking; return this; } @@ -119,7 +83,7 @@ public class ServiceAspectBuilderImpl<T, } else { c = m_dm.createAspectService(m_aspectType, m_aspectFilter, m_aspectRanking); } - ComponentBuilderImpl<C> cb = new ComponentBuilderImpl<>(c, false); + ComponentBuilderImpl cb = new ComponentBuilderImpl(c, false); // m_compBuilder is a composed consumer that calls in sequence all necessary component builder methods. m_compBuilder.accept (cb); return cb.build(); 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=1724881&r1=1724880&r2=1724881&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 Fri Jan 15 21:43:31 2016 @@ -63,7 +63,7 @@ public abstract class ServiceCallbacksBu /** * List of service (add/change/remove) callbacks. */ - protected final Map<String, List<MethodRef<Object, S>>> m_refs = new HashMap<>(); + protected final Map<Cb, List<MethodRef<Object, S>>> m_refs = new HashMap<>(); /** * List of swap callbacks @@ -157,112 +157,112 @@ public abstract class ServiceCallbacksBu } public <T> B cb(Cb cbType, CbTypeService<T, S> callback) { - return setComponentCallbackRef(cbType.getCallback(), Helpers.getLambdaGenericType(callback, 0), + return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, service)); } public <T> B cb(Cb cbType, CbTypeServiceMap<T, S> callback) { - return setComponentCallbackRef(cbType.getCallback(), Helpers.getLambdaGenericType(callback, 0), + return setComponentCallbackRef(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) { - return setComponentCallbackRef(cbType.getCallback(), Helpers.getLambdaGenericType(callback, 0), + return setComponentCallbackRef(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) { - return setComponentCallbackRef(cbType.getCallback(), Helpers.getLambdaGenericType(callback, 0), + return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, ref)); } public <T> B cb(Cb cbType, CbTypeRefService<T, S> callback) { - return setComponentCallbackRef(cbType.getCallback(), Helpers.getLambdaGenericType(callback, 0), + return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, ref, service)); } public <T> B cb(Cb cbType, CbTypeComponent<T> callback) { - return setComponentCallbackRef(cbType.getCallback(), Helpers.getLambdaGenericType(callback, 0), + return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, component)); } public <T> B cb(Cb cbType, CbTypeComponentService<T, S> callback) { - return setComponentCallbackRef(cbType.getCallback(), Helpers.getLambdaGenericType(callback, 0), + return setComponentCallbackRef(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) { - return setComponentCallbackRef(cbType.getCallback(), Helpers.getLambdaGenericType(callback, 0), + return setComponentCallbackRef(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) { - return setComponentCallbackRef(cbType.getCallback(), Helpers.getLambdaGenericType(callback, 0), + return setComponentCallbackRef(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) { - return setComponentCallbackRef(cbType.getCallback(), Helpers.getLambdaGenericType(callback, 0), + return setComponentCallbackRef(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) { - return setComponentCallbackRef(cbType.getCallback(), Helpers.getLambdaGenericType(callback, 0), + return setComponentCallbackRef(cbType, Helpers.getLambdaGenericType(callback, 0), (instance, component, ref, service) -> callback.accept((T) instance, component, ref, service)); } public B cbi(Cb cbType, CbService<S> callback) { - return setInstanceCallbackRef(cbType.getCallback(), + return setInstanceCallbackRef(cbType, (instance, component, ref, service) -> callback.accept(service)); } public B cbi(Cb cbType, CbServiceMap<S> callback) { - return setInstanceCallbackRef(cbType.getCallback(), + return setInstanceCallbackRef(cbType, (instance, component, ref, service) -> callback.accept(service, new SRefAsMap(ref))); } public B cbi(Cb cbType, CbServiceDict<S> callback) { - return setInstanceCallbackRef(cbType.getCallback(), + return setInstanceCallbackRef(cbType, (instance, component, ref, service) -> callback.accept(service, new SRefAsDictionary(ref))); } public B cbi(Cb cbType, CbRef<S> callback) { - return setInstanceCallbackRef(cbType.getCallback(), + return setInstanceCallbackRef(cbType, (instance, component, ref, service) -> callback.accept(ref)); } public B cbi(Cb cbType, CbRefService<S> callback) { - return setInstanceCallbackRef(cbType.getCallback(), + return setInstanceCallbackRef(cbType, (instance, component, ref, service) -> callback.accept(ref, service)); } public B cbi(Cb cbType, CbComponent callback) { - return setInstanceCallbackRef(cbType.getCallback(), + return setInstanceCallbackRef(cbType, (instance, component, ref, service) -> callback.accept(component)); } public B cbi(Cb cbType, CbComponentService<S> callback) { - return setInstanceCallbackRef(cbType.getCallback(), + return setInstanceCallbackRef(cbType, (instance, component, ref, service) -> callback.accept(component, service)); } public B cbi(Cb cbType, CbComponentServiceMap<S> callback) { - return setInstanceCallbackRef(cbType.getCallback(), + return setInstanceCallbackRef(cbType, (instance, component, ref, service) -> callback.accept(component, service, new SRefAsMap(ref))); } public B cbi(Cb cbType, CbComponentServiceDict<S> callback) { - return setInstanceCallbackRef(cbType.getCallback(), + return setInstanceCallbackRef(cbType, (instance, component, ref, service) -> callback.accept(component, service, new SRefAsDictionary(ref))); } public B cbi(Cb cbType, CbComponentRef<S> callback) { - return setInstanceCallbackRef(cbType.getCallback(), + return setInstanceCallbackRef(cbType, (instance, component, ref, service) -> callback.accept(component, ref)); } public B cbi(Cb cbType, CbComponentRefService<S> callback) { - return setInstanceCallbackRef(cbType.getCallback(), + return setInstanceCallbackRef(cbType, (instance, component, ref, service) -> callback.accept(component, ref, service)); } @@ -308,10 +308,11 @@ public abstract class ServiceCallbacksBu swap.accept(new SRefAsDictionary(oref), oserv, new SRefAsDictionary(nref), nserv)); } - protected <I> B setComponentCallbackRef(String cb, Class<I> type, MethodRef<I, S> ref) { + 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(cb, l -> new ArrayList<>()); + List<MethodRef<Object, S>> list = m_refs.computeIfAbsent(cbType, l -> new ArrayList<>()); list.add((instance, component, sref, service) -> { Stream.of(component.getInstances()).forEach(inst -> { if (Helpers.getClass(inst).equals(type)) { @@ -322,10 +323,11 @@ public abstract class ServiceCallbacksBu return (B) this; } - protected <T> B setInstanceCallbackRef(String cb, MethodRef<T, S> ref) { + 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(cb, l -> new ArrayList<>()); + List<MethodRef<Object, S>> list = m_refs.computeIfAbsent(cbType, l -> new ArrayList<>()); list.add((instance, component, sref, service) -> { ref.accept((T) component.getInstance(), component, sref, service); }); @@ -359,15 +361,15 @@ public abstract class ServiceCallbacksBu cb = new Object() { void add(Component c, ServiceReference<S> ref, Object service) { - invokeMethodRefs("add", c, ref, (S) service); + invokeMethodRefs(Cb.ADD, c, ref, (S) service); } void change(Component c, ServiceReference<S> ref, Object service) { - invokeMethodRefs("change", c, ref, (S) service); + invokeMethodRefs(Cb.CHG, c, ref, (S) service); } void remove(Component c, ServiceReference<S> ref, Object service) { - invokeMethodRefs("remove", c, ref, (S) service); + invokeMethodRefs(Cb.REM, c, ref, (S) service); } void swap(Component c, ServiceReference<S> oldRef, Object oldSrv, ServiceReference<S> newRef, Object newSrv) { @@ -386,8 +388,8 @@ public abstract class ServiceCallbacksBu return m_callbackInstance != null || m_added != null || m_changed != null || m_removed != null || m_swapped != null; } - private void invokeMethodRefs(String method, Component comp, ServiceReference<S> ref, S service) { - m_refs.computeIfPresent(method, (k, mrefs) -> { + private void invokeMethodRefs(Cb cbType, Component comp, ServiceReference<S> ref, S service) { + m_refs.computeIfPresent(cbType, (k, mrefs) -> { mrefs.forEach(mref -> mref.accept(null, comp, ref, service)); return mrefs; });
