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=6504341d930cea322c6537c4dcd6f877691c8e76;hp=6b64b7ea55473a98027b75a7a96cf9571acfa00e;hb=6dbf8f82cfa9fe8c35e4085213a55cb887cc3aee;hpb=d9800cbf479560878b54b5a9c4a202da613da973 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..6504341d93 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,47 +7,23 @@ */ package org.opendaylight.controller.md.sal.binding.impl; -import com.google.common.base.Function; 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.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.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 { +public class BindingDOMRpcServiceAdapter implements RpcConsumerRegistry { - protected static final Factory BUILDER_FACTORY = new Factory() { - - @Override - public BindingDOMAdapterBuilder newBuilder() { - return new Builder(); - } - - }; + protected static final Factory BUILDER_FACTORY = Builder::new; private final LoadingCache, RpcServiceAdapter> proxies = CacheBuilder.newBuilder() .weakKeys() @@ -64,59 +40,21 @@ 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()); + return (T) proxies.getUnchecked(rpcService).getProxy(); } 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()); - } - }); + return new RpcServiceAdapter(key, codec, domService); } private static final class Builder extends BindingDOMAdapterBuilder {