Revert "Eliminate use of SchemaNode.getPath() in YII deserializer" 76/100176/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Mar 2022 09:16:21 +0000 (10:16 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Mar 2022 09:16:26 +0000 (10:16 +0100)
This reverts commit d8990ef41881d91b816e9a7ed430a3e18bf250e0. The
assumptsions being made are just not correct.

Change-Id: I77d609579882c6fea208cae4fb7fd964cffb18ae
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java

index de0755e827691c95650fb77f105970c2c423e5f3..743945ad7bce5439326b081791c82627a3090d87 100644 (file)
@@ -45,7 +45,6 @@ import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
@@ -114,10 +113,9 @@ public final class YangInstanceIdentifierDeserializer {
             if (step instanceof ListInstance) {
                 final var values = ((ListInstance) step).keyValues();
                 final var schema = childNode.getDataSchemaNode();
-                final var absolute = Absolute.of(parentNode.getIdentifier().getNodeType(), qname);
                 pathArg = schema instanceof ListSchemaNode
-                    ? prepareNodeWithPredicates(qname, (ListSchemaNode) schema, absolute, values)
-                        : prepareNodeWithValue(qname, schema, absolute, values);
+                    ? prepareNodeWithPredicates(qname, (ListSchemaNode) schema, values)
+                        : prepareNodeWithValue(qname, schema, values);
             } else if (childNode != null) {
                 RestconfDocumentedException.throwIf(childNode.isKeyedEntry(),
                     ErrorType.PROTOCOL, ErrorTag.MISSING_ATTRIBUTE,
@@ -137,7 +135,7 @@ public final class YangInstanceIdentifierDeserializer {
     }
 
     private NodeIdentifierWithPredicates prepareNodeWithPredicates(final QName qname,
-            final @NonNull ListSchemaNode schema, final Absolute absolute, final List<@NonNull String> keyValues) {
+            final @NonNull ListSchemaNode schema, final List<@NonNull String> keyValues) {
         final var keyDef = schema.getKeyDefinition();
         final var keySize = keyDef.size();
         final var varSize = keyValues.size();
@@ -150,17 +148,14 @@ public final class YangInstanceIdentifierDeserializer {
         final var values = ImmutableMap.<QName, Object>builderWithExpectedSize(keySize);
         for (int i = 0; i < keySize; ++i) {
             final QName keyName = keyDef.get(i);
-            final List<QName> qNames = new ArrayList<>(absolute.getNodeIdentifiers());
-            qNames.add(keyName);
-            final Absolute path = Absolute.of(qNames);
-            values.put(keyName, prepareValueByType(schema.getDataChildByName(keyName), path, keyValues.get(i)));
+            values.put(keyName, prepareValueByType(schema.getDataChildByName(keyName), keyValues.get(i)));
         }
 
         return NodeIdentifierWithPredicates.of(qname, values.build());
     }
 
-    private Object prepareValueByType(final DataSchemaNode schemaNode, final Absolute absolute,
-            final @NonNull String value) {
+    private Object prepareValueByType(final DataSchemaNode schemaNode, final @NonNull String value) {
+
         TypeDefinition<? extends TypeDefinition<?>> typedef;
         if (schemaNode instanceof LeafListSchemaNode) {
             typedef = ((LeafListSchemaNode) schemaNode).getType();
@@ -169,7 +164,8 @@ public final class YangInstanceIdentifierDeserializer {
         }
         final TypeDefinition<?> baseType = RestUtil.resolveBaseTypeFrom(typedef);
         if (baseType instanceof LeafrefTypeDefinition) {
-            typedef = SchemaInferenceStack.of(schemaContext, absolute).resolveLeafref((LeafrefTypeDefinition) baseType);
+            typedef = SchemaInferenceStack.ofInstantiatedPath(schemaContext, schemaNode.getPath())
+                .resolveLeafref((LeafrefTypeDefinition) baseType);
         }
 
         if (typedef instanceof IdentityrefTypeDefinition) {
@@ -184,9 +180,9 @@ public final class YangInstanceIdentifierDeserializer {
     }
 
     private NodeWithValue<?> prepareNodeWithValue(final QName qname, final DataSchemaNode schema,
-            final Absolute absolute, final List<String> keyValues) {
+            final List<String> keyValues) {
         // TODO: qname should be always equal to schema.getQName(), right?
-        return new NodeWithValue<>(qname, prepareValueByType(schema, absolute,
+        return new NodeWithValue<>(qname, prepareValueByType(schema,
             // FIXME: ahem: we probably want to do something differently here
             keyValues.get(0)));
     }