Remove SchemaNode#getPath usage from JsonNormalizedNodeBodyReader 55/99555/19
authorOleksandrZharov <Oleksandr.Zharov@pantheon.tech>
Wed, 2 Feb 2022 11:48:47 +0000 (12:48 +0100)
committerTomas Cere <tomas.cere@pantheon.tech>
Thu, 17 Feb 2022 10:56:15 +0000 (10:56 +0000)
Removed deprecated SchemaNode#getPath from JsonNormalizedNodeBodyReader
class by using getNodeType and methods of SchemaInferenceStack.

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

index a7ae431b295e2f36df51d949211f75bca753d6ea..42ba25540d19484c4b26281d9941ea66dcbfe96f 100644 (file)
@@ -46,9 +46,9 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
 import org.opendaylight.yangtools.yang.data.impl.schema.ResultAlreadySetException;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -110,21 +110,24 @@ public class JsonNormalizedNodeBodyReader
         final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
 
-        final SchemaInferenceStack parentSchema;
-        if (isPost) {
-            // FIXME: We need dispatch for RPC.
-            parentSchema = SchemaInferenceStack.ofSchemaPath(path.getSchemaContext(), path.getSchemaNode().getPath());
-        } else if (path.getSchemaNode() instanceof SchemaContext
-                || SchemaPath.ROOT.equals(path.getSchemaNode().getPath().getParent())) {
-            parentSchema = SchemaInferenceStack.of(path.getSchemaContext());
+        final SchemaInferenceStack stack;
+        if (path.getSchemaNode() instanceof RpcEffectiveStatement) {
+            stack = SchemaInferenceStack.of(path.getSchemaContext(), Absolute.of(path.getSchemaNode().getQName()));
         } else {
-            parentSchema = SchemaInferenceStack.ofSchemaPath(path.getSchemaContext(),
-                path.getSchemaNode().getPath().getParent());
+            stack = SchemaInferenceStack.of(path.getSchemaContext());
+            path.getInstanceIdentifier().getPathArguments().stream()
+                    .filter(arg -> !(arg instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates))
+                    .filter(arg -> !(arg instanceof YangInstanceIdentifier.AugmentationIdentifier))
+                    .forEach(p -> stack.enterSchemaTree(p.getNodeType()));
+        }
+
+        if (!isPost) {
+            stack.exit();
         }
 
         final JsonParserStream jsonParser = JsonParserStream.create(writer,
             JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(path.getSchemaContext()),
-            parentSchema.toInference());
+            stack.toInference());
         final JsonReader reader = new JsonReader(new InputStreamReader(nonEmptyInputStreamOptional.get(),
                 StandardCharsets.UTF_8));
         jsonParser.parse(reader);