From 561440a51a75d3c326b4c3af84e8c164052de4ef Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 14 Sep 2023 13:42:49 +0200 Subject: [PATCH] Refactor NormalizedNodePayload Turn this class into a record, with complete non-null semantics. JIRA: NETCONF-773 Change-Id: I73e35fe4bd55f8382a86de0052839efc7b98be81 Signed-off-by: Robert Varga --- .../AbstractNormalizedNodeBodyWriter.java | 11 ++--- .../rfc8040/legacy/NormalizedNodePayload.java | 48 ++++--------------- .../impl/RestconfDataServiceImpl.java | 6 +-- .../rests/services/impl/RestconfImpl.java | 2 +- .../RestconfInvokeOperationsServiceImpl.java | 2 +- ...estconfStreamsSubscriptionServiceImpl.java | 2 +- .../XmlNormalizedNodeBodyWriterTest.java | 4 +- .../impl/RestconfDataServiceImplTest.java | 10 ++-- .../rests/services/impl/RestconfImplTest.java | 2 +- ...stconfInvokeOperationsServiceImplTest.java | 2 +- 10 files changed, 27 insertions(+), 62 deletions(-) diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/AbstractNormalizedNodeBodyWriter.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/AbstractNormalizedNodeBodyWriter.java index 2107bf8531..f54d39b5f9 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/AbstractNormalizedNodeBodyWriter.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/AbstractNormalizedNodeBodyWriter.java @@ -36,11 +36,6 @@ abstract class AbstractNormalizedNodeBodyWriter implements MessageBodyWriter type, final Type genericType, final Annotation[] annotations, final MediaType mediaType, final MultivaluedMap httpHeaders, final OutputStream entityStream) throws IOException { - final var data = context.getData(); - if (data == null) { - return; - } - final var output = requireNonNull(entityStream); final var stack = context.inference().toSchemaInferenceStack(); // FIXME: this dispatch is here to handle codec transition to 'output', but that should be completely okay with @@ -49,13 +44,13 @@ abstract class AbstractNormalizedNodeBodyWriter implements MessageBodyWriter { final QName type = node.name().getNodeType(); yield Response.status(Status.OK) - .entity(NormalizedNodePayload.ofReadData(instanceIdentifier.inference(), node, queryParams)) + .entity(new NormalizedNodePayload(instanceIdentifier.inference(), node, queryParams)) .header("ETag", '"' + type.getModule().getRevision().map(Revision::toString).orElse(null) + "-" + type.getLocalName() + '"') .header("Last-Modified", FORMATTER.format(LocalDateTime.now(Clock.systemUTC()))) .build(); } case NONCONFIG -> Response.status(Status.OK) - .entity(NormalizedNodePayload.ofReadData(instanceIdentifier.inference(), node, queryParams)) + .entity(new NormalizedNodePayload(instanceIdentifier.inference(), node, queryParams)) .build(); }; } @@ -823,7 +823,7 @@ public final class RestconfDataServiceImpl { if (resultData == null || resultData.isEmpty()) { return Response.status(Status.NO_CONTENT).build(); } - return Response.status(Status.OK).entity(NormalizedNodePayload.of(inference, resultData)).build(); + return Response.status(Status.OK).entity(new NormalizedNodePayload(inference, resultData)).build(); } /** diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImpl.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImpl.java index cc12a915ff..e8a5582c7b 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImpl.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImpl.java @@ -60,7 +60,7 @@ public final class RestconfImpl { stack.enterDataTree(Restconf.QNAME); stack.enterDataTree(YANG_LIBRARY_VERSION); - return NormalizedNodePayload.of(stack.toInference(), + return new NormalizedNodePayload(stack.toInference(), ImmutableNodes.leafNode(YANG_LIBRARY_VERSION, YANG_LIBRARY_REVISION)); } } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java index 5e94ad25e9..a13a628e81 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java @@ -188,7 +188,7 @@ public final class RestconfInvokeOperationsServiceImpl { if (resultData == null || resultData.isEmpty()) { ar.resume(new WebApplicationException(Status.NO_CONTENT)); } else { - ar.resume(NormalizedNodePayload.of(context.inference(), resultData)); + ar.resume(new NormalizedNodePayload(context.inference(), resultData)); } } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java index c4162650bd..ce5643b3bd 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java @@ -73,7 +73,7 @@ public class RestconfStreamsSubscriptionServiceImpl implements RestconfStreamsSu return Response.ok() .location(location) - .entity(NormalizedNodePayload.of( + .entity(new NormalizedNodePayload( Inference.ofDataTreePath(handlersHolder.getDatabindProvider().currentContext().modelContext(), Notifi.QNAME, LOCATION_QNAME), ImmutableNodes.leafNode(LOCATION_NODEID, location.toString()))) diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyWriterTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyWriterTest.java index c987d93519..0545672d4e 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyWriterTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyWriterTest.java @@ -32,7 +32,7 @@ public class XmlNormalizedNodeBodyWriterTest extends AbstractInstanceIdentifierT public void testWriteEmptyRootContainer() throws IOException { final EffectiveModelContext schemaContext = mock(EffectiveModelContext.class); - final NormalizedNodePayload nodePayload = NormalizedNodePayload.of(Inference.ofDataTreePath(schemaContext), + final NormalizedNodePayload nodePayload = new NormalizedNodePayload(Inference.ofDataTreePath(schemaContext), Builders.containerBuilder().withNodeIdentifier(new NodeIdentifier(SchemaContext.NAME)).build()); final ByteArrayOutputStream output = new ByteArrayOutputStream(); @@ -46,7 +46,7 @@ public class XmlNormalizedNodeBodyWriterTest extends AbstractInstanceIdentifierT @Test public void testRootContainerWrite() throws IOException { - final NormalizedNodePayload nodePayload = NormalizedNodePayload.of( + final NormalizedNodePayload nodePayload = new NormalizedNodePayload( Inference.ofDataTreePath(IID_SCHEMA), Builders.containerBuilder() .withNodeIdentifier(new NodeIdentifier(SchemaContext.NAME)) diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java index 690a2f4457..69e12d2ed4 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java @@ -157,7 +157,7 @@ public class RestconfDataServiceImplTest extends AbstractJukeboxTest { final Response response = dataService.readData("example-jukebox:jukebox", uriInfo); assertNotNull(response); assertEquals(200, response.getStatus()); - assertEquals(EMPTY_JUKEBOX, ((NormalizedNodePayload) response.getEntity()).getData()); + assertEquals(EMPTY_JUKEBOX, ((NormalizedNodePayload) response.getEntity()).data()); } @Test @@ -173,7 +173,7 @@ public class RestconfDataServiceImplTest extends AbstractJukeboxTest { assertNotNull(response); assertEquals(200, response.getStatus()); - final NormalizedNode data = ((NormalizedNodePayload) response.getEntity()).getData(); + final NormalizedNode data = ((NormalizedNodePayload) response.getEntity()).data(); assertTrue(data instanceof ContainerNode); final Collection rootNodes = ((ContainerNode) data).body(); assertEquals(1, rootNodes.size()); @@ -207,7 +207,7 @@ public class RestconfDataServiceImplTest extends AbstractJukeboxTest { assertEquals(200, response.getStatus()); // response must contain all child nodes from config and operational containers merged in one container - final NormalizedNode data = ((NormalizedNodePayload) response.getEntity()).getData(); + final NormalizedNode data = ((NormalizedNodePayload) response.getEntity()).data(); assertTrue(data instanceof ContainerNode); assertEquals(3, ((ContainerNode) data).size()); assertNotNull(((ContainerNode) data).childByArg(CONT_PLAYER.name())); @@ -251,7 +251,7 @@ public class RestconfDataServiceImplTest extends AbstractJukeboxTest { assertEquals(200, response.getStatus()); // response must contain only config data - final NormalizedNode data = ((NormalizedNodePayload) response.getEntity()).getData(); + final NormalizedNode data = ((NormalizedNodePayload) response.getEntity()).data(); // config data present assertNotNull(((ContainerNode) data).childByArg(CONT_PLAYER.name())); @@ -279,7 +279,7 @@ public class RestconfDataServiceImplTest extends AbstractJukeboxTest { assertEquals(200, response.getStatus()); // response must contain only operational data - final NormalizedNode data = ((NormalizedNodePayload) response.getEntity()).getData(); + final NormalizedNode data = ((NormalizedNodePayload) response.getEntity()).data(); // state data present assertNotNull(((ContainerNode) data).childByArg(CONT_PLAYER.name())); diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImplTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImplTest.java index ce0039fa62..1c12be8074 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImplTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfImplTest.java @@ -19,6 +19,6 @@ public class RestconfImplTest { final var context = YangParserTestUtils.parseYangResourceDirectory("/restconf/impl"); final var restconfImpl = new RestconfImpl(() -> DatabindContext.ofModel(context)); final var libraryVersion = restconfImpl.getLibraryVersion(); - assertEquals("2019-01-04", libraryVersion.getData().body()); + assertEquals("2019-01-04", libraryVersion.data().body()); } } diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java index 6ab73b33d4..63a56a10c8 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java @@ -106,7 +106,7 @@ public class RestconfInvokeOperationsServiceImplTest { """.getBytes(StandardCharsets.UTF_8)), mock(UriInfo.class), ar); verify(ar).resume(response.capture()); - assertSame(result, response.getValue().getData()); + assertSame(result, response.getValue().data()); } @Test -- 2.36.6