Revert "Remove SchemaNode#getPath from XML writer in rfc8040" 65/100165/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Mar 2022 07:51:36 +0000 (08:51 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Mar 2022 07:58:36 +0000 (08:58 +0100)
This reverts commit d21d2fe3c6e1784e6ec407b86c6eac75ba3bba66. The
proposed transformation is not valid.

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

index b2dbc1f8112091707410f7972afa21f9823b1fd9..81a1c17b26bce444568d25e7bb7aee6fe8a4727d 100644 (file)
@@ -15,7 +15,6 @@ import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.stream.Collectors;
 import javanet.staxutils.IndentingXMLStreamWriter;
 import javax.ws.rs.Produces;
 import javax.ws.rs.WebApplicationException;
@@ -33,8 +32,6 @@ import org.opendaylight.restconf.nb.rfc8040.MediaTypes;
 import org.opendaylight.restconf.nb.rfc8040.jersey.providers.api.RestconfNormalizedNodeWriter;
 import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -44,7 +41,6 @@ import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 
 @Provider
 @Produces({ MediaTypes.APPLICATION_YANG_DATA_XML, MediaType.APPLICATION_XML, MediaType.TEXT_XML })
@@ -86,12 +82,13 @@ public class XmlNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWrite
             throw new IllegalStateException(e);
         }
         final NormalizedNode data = context.getData();
+        final SchemaPath schemaPath = pathContext.getSchemaNode().getPath();
 
-        writeNormalizedNode(xmlWriter, pathContext, data, context.getWriterParameters().depth(),
+        writeNormalizedNode(xmlWriter, schemaPath, pathContext, data, context.getWriterParameters().depth(),
                 context.getWriterParameters().fields());
     }
 
-    private static void writeNormalizedNode(final XMLStreamWriter xmlWriter,
+    private static void writeNormalizedNode(final XMLStreamWriter xmlWriter, final SchemaPath path,
             final InstanceIdentifierContext<?> pathContext, final NormalizedNode data, final DepthParam depth,
             final List<Set<QName>> fields) throws IOException {
         final RestconfNormalizedNodeWriter nnWriter;
@@ -102,37 +99,26 @@ public class XmlNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWrite
              *  RpcDefinition is not supported as initial codec in XMLStreamWriter,
              *  so we need to emit initial output declaration..
              */
-            final RpcDefinition rpc = (RpcDefinition) pathContext.getSchemaNode();
-            final SchemaPath rpcPath = SchemaPath.of(Absolute.of(rpc.getQName(), rpc.getOutput().getQName()));
-            nnWriter = createNormalizedNodeWriter(xmlWriter, schemaCtx, rpcPath, depth, fields);
+            nnWriter = createNormalizedNodeWriter(
+                    xmlWriter,
+                    schemaCtx,
+                    ((RpcDefinition) pathContext.getSchemaNode()).getOutput().getPath(),
+                    depth,
+                    fields);
             writeElements(xmlWriter, nnWriter, (ContainerNode) data);
         } else if (pathContext.getSchemaNode() instanceof ActionDefinition) {
             /*
              *  ActionDefinition is not supported as initial codec in XMLStreamWriter,
              *  so we need to emit initial output declaration..
              */
-            final ActionDefinition actDef = (ActionDefinition) pathContext.getSchemaNode();
-            final List<QName> qNames = pathContext.getInstanceIdentifier().getPathArguments().stream()
-                    .filter(arg -> !(arg instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates))
-                    .filter(arg -> !(arg instanceof YangInstanceIdentifier.AugmentationIdentifier))
-                    .map(PathArgument::getNodeType)
-                    .collect(Collectors.toList());
-            qNames.add(actDef.getQName());
-            qNames.add(actDef.getOutput().getQName());
-            final SchemaPath actPath = SchemaPath.of(Absolute.of(qNames));
-            nnWriter = createNormalizedNodeWriter(xmlWriter, schemaCtx, actPath, depth, fields);
+            nnWriter = createNormalizedNodeWriter(xmlWriter, schemaCtx,
+                ((ActionDefinition) pathContext.getSchemaNode()).getOutput().getPath(), depth, fields);
             writeElements(xmlWriter, nnWriter, (ContainerNode) data);
         } else {
-            final boolean isRoot = pathContext.getInstanceIdentifier().isEmpty();
+            final boolean isRoot = SchemaPath.ROOT.equals(path);
             if (isRoot) {
-                nnWriter = createNormalizedNodeWriter(xmlWriter, schemaCtx, SchemaPath.ROOT, depth, fields);
+                nnWriter = createNormalizedNodeWriter(xmlWriter, schemaCtx, path, depth, fields);
             } else {
-                final List<QName> qNames = pathContext.getInstanceIdentifier().getPathArguments().stream()
-                        .filter(arg -> !(arg instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates))
-                        .filter(arg -> !(arg instanceof YangInstanceIdentifier.AugmentationIdentifier))
-                        .map(PathArgument::getNodeType)
-                        .collect(Collectors.toList());
-                final SchemaPath path = SchemaPath.of(Absolute.of(qNames));
                 nnWriter = createNormalizedNodeWriter(xmlWriter, schemaCtx, path.getParent(), depth, fields);
             }