Revert "Eliminate use of SchemaNode.getPath() in XML reader" 77/100177/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Mar 2022 09:16:35 +0000 (10:16 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Mar 2022 09:16:41 +0000 (10:16 +0100)
This reverts commit 2ae92283fd3541479e454b73e64767813e2dbf5b. The
assumptsions being made are just not correct.

Change-Id: Icd5bd52fecd9321ff6ac50865620cc0eee44333a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyReader.java

index 0b9695069e008fb3ea86be5fe523f0a6a0145165..b26bbd47dc4ed4d8dcb5d7dc0f42072e5e9d7681 100644 (file)
@@ -35,9 +35,6 @@ import org.opendaylight.yangtools.yang.common.ErrorTag;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
@@ -106,17 +103,10 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade
 
         final String docRootElm = doc.getDocumentElement().getLocalName();
         final String docRootNamespace = doc.getDocumentElement().getNamespaceURI();
-        final List<PathArgument> iiToDataList = new ArrayList<>();
-
-        final SchemaInferenceStack stack = SchemaInferenceStack.of(pathContext.getSchemaContext());
-        pathContext.getInstanceIdentifier().getPathArguments().stream()
-                .filter(arg -> !(arg instanceof NodeIdentifierWithPredicates))
-                .filter(arg -> !(arg instanceof AugmentationIdentifier))
-                .forEach(p -> stack.enterSchemaTree(p.getNodeType()));
+        final List<YangInstanceIdentifier.PathArgument> iiToDataList = new ArrayList<>();
 
         if (isPost() && !isOperation) {
-            final Deque<Object> foundSchemaNodes = findPathToSchemaNodeByName(schemaNode, docRootElm,
-                    docRootNamespace, stack);
+            final Deque<Object> foundSchemaNodes = findPathToSchemaNodeByName(schemaNode, docRootElm, docRootNamespace);
             if (foundSchemaNodes.isEmpty()) {
                 throw new IllegalStateException(String.format("Child \"%s\" was not found in parent schema node \"%s\"",
                         docRootElm, schemaNode.getQName()));
@@ -145,10 +135,8 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade
 
         if (schemaNode instanceof ContainerLike || schemaNode instanceof ListSchemaNode
                 || schemaNode instanceof LeafSchemaNode) {
-            if (isOperation) {
-                stack.enterSchemaTree(schemaNode.getQName());
-            }
-            final XmlParserStream xmlParser = XmlParserStream.create(writer, stack.toInference());
+            final XmlParserStream xmlParser = XmlParserStream.create(writer, SchemaInferenceStack.ofInstantiatedPath(
+                pathContext.getSchemaContext(), schemaNode.getPath()).toInference());
             xmlParser.traverse(new DOMSource(doc.getDocumentElement()));
             parsed = resultHolder.getResult();
 
@@ -181,7 +169,7 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade
     }
 
     private static Deque<Object> findPathToSchemaNodeByName(final DataSchemaNode schemaNode, final String elementName,
-            final String namespace, final SchemaInferenceStack stack) {
+                                                            final String namespace) {
         final Deque<Object> result = new ArrayDeque<>();
         final ArrayList<ChoiceSchemaNode> choiceSchemaNodes = new ArrayList<>();
         for (final DataSchemaNode child : ((DataNodeContainer) schemaNode).getChildNodes()) {
@@ -191,7 +179,6 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade
                     && child.getQName().getNamespace().toString().equalsIgnoreCase(namespace)) {
                 // add child to result
                 result.push(child);
-                stack.enterSchemaTree(child.getQName());
 
                 // find augmentation
                 if (child.isAugmenting()) {
@@ -207,11 +194,8 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade
         }
 
         for (final ChoiceSchemaNode choiceNode : choiceSchemaNodes) {
-            stack.enterChoice(choiceNode.getQName());
             for (final CaseSchemaNode caseNode : choiceNode.getCases()) {
-                stack.enterSchemaTree(caseNode.getQName());
-                final Deque<Object> resultFromRecursion = findPathToSchemaNodeByName(caseNode, elementName,
-                        namespace, stack);
+                final Deque<Object> resultFromRecursion = findPathToSchemaNodeByName(caseNode, elementName, namespace);
                 if (!resultFromRecursion.isEmpty()) {
                     resultFromRecursion.push(choiceNode);
                     if (choiceNode.isAugmenting()) {
@@ -222,9 +206,7 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade
                     }
                     return resultFromRecursion;
                 }
-                stack.exit();
             }
-            stack.exit();
         }
         return result;
     }