X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fbinding%2Fimpl%2FBindingDOMRpcServiceAdapter.java;h=1981bd6cd850d3ba6ee6744f464dcf5ae8efd0fc;hp=6b64b7ea55473a98027b75a7a96cf9571acfa00e;hb=8a01ebe93fac21b1ae80dcfcc81c21543ec1a687;hpb=f3473ee42d45f1524dcafa6cc37e19e0393e9693 diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcServiceAdapter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcServiceAdapter.java index 6b64b7ea55..1981bd6cd8 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcServiceAdapter.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcServiceAdapter.java @@ -7,55 +7,35 @@ */ package org.opendaylight.controller.md.sal.binding.impl; -import com.google.common.base.Function; -import com.google.common.base.Preconditions; +import static com.google.common.base.Preconditions.checkArgument; + import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.collect.ClassToInstanceMap; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import java.lang.reflect.Method; import java.util.Set; import org.opendaylight.controller.md.sal.binding.impl.BindingDOMAdapterBuilder.Factory; -import org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.InvocationDelegate; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; import org.opendaylight.controller.md.sal.dom.api.DOMService; import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; -import org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry; -import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.yangtools.yang.binding.RpcService; -import org.opendaylight.yangtools.yang.binding.util.BindingReflections; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yangtools.yang.common.RpcResultBuilder; -import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.model.api.SchemaPath; - -public class BindingDOMRpcServiceAdapter implements RpcConsumerRegistry, InvocationDelegate { - - protected static final Factory BUILDER_FACTORY = new Factory() { - @Override - public BindingDOMAdapterBuilder newBuilder() { - return new Builder(); - } +@Deprecated +public class BindingDOMRpcServiceAdapter implements RpcConsumerRegistry { - }; + protected static final Factory BUILDER_FACTORY = Builder::new; private final LoadingCache, RpcServiceAdapter> proxies = CacheBuilder.newBuilder() .weakKeys() .build(new CacheLoader, RpcServiceAdapter>() { @Override - public RpcServiceAdapter load(final Class key) throws Exception { - return createProxy(key); + public RpcServiceAdapter load(final Class key) { + checkArgument(BindingReflections.isBindingClass(key)); + checkArgument(key.isInterface(), "Supplied RPC service type must be interface."); + return new RpcServiceAdapter(key, codec, domService); } }); @@ -64,59 +44,15 @@ public class BindingDOMRpcServiceAdapter implements RpcConsumerRegistry, Invocat private final BindingToNormalizedNodeCodec codec; public BindingDOMRpcServiceAdapter(final DOMRpcService domService, final BindingToNormalizedNodeCodec codec) { - super(); this.domService = domService; this.codec = codec; } + @SuppressWarnings("unchecked") @Override public T getRpcService(final Class rpcService) { - Preconditions.checkArgument(rpcService != null, "Rpc Service needs to be specied."); - @SuppressWarnings("unchecked") - final - T proxy = (T) proxies.getUnchecked(rpcService).getProxy(); - return proxy; - } - - @Override - public ListenableFuture> invoke(final SchemaPath rpc, final DataObject input) { - final CheckedFuture domFuture = domService.invokeRpc(rpc, serialize(rpc,input)); - return transformFuture(rpc,domFuture,codec.getCodecRegistry()); - } - - private RpcServiceAdapter createProxy(final Class key) { - Preconditions.checkArgument(BindingReflections.isBindingClass(key)); - Preconditions.checkArgument(key.isInterface(), "Supplied RPC service type must be interface."); - final ImmutableMap rpcNames = codec.getRpcMethodToSchemaPath(key); - return new RpcServiceAdapter(key, rpcNames, this); - } - - private NormalizedNode serialize(final SchemaPath rpc,final DataObject input) { - if(input == null) { - return null; - } - final QName rpcInputIdentifier = QName.create(rpc.getLastComponent(),"input"); - return new LazySerializedContainerNode(rpcInputIdentifier, input, codec.getCodecRegistry()); - } - - private static ListenableFuture> transformFuture(final SchemaPath rpc,final ListenableFuture domFuture, final BindingNormalizedNodeCodecRegistry codec) { - return Futures.transform(domFuture, new Function>() { - @Override - public RpcResult apply(final DOMRpcResult input) { - if(input instanceof LazySerializedDOMRpcResult) { - return ((LazySerializedDOMRpcResult) input).bidningRpcResult(); - } - final NormalizedNode domData = input.getResult(); - final DataObject bindingResult; - if(domData != null) { - final SchemaPath rpcOutput = rpc.createChild(QName.create(rpc.getLastComponent(),"output")); - bindingResult = codec.fromNormalizedNodeRpcData(rpcOutput, (ContainerNode) domData); - } else { - bindingResult = null; - } - return RpcResult.class.cast(RpcResultBuilder.success(bindingResult).build()); - } - }); + checkArgument(rpcService != null, "Rpc Service needs to be specied."); + return (T) proxies.getUnchecked(rpcService).getProxy(); } private static final class Builder extends BindingDOMAdapterBuilder { @@ -132,7 +68,5 @@ public class BindingDOMRpcServiceAdapter implements RpcConsumerRegistry, Invocat public Set> getRequiredDelegates() { return ImmutableSet.of(DOMRpcService.class); } - } - }