Merge "Do not check whether two nodes can be merged with reference comparison"
authorJakub Morvay <jakub.morvay@gmail.com>
Tue, 15 Jan 2019 16:53:24 +0000 (16:53 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 15 Jan 2019 16:53:24 +0000 (16:53 +0000)
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformer.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseSchema.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java

index bd5f3b75f6f773c3b461fc78e4711a70c6aa577a..5bc655cb938960b7c3fa5840e1cc39a973d2d955 100644 (file)
@@ -23,6 +23,7 @@ import org.opendaylight.netconf.sal.connect.api.MessageTransformer;
 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.YangConstants;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
@@ -58,10 +59,10 @@ public class BaseRpcSchemalessTransformer implements MessageTransformer<NetconfM
         // In case no input for rpc is defined, we can simply construct the payload here
         final QName rpcQName = rpc.getLastComponent();
 
-        Preconditions.checkNotNull(MAPPED_RPCS.get(rpcQName), "Unknown rpc %s, available rpcs: %s",
-                rpcQName, MAPPED_RPCS.keySet());
+        final RpcDefinition mappedRpc = Preconditions.checkNotNull(MAPPED_RPCS.get(rpcQName),
+            "Unknown rpc %s, available rpcs: %s", rpcQName, MAPPED_RPCS.keySet());
         final DOMResult domResult = NetconfMessageTransformUtil.prepareDomResultForRpcRequest(rpcQName, counter);
-        if (MAPPED_RPCS.get(rpcQName).getInput().getChildNodes().isEmpty()) {
+        if (mappedRpc.getInput().getChildNodes().isEmpty()) {
             return new NetconfMessage(domResult.getNode().getOwnerDocument());
         }
 
@@ -70,7 +71,7 @@ public class BaseRpcSchemalessTransformer implements MessageTransformer<NetconfM
                 "Transforming an rpc with input: %s, payload has to be a container, but was: %s", rpcQName, payload);
 
         // Set the path to the input of rpc for the payload stream writer
-        final SchemaPath inputPath = rpc.createChild(QName.create(rpcQName, "input").intern());
+        final SchemaPath inputPath = rpc.createChild(YangConstants.operationInputQName(rpcQName.getModule()));
         final DOMResult result = domResult;
 
         try {
index 13331fbcadeff4ff3305f70cdc94957f570a8ede..a1641e64c0eb34ae3fe68e21e1a6d2962c0a0621 100644 (file)
@@ -7,60 +7,50 @@
  */
 package org.opendaylight.netconf.sal.connect.netconf.schema.mapping;
 
-import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import java.util.List;
+import java.util.Arrays;
 import java.util.Map;
 import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
 
-@SuppressWarnings("checkstyle:IllegalCatch")
-public enum BaseSchema {
-
+public enum BaseSchema implements SchemaContextProvider {
     BASE_NETCONF_CTX(
-            Lists.newArrayList(
-                    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf
-                            .base._1._0.rev110601.$YangModuleInfoImpl.getInstance(),
-                    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf
-                            .monitoring.extension.rev131210.$YangModuleInfoImpl.getInstance()
-            )
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601
+            .$YangModuleInfoImpl.getInstance(),
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.extension.rev131210
+            .$YangModuleInfoImpl.getInstance()
     ),
     BASE_NETCONF_CTX_WITH_NOTIFICATIONS(
-            Lists.newArrayList(
-                    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf
-                            .monitoring.extension.rev131210.$YangModuleInfoImpl.getInstance(),
-                    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf
-                            .notification._1._0.rev080714.$YangModuleInfoImpl.getInstance(),
-                    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf
-                            .base._1._0.rev110601.$YangModuleInfoImpl.getInstance(),
-                    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf
-                            .notifications.rev120206.$YangModuleInfoImpl.getInstance()
-            )
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.extension.rev131210
+            .$YangModuleInfoImpl.getInstance(),
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714
+            .$YangModuleInfoImpl.getInstance(),
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601
+            .$YangModuleInfoImpl.getInstance(),
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206
+            .$YangModuleInfoImpl.getInstance()
     );
 
     private final Map<QName, RpcDefinition> mappedRpcs;
     private final SchemaContext schemaContext;
 
-    BaseSchema(final List<YangModuleInfo> modules) {
-        try {
-            final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
-            moduleInfoBackedContext.addModuleInfos(modules);
-            schemaContext = moduleInfoBackedContext.tryToCreateSchemaContext().get();
-            mappedRpcs = Maps.uniqueIndex(schemaContext.getOperations(), RpcDefinition::getQName);
-        } catch (final RuntimeException e) {
-            throw new ExceptionInInitializerError(e);
-        }
+    BaseSchema(final YangModuleInfo... modules) {
+        final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
+        moduleInfoBackedContext.addModuleInfos(Arrays.asList(modules));
+        schemaContext = moduleInfoBackedContext.tryToCreateSchemaContext().get();
+        mappedRpcs = Maps.uniqueIndex(schemaContext.getOperations(), RpcDefinition::getQName);
     }
 
     Map<QName, RpcDefinition> getMappedRpcs() {
         return mappedRpcs;
     }
 
+    @Override
     public SchemaContext getSchemaContext() {
         return schemaContext;
     }
-
 }
index 82f54b952dc784621c1f55dce21cbfcf9bf94f0b..2523f2e40912c1f192e1463f6462ace25f9f09cf 100644 (file)
@@ -45,6 +45,7 @@ import org.opendaylight.netconf.sal.connect.util.MessageCounter;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.RpcError;
+import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -168,22 +169,24 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
     }
 
     @Override
-    public NetconfMessage toRpcRequest(SchemaPath rpc, final NormalizedNode<?, ?> payload) {
+    public NetconfMessage toRpcRequest(final SchemaPath rpc, final NormalizedNode<?, ?> payload) {
         // In case no input for rpc is defined, we can simply construct the payload here
         final QName rpcQName = rpc.getLastComponent();
-        Map<QName, RpcDefinition> currentMappedRpcs = mappedRpcs;
 
         // Determine whether a base netconf operation is being invoked
         // and also check if the device exposed model for base netconf.
         // If no, use pre built base netconf operations model
         final boolean needToUseBaseCtx = mappedRpcs.get(rpcQName) == null && isBaseOrNotificationRpc(rpcQName);
+        final Map<QName, RpcDefinition> currentMappedRpcs;
         if (needToUseBaseCtx) {
             currentMappedRpcs = baseSchema.getMappedRpcs();
+        } else {
+            currentMappedRpcs = mappedRpcs;
         }
 
-        Preconditions.checkNotNull(currentMappedRpcs.get(rpcQName),
+        final RpcDefinition mappedRpc = Preconditions.checkNotNull(currentMappedRpcs.get(rpcQName),
                 "Unknown rpc %s, available rpcs: %s", rpcQName, currentMappedRpcs.keySet());
-        if (currentMappedRpcs.get(rpcQName).getInput().getChildNodes().isEmpty()) {
+        if (mappedRpc.getInput().getChildNodes().isEmpty()) {
             return new NetconfMessage(NetconfMessageTransformUtil
                     .prepareDomResultForRpcRequest(rpcQName, counter).getNode().getOwnerDocument());
         }
@@ -193,7 +196,7 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
         Preconditions.checkArgument(payload instanceof ContainerNode,
                 "Transforming an rpc with input: %s, payload has to be a container, but was: %s", rpcQName, payload);
         // Set the path to the input of rpc for the node stream writer
-        rpc = rpc.createChild(QName.create(rpcQName, "input").intern());
+        final SchemaPath rpcInput = rpc.createChild(YangConstants.operationInputQName(rpcQName.getModule()));
         final DOMResult result = NetconfMessageTransformUtil.prepareDomResultForRpcRequest(rpcQName, counter);
 
         try {
@@ -201,9 +204,9 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
             // use default pre build context with just the base model
             // This way operations like lock/unlock are supported even if the source for base model was not provided
             SchemaContext ctx = needToUseBaseCtx ? baseSchema.getSchemaContext() : schemaContext;
-            NetconfMessageTransformUtil.writeNormalizedRpc((ContainerNode) payload, result, rpc, ctx);
+            NetconfMessageTransformUtil.writeNormalizedRpc((ContainerNode) payload, result, rpcInput, ctx);
         } catch (final XMLStreamException | IOException | IllegalStateException e) {
-            throw new IllegalStateException("Unable to serialize " + rpc, e);
+            throw new IllegalStateException("Unable to serialize " + rpcInput, e);
         }
 
         final Document node = result.getNode().getOwnerDocument();