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=41b9caa6a8f0dcb918a57bb8036f52613d1e0a36;hpb=0f351bbc28ddf2cddfe30c8d018646d81953fa17;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 41b9caa6a8..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,97 +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.eclipse.jdt.annotation.Nullable; 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.mdsal.dom.api.DOMService; -import org.opendaylight.yangtools.concepts.Delegator; 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 -// FIXME: make this class non-public once the controller user is gone -public final class ActionServiceAdapter - extends AbstractBindingLoadingAdapter>, ActionAdapter> +final class ActionServiceAdapter + extends AbstractBindingLoadingAdapter, ActionAdapter> implements ActionService { private static final class Builder extends BindingDOMAdapterBuilder { - @Override - protected ActionService createInstance(final @Nullable BindingToNormalizedNodeCodec codec, - final ClassToInstanceMap delegates) { - final DOMActionService domAction = delegates.getInstance(DOMActionService.class); - return new ActionServiceAdapter(requireNonNull(codec), domAction); + Builder(final AdapterContext adapterContext) { + super(adapterContext); } @Override public Set> getRequiredDelegates() { return ImmutableSet.of(DOMActionService.class); } - } - - 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); - } @Override - public FluentFuture> invoke(final InstanceIdentifier path, final RpcInput input) { - checkState(nodes.contains(path), "Cannot service %s", path); - return delegate.invoke(path, input); - } - - @Override - public Action getDelegate() { - return delegate; + protected ActionService createInstance(final ClassToInstanceMap delegates) { + return new ActionServiceAdapter(adapterContext(), delegates.getInstance(DOMActionService.class)); } } static final Factory BUILDER_FACTORY = Builder::new; - ActionServiceAdapter(final BindingToNormalizedNodeCodec codec, final DOMActionService delegate) { - super(codec, delegate); - } - - @Deprecated - public static ActionServiceAdapter create(final BindingToNormalizedNodeCodec codec, - final DOMActionService delegate) { - return new ActionServiceAdapter(codec, delegate); + 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); } }