X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-dom-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fadapter%2FActionServiceAdapter.java;h=77416b5f1e6c8a5b1590bffa477f95cf71d43e40;hb=c3a2361f4c0de50dba3e64e066d30cfcb32776df;hp=a371947420858d6d227449fbb0015e91e8a62cff;hpb=ba15064d1ee4e3b98cf7e157b9f464e022b644ea;p=mdsal.git diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java index a371947420..77416b5f1e 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java @@ -8,70 +8,63 @@ package org.opendaylight.mdsal.binding.dom.adapter; import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkState; -import static java.util.Objects.requireNonNull; -import com.google.common.annotations.Beta; +import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableSet; -import com.google.common.util.concurrent.FluentFuture; import java.lang.reflect.Proxy; import java.util.Set; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.mdsal.binding.api.ActionService; +import org.opendaylight.mdsal.binding.api.ActionSpec; import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; +import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMAdapterBuilder.Factory; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.mdsal.dom.api.DOMActionService; -import org.opendaylight.yangtools.concepts.Delegator; +import org.opendaylight.mdsal.dom.api.DOMService; import org.opendaylight.yangtools.yang.binding.Action; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.RpcInput; -import org.opendaylight.yangtools.yang.binding.RpcOutput; -import org.opendaylight.yangtools.yang.common.RpcResult; -@Beta @NonNullByDefault final class ActionServiceAdapter - extends AbstractBindingLoadingAdapter>, ActionAdapter> + extends AbstractBindingLoadingAdapter, ActionAdapter> implements ActionService { - private static final class ConstrainedAction implements Delegator>, - Action, RpcInput, RpcOutput> { - private final Action, RpcInput, RpcOutput> delegate; - private final Set> nodes; - - ConstrainedAction(final Action delegate, final Set> nodes) { - this.delegate = requireNonNull((Action) delegate); - this.nodes = requireNonNull(nodes); + private static final class Builder extends BindingDOMAdapterBuilder { + Builder(final AdapterContext adapterContext) { + super(adapterContext); } @Override - public FluentFuture> invoke(final InstanceIdentifier path, final RpcInput input) { - checkState(nodes.contains(path), "Cannot service %s", path); - return delegate.invoke(path, input); + public Set> getRequiredDelegates() { + return ImmutableSet.of(DOMActionService.class); } @Override - public Action getDelegate() { - return delegate; + protected ActionService createInstance(final ClassToInstanceMap delegates) { + return new ActionServiceAdapter(adapterContext(), delegates.getInstance(DOMActionService.class)); } } - ActionServiceAdapter(final BindingToNormalizedNodeCodec codec, final DOMActionService delegate) { - super(codec, delegate); + static final Factory BUILDER_FACTORY = Builder::new; + + ActionServiceAdapter(final AdapterContext adapterContext, final DOMActionService delegate) { + super(adapterContext, delegate); } @Override - public > T getActionHandle(final Class actionInterface, - final Set> nodes) { - return !nodes.isEmpty() ? (T) new ConstrainedAction(getActionHandle(actionInterface, ImmutableSet.of()), nodes) - : (T) Proxy.newProxyInstance(actionInterface.getClassLoader(), new Class[] { actionInterface }, - getAdapter(actionInterface)); + public

, ?, ?>> A getActionHandle( + final ActionSpec spec, final Set> nodes) { + final var type = spec.type(); + final var adapter = getAdapter(spec); + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[] { type }, + nodes.isEmpty() ? adapter : new ActionAdapterFilter(adapter, Set.copyOf(nodes)))); } @Override - ActionAdapter loadAdapter(final Class> key) { - checkArgument(BindingReflections.isBindingClass(key)); - checkArgument(key.isInterface(), "Supplied Action type must be an interface."); - return new ActionAdapter(getCodec(), getDelegate(), key); + ActionAdapter loadAdapter(final ActionSpec key) { + final var type = key.type(); + checkArgument(BindingReflections.isBindingClass(type)); + checkArgument(type.isInterface(), "Supplied Action type must be an interface."); + return new ActionAdapter(adapterContext(), getDelegate(), key); } }