Specialize SchemalessRpcService
[netconf.git] / netconf / sal-netconf-connector / src / main / java / org / opendaylight / netconf / sal / connect / netconf / schema / mapping / BaseRpcSchemalessTransformer.java
index eef1b8117d92b6ec6d6e22e9d31188452a873403..2dc39b11ea964f1e598237a3c92cb671378f9c3a 100644 (file)
@@ -7,7 +7,9 @@
  */
 package org.opendaylight.netconf.sal.connect.netconf.schema.mapping;
 
-import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import com.google.common.collect.ImmutableMap;
 import java.io.IOException;
 import javax.xml.stream.XMLStreamException;
@@ -22,6 +24,7 @@ import org.opendaylight.netconf.sal.connect.api.RpcTransformer;
 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
 import org.opendaylight.netconf.sal.connect.util.MessageCounter;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -35,7 +38,7 @@ import org.w3c.dom.Element;
 /**
  * Transforms base netconf RPCs.
  */
-public class BaseRpcSchemalessTransformer implements RpcTransformer {
+public class BaseRpcSchemalessTransformer implements RpcTransformer<NormalizedNode, DOMRpcResult> {
     private final ImmutableMap<QName, ? extends RpcDefinition> mappedRpcs;
     private final EffectiveModelContext modelContext;
     private final MessageCounter counter;
@@ -51,15 +54,15 @@ public class BaseRpcSchemalessTransformer implements RpcTransformer {
     public NetconfMessage toRpcRequest(final QName rpc, final NormalizedNode payload) {
         // In case no input for rpc is defined, we can simply construct the payload here
 
-        final RpcDefinition mappedRpc = Preconditions.checkNotNull(mappedRpcs.get(rpc),
+        final var mappedRpc = checkNotNull(mappedRpcs.get(rpc),
             "Unknown rpc %s, available rpcs: %s", rpc, mappedRpcs.keySet());
         final DOMResult domResult = NetconfMessageTransformUtil.prepareDomResultForRpcRequest(rpc, counter);
         if (mappedRpc.getInput().getChildNodes().isEmpty()) {
             return new NetconfMessage(domResult.getNode().getOwnerDocument());
         }
 
-        Preconditions.checkNotNull(payload, "Transforming an rpc with input: %s, payload cannot be null", rpc);
-        Preconditions.checkArgument(payload instanceof ContainerNode,
+        checkNotNull(payload, "Transforming an rpc with input: %s, payload cannot be null", rpc);
+        checkArgument(payload instanceof ContainerNode,
                 "Transforming an rpc with input: %s, payload has to be a container, but was: %s", rpc, payload);
 
         final DOMResult result = domResult;
@@ -76,7 +79,12 @@ public class BaseRpcSchemalessTransformer implements RpcTransformer {
     }
 
     @Override
-    public DOMRpcResult toRpcResult(final NetconfMessage message, final QName rpc) {
+    public DOMRpcResult toRpcResult(final RpcResult<NetconfMessage> resultPayload, final QName rpc) {
+        if (!resultPayload.isSuccessful()) {
+            return new DefaultDOMRpcResult(resultPayload.getErrors());
+        }
+
+        final var message = resultPayload.getResult();
         final ContainerNode normalizedNode;
         if (NetconfMessageTransformUtil.isDataRetrievalOperation(rpc)) {
             final Element xmlData = NetconfMessageTransformUtil.getDataSubtree(message.getDocument());
@@ -92,8 +100,8 @@ public class BaseRpcSchemalessTransformer implements RpcTransformer {
                     .withChild(xmlDataNode).build();
         } else {
             //other base rpcs don't have any output, we can simply construct the payload here
-            Preconditions.checkArgument(isOkPresent(message.getDocument()),
-                    "Unexpected content in response of rpc: %s, %s", rpc, message);
+            checkArgument(isOkPresent(message.getDocument()),
+                "Unexpected content in response of rpc: %s, %s", rpc, message);
             normalizedNode = null;
 
         }