Remove SchemaNode#getPath usage from XmlToPatchBodyReader 17/99717/6
authorOleksandrZharov <Oleksandr.Zharov@pantheon.tech>
Mon, 14 Feb 2022 11:20:45 +0000 (12:20 +0100)
committerTomas Cere <tomas.cere@pantheon.tech>
Fri, 4 Mar 2022 10:18:07 +0000 (10:18 +0000)
Removed deprecated SchemaNode#getPath from XmlToPatchBodyReader class
by using YangInstanceIdentifier and QNames that it contain to create
SchemaInferenceStack based on it.

JIRA: NETCONF-818
Change-Id: I03226866ac910d21b96982963f4671392af7cf8d
Signed-off-by: OleksandrZharov <Oleksandr.Zharov@pantheon.tech>
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlToPatchBodyReader.java

index 3e6ea0520e1c0e0a9dce0046fc2930e091e9d68b..af353d67a4ff837aaa46902824b03c6359909f3f 100644 (file)
@@ -62,6 +62,7 @@ import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -153,9 +154,11 @@ public class XmlToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider i
             // target can be also empty (only slash)
             YangInstanceIdentifier targetII;
             final SchemaNode targetNode;
+            final Inference inference;
             if (target.equals("/")) {
                 targetII = pathContext.getInstanceIdentifier();
                 targetNode = pathContext.getSchemaContext();
+                inference = Inference.ofDataTreePath(pathContext.getSchemaContext(), schemaNode.getQName());
             } else {
                 targetII = codec.deserialize(codec.serialize(pathContext.getInstanceIdentifier())
                         .concat(prepareNonCondXpath(schemaNode, target.replaceFirst("/", ""), firstValueElement,
@@ -165,10 +168,15 @@ public class XmlToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider i
                 schemaNode = verifyNotNull(codec.getDataContextTree().findChild(targetII).orElseThrow()
                     .getDataSchemaNode());
 
-                final EffectiveStatement<?, ?> parentStmt = SchemaInferenceStack.ofInstantiatedPath(
-                    pathContext.getSchemaContext(), schemaNode.getPath().getParent()).currentStatement();
+                final SchemaInferenceStack stack = SchemaInferenceStack.of(pathContext.getSchemaContext());
+                targetII.getPathArguments().stream()
+                        .filter(arg -> !(arg instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates))
+                        .filter(arg -> !(arg instanceof YangInstanceIdentifier.AugmentationIdentifier))
+                        .forEach(p -> stack.enterSchemaTree(p.getNodeType()));
+                final EffectiveStatement<?, ?> parentStmt = stack.exit();
                 verify(parentStmt instanceof SchemaNode, "Unexpected parent %s", parentStmt);
                 targetNode = (SchemaNode) parentStmt;
+                inference = stack.toInference();
             }
 
             if (targetNode == null) {
@@ -182,9 +190,7 @@ public class XmlToPatchBodyReader extends AbstractIdentifierAwareJaxRsProvider i
                 if (schemaNode instanceof  ContainerSchemaNode || schemaNode instanceof ListSchemaNode) {
                     final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
                     final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
-                    final XmlParserStream xmlParser = XmlParserStream.create(writer,
-                        SchemaInferenceStack.ofInstantiatedPath(pathContext.getSchemaContext(), schemaNode.getPath())
-                            .toInference());
+                    final XmlParserStream xmlParser = XmlParserStream.create(writer, inference);
                     xmlParser.traverse(new DOMSource(firstValueElement));
                     parsed = resultHolder.getResult();
                 } else {