X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=binding%2Fmdsal-binding-dom-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fadapter%2FBindingDOMRpcServiceAdapter.java;h=a135dabd9ec7adc0d7b3f1feee32c1631201a8bb;hb=f32d60d52822032fffba42209ba458869a4a01f4;hp=daa87a4398803756b1b3fd99fcc5279df0f7bd86;hpb=5445382e4f54d1a0b14ed2ce7e698f48467714f8;p=mdsal.git diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcServiceAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcServiceAdapter.java index daa87a4398..a135dabd9e 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcServiceAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcServiceAdapter.java @@ -7,72 +7,48 @@ */ package org.opendaylight.mdsal.binding.dom.adapter; -import org.opendaylight.mdsal.dom.api.DOMRpcService; -import org.opendaylight.mdsal.dom.api.DOMService; +import static com.google.common.base.Preconditions.checkArgument; +import static java.util.Objects.requireNonNull; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; -import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMAdapterBuilder.Factory; -import com.google.common.base.Preconditions; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableSet; import java.util.Set; -import org.opendaylight.yangtools.yang.binding.RpcService; -import org.opendaylight.yangtools.yang.binding.util.BindingReflections; - -public class BindingDOMRpcServiceAdapter implements RpcConsumerRegistry { - - protected static final Factory BUILDER_FACTORY = new Factory() { - - @Override - public BindingDOMAdapterBuilder newBuilder() { - return new Builder(); - } - - }; - - private final LoadingCache, RpcServiceAdapter> proxies = CacheBuilder.newBuilder() - .weakKeys() - .build(new CacheLoader, RpcServiceAdapter>() { - - @Override - public RpcServiceAdapter load(final Class key) throws Exception { - return createProxy(key); - } - - }); +import org.opendaylight.mdsal.binding.api.RpcService; +import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMAdapterBuilder.Factory; +import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; +import org.opendaylight.mdsal.dom.api.DOMRpcService; +import org.opendaylight.mdsal.dom.api.DOMService; +import org.opendaylight.yangtools.yang.binding.Rpc; - private final DOMRpcService domService; - private final BindingToNormalizedNodeCodec codec; +@VisibleForTesting +public final class BindingDOMRpcServiceAdapter + extends AbstractBindingLoadingAdapter, RpcAdapter> implements RpcService { + static final Factory BUILDER_FACTORY = Builder::new; - public BindingDOMRpcServiceAdapter(final DOMRpcService domService, final BindingToNormalizedNodeCodec codec) { - super(); - this.domService = domService; - this.codec = codec; + public BindingDOMRpcServiceAdapter(final AdapterContext adapterContext, final DOMRpcService domService) { + super(adapterContext, domService); } - @SuppressWarnings("unchecked") @Override - public T getRpcService(final Class rpcService) { - Preconditions.checkArgument(rpcService != null, "Rpc Service needs to be specied."); - return (T) proxies.getUnchecked(rpcService).getProxy(); + public > T getRpc(final Class rpcInterface) { + return rpcInterface.cast(getAdapter(requireNonNull(rpcInterface)).facade()); } - private RpcServiceAdapter createProxy(final Class key) { - Preconditions.checkArgument(BindingReflections.isBindingClass(key)); - Preconditions.checkArgument(key.isInterface(), "Supplied RPC service type must be interface."); - return new RpcServiceAdapter(key, codec, domService); + @Override + RpcAdapter loadAdapter(final Class key) { + checkArgument(BindingReflections.isBindingClass(key)); + checkArgument(key.isInterface(), "Supplied RPC service type must be interface."); + if (Rpc.class.isAssignableFrom(key)) { + return new RpcAdapter(adapterContext(), getDelegate(), key.asSubclass(Rpc.class)); + } else { + throw new IllegalStateException("Unhandled key " + key); + } } - private static final class Builder extends BindingDOMAdapterBuilder { - - @Override - protected RpcConsumerRegistry createInstance(final BindingToNormalizedNodeCodec codec, - final ClassToInstanceMap delegates) { - final DOMRpcService domRpc = delegates.getInstance(DOMRpcService.class); - return new BindingDOMRpcServiceAdapter(domRpc , codec); + private static final class Builder extends BindingDOMAdapterBuilder { + Builder(final AdapterContext adapterContext) { + super(adapterContext); } @Override @@ -80,6 +56,9 @@ public class BindingDOMRpcServiceAdapter implements RpcConsumerRegistry { return ImmutableSet.of(DOMRpcService.class); } + @Override + protected RpcService createInstance(final ClassToInstanceMap delegates) { + return new BindingDOMRpcServiceAdapter(adapterContext(), delegates.getInstance(DOMRpcService.class)); + } } - }