Disconnect WriterFieldsTranslator from InstanceIdentifierContext 69/109069/3
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 26 Nov 2023 15:10:54 +0000 (16:10 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 26 Nov 2023 21:10:09 +0000 (22:10 +0100)
We only need an EffectiveModelContext and target node. Communicate them
explicitly.

JIRA: NETCONF-1157
Change-Id: I5ac371b0086b19bcee06b0bfc5f9857267fb599a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/databind/jaxrs/QueryParams.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/NetconfFieldsTranslator.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/WriterFieldsTranslator.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/mdsal/MdsalRestconfServer.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/databind/jaxrs/QueryParamsTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/AbstractFieldsTranslatorTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/NetconfFieldsTranslatorTest.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/WriterFieldsTranslatorTest.java

index eb840e58783a515b1ab1e5b3e9dd92bf47eaa046..dedb5ab202de59000df672739d4c5905b4aa2ff5 100644 (file)
@@ -35,10 +35,6 @@ import org.opendaylight.restconf.api.query.WithDefaultsParam;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError;
 import org.opendaylight.restconf.nb.rfc8040.ReadDataParams;
-import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
-import org.opendaylight.restconf.nb.rfc8040.legacy.QueryParameters;
-import org.opendaylight.restconf.nb.rfc8040.utils.parser.NetconfFieldsTranslator;
-import org.opendaylight.restconf.nb.rfc8040.utils.parser.WriterFieldsTranslator;
 import org.opendaylight.yangtools.yang.common.ErrorTag;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 
@@ -87,18 +83,6 @@ public final class QueryParams {
         return builder.build();
     }
 
-    public static QueryParameters newQueryParameters(final ReadDataParams params,
-            final InstanceIdentifierContext identifier) {
-        final var fields = params.fields();
-        if (fields == null) {
-            return QueryParameters.of(params);
-        }
-
-        return identifier.getMountPoint() != null
-            ? QueryParameters.ofFieldPaths(params, NetconfFieldsTranslator.translate(identifier, fields))
-                : QueryParameters.ofFields(params, WriterFieldsTranslator.translate(identifier, fields));
-    }
-
     /**
      * Parse parameters from URI request and check their types and values.
      *
index c03da36ce2efd76ed6ab4c586ff0b70852459303..8814589c1dc4b1d6a5eb59a541acbea8460ab190 100644 (file)
@@ -21,7 +21,6 @@ import org.opendaylight.netconf.dom.api.NetconfDataTreeService;
 import org.opendaylight.restconf.api.query.FieldsParam;
 import org.opendaylight.restconf.api.query.FieldsParam.NodeSelector;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
-import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
 import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.ErrorTag;
 import org.opendaylight.yangtools.yang.common.ErrorType;
@@ -87,29 +86,32 @@ public final class NetconfFieldsTranslator {
      * Translate a {@link FieldsParam} to a list of child node paths saved in lists, suitable for use with
      * {@link NetconfDataTreeService}.
      *
-     * @param identifier identifier context created from request URI
+     * @param modelContext EffectiveModelContext
+     * @param schemaNode Root DataSchemaNode
      * @param input input value of fields parameter
      * @return {@link List} of {@link YangInstanceIdentifier} that are relative to the last {@link PathArgument}
-     *     of provided {@code identifier}
+     *         of provided {@code identifier}
      */
     public static @NonNull List<YangInstanceIdentifier> translate(
-            final @NonNull InstanceIdentifierContext identifier, final @NonNull FieldsParam input) {
-        final var parsed = parseFields(identifier, input);
-        return parsed.stream().map(NetconfFieldsTranslator::buildPath).toList();
+            final @NonNull EffectiveModelContext modelContext, final @NonNull DataSchemaNode schemaNode,
+            final @NonNull FieldsParam input) {
+        return parseFields(modelContext, schemaNode, input).stream()
+            .map(NetconfFieldsTranslator::buildPath)
+            .toList();
     }
 
-    private static @NonNull Set<LinkedPathElement> parseFields(final @NonNull InstanceIdentifierContext identifier,
-            final @NonNull FieldsParam input) {
+    private static @NonNull Set<LinkedPathElement> parseFields(final @NonNull EffectiveModelContext modelContext,
+            final @NonNull DataSchemaNode schemaNode, final @NonNull FieldsParam input) {
         final DataSchemaContext startNode;
         try {
-            startNode = DataSchemaContext.of((DataSchemaNode) identifier.getSchemaNode());
+            startNode = DataSchemaContext.of(schemaNode);
         } catch (IllegalStateException e) {
             throw new RestconfDocumentedException(
                 "Start node missing in " + input, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE, e);
         }
 
         final var parsed = new HashSet<LinkedPathElement>();
-        processSelectors(parsed, identifier.getSchemaContext(), identifier.getSchemaNode().getQName().getModule(),
+        processSelectors(parsed, modelContext, schemaNode.getQName().getModule(),
             new LinkedPathElement(null, List.of(), startNode), input.nodeSelectors());
 
         return parsed;
index 6be73dfc91df53389f7f1b478c40baaea743fcb2..c7b68093f1e01c35d7208300279b7b9a339fb976 100644 (file)
@@ -18,7 +18,6 @@ import org.opendaylight.restconf.api.query.FieldsParam;
 import org.opendaylight.restconf.api.query.FieldsParam.NodeSelector;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.nb.rfc8040.jersey.providers.ParameterAwareNormalizedNodeWriter;
-import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
 import org.opendaylight.yangtools.yang.common.ErrorTag;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -48,21 +47,20 @@ public final class WriterFieldsTranslator {
      * Translate a {@link FieldsParam} to a complete list of child nodes organized into levels, suitable for use with
      * {@link ParameterAwareNormalizedNodeWriter}.
      *
-     * @param identifier identifier context created from request URI
+     * @param modelContext EffectiveModelContext
+     * @param schemaNode Root DataSchemaNode
      * @param input input value of fields parameter
      * @return {@link List} of levels; each level contains set of {@link QName}
      */
-    public static @NonNull List<Set<QName>> translate(final @NonNull InstanceIdentifierContext identifier,
-            final @NonNull FieldsParam input) {
-        final DataSchemaContext startNode = DataSchemaContext.of((DataSchemaNode) identifier.getSchemaNode());
-        if (startNode == null) {
+    public static @NonNull List<Set<QName>> translate(final @NonNull EffectiveModelContext modelContext,
+            final DataSchemaNode schemaNode, final @NonNull FieldsParam input) {
+        if (schemaNode == null) {
             throw new RestconfDocumentedException(
                     "Start node missing in " + input, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE);
         }
-
         final var parsed = new ArrayList<Set<QName>>();
-        processSelectors(parsed, identifier.getSchemaContext(), identifier.getSchemaNode().getQName().getModule(),
-            startNode, input.nodeSelectors(), 0);
+        processSelectors(parsed, modelContext, schemaNode.getQName().getModule(), DataSchemaContext.of(schemaNode),
+            input.nodeSelectors(), 0);
         return parsed;
     }
 
@@ -201,4 +199,4 @@ public final class WriterFieldsTranslator {
 
         return currentNode;
     }
-}
\ No newline at end of file
+}
index 100df953e1fa485f6756371b6048d9fb045b7014..d93e0acdc0ac6a720a2a535574cf6336a33d3da3 100644 (file)
@@ -61,11 +61,13 @@ import org.opendaylight.restconf.nb.rfc8040.databind.DatabindContext;
 import org.opendaylight.restconf.nb.rfc8040.databind.OperationInputBody;
 import org.opendaylight.restconf.nb.rfc8040.databind.PatchBody;
 import org.opendaylight.restconf.nb.rfc8040.databind.ResourceBody;
-import org.opendaylight.restconf.nb.rfc8040.databind.jaxrs.QueryParams;
 import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
 import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
+import org.opendaylight.restconf.nb.rfc8040.legacy.QueryParameters;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.MdsalRestconfStrategy;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfStrategy;
+import org.opendaylight.restconf.nb.rfc8040.utils.parser.NetconfFieldsTranslator;
+import org.opendaylight.restconf.nb.rfc8040.utils.parser.WriterFieldsTranslator;
 import org.opendaylight.restconf.server.api.DataPostResult;
 import org.opendaylight.restconf.server.api.DataPostResult.CreateResource;
 import org.opendaylight.restconf.server.api.DataPostResult.InvokeOperation;
@@ -94,6 +96,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
@@ -186,7 +189,22 @@ public final class MdsalRestconfServer implements RestconfServer {
 
     private @NonNull RestconfFuture<NormalizedNodePayload> readData(final InstanceIdentifierContext reqPath,
             final ReadDataParams readParams) {
-        final var queryParams = QueryParams.newQueryParameters(readParams, reqPath);
+        final var fields = readParams.fields();
+        final QueryParameters queryParams;
+        if (fields != null) {
+            final var modelContext = reqPath.getSchemaContext();
+            final var schemaNode = (DataSchemaNode) reqPath.getSchemaNode();
+            if (reqPath.getMountPoint() != null) {
+                queryParams = QueryParameters.ofFieldPaths(readParams, NetconfFieldsTranslator.translate(modelContext,
+                    schemaNode, fields));
+            } else {
+                queryParams = QueryParameters.ofFields(readParams, WriterFieldsTranslator.translate(modelContext,
+                    schemaNode, fields));
+            }
+        } else {
+            queryParams = QueryParameters.of(readParams);
+        }
+
         final var fieldPaths = queryParams.fieldPaths();
         final var strategy = getRestconfStrategy(reqPath.getSchemaContext(), reqPath.getMountPoint());
         final NormalizedNode node;
index c53a127f80cd0acb716a6a7e99c39d35848bec6e..fc344521f0fedb6b428c5bc0876757e3a45de5c5 100644 (file)
@@ -36,10 +36,12 @@ import org.opendaylight.restconf.nb.rfc8040.Insert;
 import org.opendaylight.restconf.nb.rfc8040.ReceiveEventsParams;
 import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
 import org.opendaylight.restconf.nb.rfc8040.legacy.QueryParameters;
+import org.opendaylight.restconf.nb.rfc8040.utils.parser.WriterFieldsTranslator;
 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.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
@@ -155,12 +157,13 @@ public class QueryParamsTest {
         assertEquals(ContentParam.CONFIG, params.content());
 
         // depth
-        final DepthParam depth = params.depth();
+        final var depth = params.depth();
         assertNotNull(depth);
         assertEquals(10, depth.value());
 
         // fields
-        assertNotNull(params.fields());
+        final var paramsFields = params.fields();
+        assertNotNull(paramsFields);
 
         // fields for write filtering
         final var containerSchema = mock(ContainerSchemaNode.class,
@@ -178,10 +181,11 @@ public class QueryParamsTest {
 
         final var stack = SchemaInferenceStack.of(context);
         stack.enterSchemaTree(containerQName);
+        final var iid = InstanceIdentifierContext.ofStack(stack);
 
-        final QueryParameters queryParameters = QueryParams.newQueryParameters(params,
-            InstanceIdentifierContext.ofStack(stack));
-        final List<Set<QName>> fields = queryParameters.fields();
+        final var queryParameters = QueryParameters.ofFields(params, WriterFieldsTranslator.translate(
+            iid.getSchemaContext(), (DataSchemaNode) iid.getSchemaNode(), paramsFields));
+        final var fields = queryParameters.fields();
         assertNotNull(fields);
         assertEquals(1, fields.size());
         assertEquals(Set.of(containerChild), fields.get(0));
index 2022ecdf5c5e354221313230bc8feed0aa444bc5..64648b14eff6a5499f91690256875c539a287395 100644 (file)
@@ -7,9 +7,10 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.utils.parser;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.text.ParseException;
 import java.util.List;
@@ -26,6 +27,8 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
@@ -37,10 +40,14 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
     private static final QNameModule Q_NAME_MODULE_FOO = QNameModule.create(
         XMLNamespace.of("urn:foo"), Revision.of("2023-03-27"));
 
-    private InstanceIdentifierContext identifierJukebox;
-    private InstanceIdentifierContext identifierTestServices;
-    private InstanceIdentifierContext identifierFoo;
+    private static final EffectiveModelContext TEST_SERVICES_SCHEMA =
+        YangParserTestUtils.parseYangResourceDirectory("/test-services");
+    private static final EffectiveModelContext FOO_SCHEMA =
+        YangParserTestUtils.parseYangResourceDirectory("/same-qname-nodes");
 
+    private DataSchemaNode jukeboxSchemaNode;
+    private DataSchemaNode testServices;
+    private DataSchemaNode foo;
 
     // container augmented library
     protected static final QName AUGMENTED_LIBRARY_Q_NAME = QName.create(Q_NAME_MODULE_AUGMENTED_JUKEBOX,
@@ -102,25 +109,23 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
 
     @Before
     public void setUp() {
-        identifierJukebox = InstanceIdentifierContext.ofStack(
-            SchemaInferenceStack.ofDataTreePath(JUKEBOX_SCHEMA, JUKEBOX_QNAME));
-
-        identifierTestServices = InstanceIdentifierContext.ofStack(
-            SchemaInferenceStack.ofDataTreePath(YangParserTestUtils.parseYangResourceDirectory("/test-services"),
-                TEST_DATA_Q_NAME));
-
-        identifierFoo = InstanceIdentifierContext.ofStack(SchemaInferenceStack.ofDataTreePath(
-            YangParserTestUtils.parseYangResourceDirectory("/same-qname-nodes"), FOO_Q_NAME));
+        jukeboxSchemaNode = assertInstanceOf(DataSchemaNode.class, InstanceIdentifierContext.ofStack(
+            SchemaInferenceStack.ofDataTreePath(JUKEBOX_SCHEMA, JUKEBOX_QNAME)).getSchemaNode());
+        testServices = assertInstanceOf(DataSchemaNode.class, InstanceIdentifierContext.ofStack(
+            SchemaInferenceStack.ofDataTreePath(TEST_SERVICES_SCHEMA, TEST_DATA_Q_NAME)).getSchemaNode());
+        foo = assertInstanceOf(DataSchemaNode.class, InstanceIdentifierContext.ofStack(
+            SchemaInferenceStack.ofDataTreePath(FOO_SCHEMA, FOO_Q_NAME)).getSchemaNode());
     }
 
-    protected abstract List<T> translateFields(InstanceIdentifierContext context, FieldsParam fields);
+    protected abstract List<T> translateFields(@NonNull EffectiveModelContext modelContext,
+        @NonNull DataSchemaNode schemaNode, @NonNull FieldsParam fields);
 
     /**
      * Test parse fields parameter containing only one child selected.
      */
     @Test
     public void testSimplePath() {
-        final var result = translateFields(identifierJukebox, assertFields("library"));
+        final var result = translateFields(JUKEBOX_SCHEMA, jukeboxSchemaNode, assertFields("library"));
         assertNotNull(result);
         assertSimplePath(result);
     }
@@ -132,7 +137,7 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
      */
     @Test
     public void testDoublePath() {
-        final var result = translateFields(identifierJukebox, assertFields("library;player"));
+        final var result = translateFields(JUKEBOX_SCHEMA, jukeboxSchemaNode, assertFields("library;player"));
         assertNotNull(result);
         assertDoublePath(result);
     }
@@ -144,7 +149,8 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
      */
     @Test
     public void testSubPath() {
-        final var result = translateFields(identifierJukebox, assertFields("library/artist/album/name"));
+        final var result = translateFields(JUKEBOX_SCHEMA, jukeboxSchemaNode,
+            assertFields("library/artist/album/name"));
         assertNotNull(result);
         assertSubPath(result);
     }
@@ -156,7 +162,8 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
      */
     @Test
     public void testChildrenPath() {
-        final var result = translateFields(identifierJukebox, assertFields("library(artist(album(name)))"));
+        final var result = translateFields(JUKEBOX_SCHEMA, jukeboxSchemaNode,
+            assertFields("library(artist(album(name)))"));
         assertNotNull(result);
         assertChildrenPath(result);
     }
@@ -168,7 +175,8 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
      */
     @Test
     public void testNamespace() {
-        final var result = translateFields(identifierJukebox, assertFields("augmented-jukebox:augmented-library"));
+        final var result = translateFields(JUKEBOX_SCHEMA, jukeboxSchemaNode,
+            assertFields("augmented-jukebox:augmented-library"));
         assertNotNull(result);
         assertNamespace(result);
     }
@@ -181,7 +189,7 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
      */
     @Test
     public void testMultipleChildren1() {
-        final var result = translateFields(identifierTestServices,
+        final var result = translateFields(TEST_SERVICES_SCHEMA, testServices,
             assertFields("services(type-of-service;instance/instance-name;instance/provider)"));
         assertNotNull(result);
         assertMultipleChildren1(result);
@@ -195,7 +203,7 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
      */
     @Test
     public void testMultipleChildren2() {
-        final var result = translateFields(identifierTestServices,
+        final var result = translateFields(TEST_SERVICES_SCHEMA, testServices,
             assertFields("services(type-of-service;instance(instance-name;provider))"));
         assertNotNull(result);
         assertMultipleChildren2(result);
@@ -209,7 +217,7 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
      */
     @Test
     public void testMultipleChildren3() {
-        final var result = translateFields(identifierTestServices,
+        final var result = translateFields(TEST_SERVICES_SCHEMA, testServices,
             assertFields("services(instance/instance-name;type-of-service;next-data/next-service)"));
         assertNotNull(result);
         assertMultipleChildren3(result);
@@ -219,7 +227,7 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
 
     @Test
     public void testMultipleChildren4() {
-        final var result = translateFields(identifierTestServices,
+        final var result = translateFields(TEST_SERVICES_SCHEMA, testServices,
                 assertFields("services(type-of-service;instance(instance-name;provider);next-data(next-service))"));
         assertNotNull(result);
         assertMultipleChildren4(result);
@@ -229,7 +237,7 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
 
     @Test
     public void testMultipleChildren5() {
-        final var result = translateFields(identifierTestServices,
+        final var result = translateFields(TEST_SERVICES_SCHEMA, testServices,
                 assertFields("services(type-of-service;instance(instance-name;provider);next-data/next-service)"));
         assertNotNull(result);
         assertMultipleChildren5(result);
@@ -239,7 +247,8 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
 
     @Test
     public void testAugmentedChild() {
-        final var result = translateFields(identifierJukebox, assertFields("player/augmented-jukebox:speed"));
+        final var result = translateFields(JUKEBOX_SCHEMA, jukeboxSchemaNode,
+            assertFields("player/augmented-jukebox:speed"));
         assertNotNull(result);
         assertAugmentedChild(result);
     }
@@ -248,7 +257,7 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
 
     @Test
     public void testListFieldUnderList() {
-        final var result = translateFields(identifierTestServices, assertFields("services/instance"));
+        final var result = translateFields(TEST_SERVICES_SCHEMA, testServices, assertFields("services/instance"));
         assertNotNull(result);
         assertListFieldUnderList(result);
     }
@@ -257,14 +266,14 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
 
     @Test
     public void testLeafList() {
-        final var result = translateFields(identifierTestServices, assertFields("protocols"));
+        final var result = translateFields(TEST_SERVICES_SCHEMA, testServices, assertFields("protocols"));
         assertNotNull(result);
         assertLeafList(result);
     }
 
     @Test
     public void testKeyedList() {
-        final var result = translateFields(identifierJukebox, assertFields("library/artist(name)"));
+        final var result = translateFields(JUKEBOX_SCHEMA, jukeboxSchemaNode, assertFields("library/artist(name)"));
         assertNotNull(result);
         assertKeyedList(result);
     }
@@ -275,7 +284,7 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
 
     @Test
     public void testDuplicateNodes1() {
-        final var result = translateFields(identifierFoo,
+        final var result = translateFields(FOO_SCHEMA, foo,
             assertFields("bar(alpha;beta/gamma);baz(alpha;beta/gamma)"));
         assertNotNull(result);
         assertDuplicateNodes1(result);
@@ -285,7 +294,7 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
 
     @Test
     public void testDuplicateNodes2() {
-        final var result = translateFields(identifierFoo,
+        final var result = translateFields(FOO_SCHEMA, foo,
             assertFields("bar(alpha;beta/delta);baz(alpha;beta/epsilon)"));
         assertNotNull(result);
         assertDuplicateNodes2(result);
@@ -301,13 +310,13 @@ public abstract class AbstractFieldsTranslatorTest<T> extends AbstractJukeboxTes
         final FieldsParam input = FieldsParam.parse("library(not-existing)");
 
         final RestconfDocumentedException ex = assertThrows(RestconfDocumentedException.class,
-            () -> translateFields(identifierJukebox, input));
+            () -> translateFields(JUKEBOX_SCHEMA, jukeboxSchemaNode, input));
         // Bad request
         assertEquals(ErrorType.PROTOCOL, ex.getErrors().get(0).getErrorType());
         assertEquals(ErrorTag.INVALID_VALUE, ex.getErrors().get(0).getErrorTag());
     }
 
-    private static FieldsParam assertFields(final String input) {
+    private static @NonNull FieldsParam assertFields(final String input) {
         try {
             return FieldsParam.parse(input);
         } catch (ParseException e) {
index 44184a40c8e3a79f7c95bdb41ec21475c57ef6ea..38c4717918b51693fdbe335f18e42af89bdd4c65 100644 (file)
@@ -16,11 +16,12 @@ import java.util.stream.Collectors;
 import org.junit.runner.RunWith;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.restconf.api.query.FieldsParam;
-import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 /**
  * Unit test for {@link NetconfFieldsTranslator}.
@@ -28,9 +29,9 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
 @RunWith(MockitoJUnitRunner.class)
 public class NetconfFieldsTranslatorTest extends AbstractFieldsTranslatorTest<YangInstanceIdentifier> {
     @Override
-    protected List<YangInstanceIdentifier> translateFields(final InstanceIdentifierContext context,
-            final FieldsParam fields) {
-        return NetconfFieldsTranslator.translate(context, fields);
+    protected List<YangInstanceIdentifier> translateFields(final EffectiveModelContext modelContext,
+            final DataSchemaNode schemaNode, final FieldsParam fields) {
+        return NetconfFieldsTranslator.translate(modelContext, schemaNode, fields);
     }
 
     @Override
index f21419e6362fa3132b351f2ea04f5caabd45d7e4..1194cd62ea675b7adbdda8c9dc0ae7bd36be47c2 100644 (file)
@@ -15,8 +15,9 @@ import java.util.Set;
 import org.junit.runner.RunWith;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.restconf.api.query.FieldsParam;
-import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 /**
  * Unit test for {@link WriterFieldsTranslator}.
@@ -24,8 +25,9 @@ import org.opendaylight.yangtools.yang.common.QName;
 @RunWith(MockitoJUnitRunner.class)
 public class WriterFieldsTranslatorTest extends AbstractFieldsTranslatorTest<Set<QName>> {
     @Override
-    protected List<Set<QName>> translateFields(final InstanceIdentifierContext context, final FieldsParam fields) {
-        return WriterFieldsTranslator.translate(context, fields);
+    protected List<Set<QName>> translateFields(final EffectiveModelContext modelContext,
+            final DataSchemaNode schemaNode, final FieldsParam fields) {
+        return WriterFieldsTranslator.translate(modelContext, schemaNode, fields);
     }
 
     @Override