X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fbinding%2Fimpl%2Fconnect%2Fdom%2FRpcInvocationStrategy.java;h=2a6de4af0a0d2ed5eb6f1887ad7e1a26aa166f4c;hb=c90b3cfcb48dd75cc3cc6305aaac1bbabad8d9fe;hp=d08b217e71c547ea3cd2aa3dcb24a0b3374e9744;hpb=803d525860fbb1974b65ba5605ba5a9dfe1928a4;p=controller.git diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/RpcInvocationStrategy.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/RpcInvocationStrategy.java index d08b217e71..2a6de4af0a 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/RpcInvocationStrategy.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/RpcInvocationStrategy.java @@ -8,32 +8,29 @@ package org.opendaylight.controller.sal.binding.impl.connect.dom; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import java.lang.ref.WeakReference; import java.lang.reflect.Method; -import java.util.Collection; import java.util.Collections; import java.util.concurrent.Future; - -import org.opendaylight.controller.sal.common.util.Rpcs; import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry; import org.opendaylight.yangtools.yang.binding.DataContainer; 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.RpcError; import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.data.api.CompositeNode; import org.opendaylight.yangtools.yang.data.api.Node; import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode; import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMappingService; -import com.google.common.base.Function; -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableList; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; - /* * RPC's can have both input, output, one or the other, or neither. * @@ -46,6 +43,20 @@ import com.google.common.util.concurrent.ListenableFuture; * */ public class RpcInvocationStrategy { + private final Function, RpcResult> transformationFunction = new Function, RpcResult>() { + @SuppressWarnings("rawtypes") + @Override + public RpcResult apply(final RpcResult result) { + final Object output; + if (getOutputClass() != null && result.getResult() != null) { + output = mappingService.dataObjectFromDataDom(getOutputClass().get(), result.getResult()); + } else { + output = null; + } + + return RpcResultBuilder.from( (RpcResult)result ).withResult( output ).build(); + } + }; private final BindingIndependentMappingService mappingService; private final RpcProvisionRegistry biRpcRegistry; @@ -63,33 +74,31 @@ public class RpcInvocationStrategy { final Method targetMethod, final BindingIndependentMappingService mappingService, final RpcProvisionRegistry biRpcRegistry ) { - + this.mappingService = mappingService; + this.biRpcRegistry = biRpcRegistry; this.targetMethod = targetMethod; this.rpc = rpc; - Optional> outputClassOption = BindingReflections.resolveRpcOutputClass(targetMethod); - Optional> inputClassOption = BindingReflections.resolveRpcInputClass(targetMethod); - - if ( outputClassOption != null && outputClassOption.isPresent() ) { - this.outputClass = new WeakReference(outputClassOption.get() ) ; + final Optional> outputClassOption = BindingReflections.resolveRpcOutputClass(targetMethod); + if (outputClassOption.isPresent()) { + this.outputClass = new WeakReference(outputClassOption.get()); } else { - this.outputClass = null ; + this.outputClass = null; } - if ( inputClassOption != null && inputClassOption.isPresent() ) { - this.inputClass = new WeakReference(inputClassOption.get() ) ; + + final Optional> inputClassOption = BindingReflections.resolveRpcInputClass(targetMethod); + if (inputClassOption.isPresent() ) { + this.inputClass = new WeakReference(inputClassOption.get()); } else { - this.inputClass = null ; + this.inputClass = null; } - - this.mappingService = mappingService; - this.biRpcRegistry = biRpcRegistry; } @SuppressWarnings({ "unchecked" }) public ListenableFuture> forwardToDomBroker(final DataObject input) { if(biRpcRegistry == null) { - return Futures.> immediateFuture(Rpcs.getRpcResult(false)); + return Futures.> immediateFuture(RpcResultBuilder.failed().build()); } CompositeNode inputXml = null; @@ -100,24 +109,6 @@ public class RpcInvocationStrategy { inputXml = ImmutableCompositeNode.create( rpc, Collections.>emptyList() ); } - Function, RpcResult> transformationFunction = - new Function, RpcResult>() { - @Override - public RpcResult apply(RpcResult result) { - - Object output = null; - - if( getOutputClass() != null ) { - if (result.getResult() != null) { - output = mappingService.dataObjectFromDataDom(getOutputClass().get(), - result.getResult()); - } - } - - return Rpcs.getRpcResult(result.isSuccessful(), output, result.getErrors()); - } - }; - return Futures.transform(biRpcRegistry.invokeRpc(rpc, inputXml), transformationFunction); } @@ -135,22 +126,18 @@ public class RpcInvocationStrategy { } if (futureResult == null) { - return Rpcs.getRpcResult(false); + return RpcResultBuilder.failed().build(); } - RpcResult bindingResult = futureResult.get(); - - Collection errors = bindingResult.getErrors(); - if( errors == null ) { - errors = Collections.emptySet(); - } + @SuppressWarnings("rawtypes") + RpcResult bindingResult = futureResult.get(); final Object resultObj = bindingResult.getResult(); - CompositeNode output = null; + Object output = null; if (resultObj instanceof DataObject) { output = mappingService.toDataDom((DataObject)resultObj); } - return Rpcs.getRpcResult( bindingResult.isSuccessful(), output, errors); + return RpcResultBuilder.from( bindingResult ).withResult( output ).build(); } public RpcResult invokeOn(final RpcService rpcService, final CompositeNode domInput) throws Exception { @@ -158,7 +145,8 @@ public class RpcInvocationStrategy { } @SuppressWarnings("rawtypes") - public WeakReference getOutputClass() { + @VisibleForTesting + WeakReference getOutputClass() { return outputClass; } }