From 36b7055c4730b406ded47936641855466f574f9f Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 9 Apr 2024 23:21:28 +0200 Subject: [PATCH] Eliminate FormatParameters We are just dancing around the pretty-print parameter. Let's ditch the wrapping and use the parameter all around. JIRA: NETCONF-773 Change-Id: I469c2f364956506578655bdc40bcbd3004a1c96a Signed-off-by: Robert Varga --- .../restconf/api/FormatParameters.java | 33 ------------------- .../restconf/api/FormattableBody.java | 11 ++++--- .../nb/jaxrs/FormattableBodyCallback.java | 10 +++--- .../nb/jaxrs/JaxRsFormattableBody.java | 8 ++--- .../nb/jaxrs/JaxRsFormattableBodyWriter.java | 6 ++-- .../restconf/nb/jaxrs/JaxRsRestconf.java | 23 +++++++------ .../jaxrs/JsonJaxRsFormattableBodyWriter.java | 7 ++-- .../jaxrs/XmlJaxRsFormattableBodyWriter.java | 7 ++-- .../AbstractNormalizedNodeBodyWriter.java | 6 ++-- .../JsonNormalizedNodeBodyWriter.java | 6 ++-- .../XmlNormalizedNodeBodyWriter.java | 6 ++-- .../rfc8040/legacy/NormalizedNodePayload.java | 6 ++-- .../transactions/MdsalRestconfStrategy.java | 2 +- .../transactions/NetconfRestconfStrategy.java | 2 +- .../rests/transactions/RestconfStrategy.java | 6 ++-- .../server/api/DatabindFormattableBody.java | 14 ++++---- .../restconf/server/api/ServerRequest.java | 11 ++----- .../server/spi/FormattableBodySupport.java | 10 +++--- .../server/spi/NormalizedFormattableBody.java | 14 ++++---- .../server/spi/OperationOutputBody.java | 10 +++--- .../restconf/server/spi/OperationsBody.java | 6 ++-- .../server/spi/YangPatchStatusBody.java | 10 +++--- .../nb/jaxrs/AbstractRestconfTest.java | 5 ++- .../nb/rfc8040/AbstractJukeboxTest.java | 5 ++- .../XmlNormalizedNodeBodyWriterTest.java | 6 ++-- 25 files changed, 96 insertions(+), 134 deletions(-) delete mode 100644 protocol/restconf-api/src/main/java/org/opendaylight/restconf/api/FormatParameters.java diff --git a/protocol/restconf-api/src/main/java/org/opendaylight/restconf/api/FormatParameters.java b/protocol/restconf-api/src/main/java/org/opendaylight/restconf/api/FormatParameters.java deleted file mode 100644 index 7a1738ce41..0000000000 --- a/protocol/restconf-api/src/main/java/org/opendaylight/restconf/api/FormatParameters.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.restconf.api; - -import static java.util.Objects.requireNonNull; - -import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.restconf.api.query.PrettyPrintParam; -import org.opendaylight.restconf.api.query.RestconfQueryParam; -import org.opendaylight.yangtools.concepts.Immutable; - -/** - * The set of {@link RestconfQueryParam}s governing output formatting. - * - * @param prettyPrint the {@link PrettyPrintParam} parameter - */ -@NonNullByDefault -public record FormatParameters(PrettyPrintParam prettyPrint) implements Immutable { - public static final FormatParameters COMPACT = new FormatParameters(PrettyPrintParam.FALSE); - public static final FormatParameters PRETTY = new FormatParameters(PrettyPrintParam.TRUE); - - /** - * Return the {@link PrettyPrintParam} parameter. - */ - public FormatParameters { - requireNonNull(prettyPrint); - } -} diff --git a/protocol/restconf-api/src/main/java/org/opendaylight/restconf/api/FormattableBody.java b/protocol/restconf-api/src/main/java/org/opendaylight/restconf/api/FormattableBody.java index 870bcd2d28..51529ee2d4 100644 --- a/protocol/restconf-api/src/main/java/org/opendaylight/restconf/api/FormattableBody.java +++ b/protocol/restconf-api/src/main/java/org/opendaylight/restconf/api/FormattableBody.java @@ -12,31 +12,32 @@ import com.google.common.base.MoreObjects.ToStringHelper; import java.io.IOException; import java.io.OutputStream; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.restconf.api.query.PrettyPrintParam; import org.opendaylight.yangtools.concepts.Immutable; /** * A body which is capable of being formatted to an {@link OutputStream} in either JSON or XML format using particular - * {@link FormatParameters}. + * {@link PrettyPrintParam}. */ @NonNullByDefault public abstract class FormattableBody implements Immutable { /** * Write the content of this body as a JSON document. * - * @param format {@link FormatParameters} + * @param prettyPrint a {@link PrettyPrintParam} * @param out output stream * @throws IOException if an IO error occurs. */ - public abstract void formatToJSON(FormatParameters format, OutputStream out) throws IOException; + public abstract void formatToJSON(PrettyPrintParam prettyPrint, OutputStream out) throws IOException; /** * Write the content of this body as an XML document. * - * @param format {@link FormatParameters} + * @param prettyPrint a {@link PrettyPrintParam} * @param out output stream * @throws IOException if an IO error occurs. */ - public abstract void formatToXML(FormatParameters format, OutputStream out) throws IOException; + public abstract void formatToXML(PrettyPrintParam prettyPrint, OutputStream out) throws IOException; protected abstract ToStringHelper addToStringAttributes(ToStringHelper helper); diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/FormattableBodyCallback.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/FormattableBodyCallback.java index 8d5aebb00b..da864fb93a 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/FormattableBodyCallback.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/FormattableBodyCallback.java @@ -12,23 +12,23 @@ import static java.util.Objects.requireNonNull; import javax.ws.rs.container.AsyncResponse; import javax.ws.rs.core.Response; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.FormattableBody; +import org.opendaylight.restconf.api.query.PrettyPrintParam; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; /** * A {@link JaxRsRestconfCallback} producing a {@link FormattableBody}. */ final class FormattableBodyCallback extends JaxRsRestconfCallback { - private final @NonNull FormatParameters format; + private final @NonNull PrettyPrintParam prettyPrint; - FormattableBodyCallback(final AsyncResponse ar, final FormatParameters format) { + FormattableBodyCallback(final AsyncResponse ar, final PrettyPrintParam prettyPrint) { super(ar); - this.format = requireNonNull(format); + this.prettyPrint = requireNonNull(prettyPrint); } @Override Response transform(final FormattableBody result) throws RestconfDocumentedException { - return Response.ok().entity(new JaxRsFormattableBody(result, format)).build(); + return Response.ok().entity(new JaxRsFormattableBody(result, prettyPrint)).build(); } } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsFormattableBody.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsFormattableBody.java index 2ebe205864..0f569d68e7 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsFormattableBody.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsFormattableBody.java @@ -10,16 +10,16 @@ package org.opendaylight.restconf.nb.jaxrs; import static java.util.Objects.requireNonNull; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.FormattableBody; +import org.opendaylight.restconf.api.query.PrettyPrintParam; /** - * A bridge capturing a {@link FormattableBody} and {@link FormatParameters}./ + * A bridge capturing a {@link FormattableBody} and {@link PrettyPrintParam}. */ @NonNullByDefault -record JaxRsFormattableBody(FormattableBody body, FormatParameters format) { +record JaxRsFormattableBody(FormattableBody body, PrettyPrintParam prettyPrint) { JaxRsFormattableBody { requireNonNull(body); - requireNonNull(format); + requireNonNull(prettyPrint); } } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsFormattableBodyWriter.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsFormattableBodyWriter.java index f92e09ba17..0138f1c28b 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsFormattableBodyWriter.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsFormattableBodyWriter.java @@ -17,8 +17,8 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyWriter; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.FormattableBody; +import org.opendaylight.restconf.api.query.PrettyPrintParam; abstract sealed class JaxRsFormattableBodyWriter implements MessageBodyWriter permits JsonJaxRsFormattableBodyWriter, XmlJaxRsFormattableBodyWriter { @@ -32,9 +32,9 @@ abstract sealed class JaxRsFormattableBodyWriter implements MessageBodyWriter type, final Type genericType, final Annotation[] annotations, final MediaType mediaType, final MultivaluedMap httpHeaders, final OutputStream entityStream) throws IOException { - writeTo(entity.body(), entity.format(), requireNonNull(entityStream)); + writeTo(entity.body(), entity.prettyPrint(), requireNonNull(entityStream)); } @NonNullByDefault - abstract void writeTo(FormattableBody body, FormatParameters format, OutputStream out) throws IOException; + abstract void writeTo(FormattableBody body, PrettyPrintParam prettyPrint, OutputStream out) throws IOException; } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsRestconf.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsRestconf.java index 5a87e8e27e..d018f0f79b 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsRestconf.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JaxRsRestconf.java @@ -44,7 +44,6 @@ import javax.ws.rs.ext.ParamConverterProvider; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.restconf.api.ApiPath; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.HttpStatusCode; import org.opendaylight.restconf.api.MediaTypes; import org.opendaylight.restconf.api.QueryParameters; @@ -472,7 +471,7 @@ public final class JaxRsRestconf implements ParamConverterProvider { @Suspended final AsyncResponse ar) { try (var jsonBody = new JsonChildBody(body)) { final var request = requestOf(uriInfo); - completeDataPOST(server.dataPOST(request, jsonBody), request.format(), uriInfo, ar); + completeDataPOST(server.dataPOST(request, jsonBody), request.prettyPrint(), uriInfo, ar); } } @@ -493,8 +492,8 @@ public final class JaxRsRestconf implements ParamConverterProvider { public void postDataJSON(@Encoded @PathParam("identifier") final ApiPath identifier, final InputStream body, @Context final UriInfo uriInfo, @Suspended final AsyncResponse ar) { final var request = requestOf(uriInfo); - completeDataPOST(server.dataPOST(request, identifier, new JsonDataPostBody(body)), request.format(), uriInfo, - ar); + completeDataPOST(server.dataPOST(request, identifier, new JsonDataPostBody(body)), request.prettyPrint(), + uriInfo, ar); } /** @@ -514,7 +513,7 @@ public final class JaxRsRestconf implements ParamConverterProvider { public void postDataXML(final InputStream body, @Context final UriInfo uriInfo, @Suspended final AsyncResponse ar) { try (var xmlBody = new XmlChildBody(body)) { final var request = requestOf(uriInfo); - completeDataPOST(server.dataPOST(request, xmlBody), request.format(), uriInfo, ar); + completeDataPOST(server.dataPOST(request, xmlBody), request.prettyPrint(), uriInfo, ar); } } @@ -536,12 +535,12 @@ public final class JaxRsRestconf implements ParamConverterProvider { public void postDataXML(@Encoded @PathParam("identifier") final ApiPath identifier, final InputStream body, @Context final UriInfo uriInfo, @Suspended final AsyncResponse ar) { final var request = requestOf(uriInfo); - completeDataPOST(server.dataPOST(request, identifier, new XmlDataPostBody(body)), request.format(), uriInfo, - ar); + completeDataPOST(server.dataPOST(request, identifier, new XmlDataPostBody(body)), request.prettyPrint(), + uriInfo, ar); } private static void completeDataPOST(final RestconfFuture future, - final FormatParameters format, final UriInfo uriInfo, final AsyncResponse ar) { + final PrettyPrintParam prettyPrint, final UriInfo uriInfo, final AsyncResponse ar) { future.addCallback(new JaxRsRestconfCallback(ar) { @Override Response transform(final DataPostResult result) { @@ -556,7 +555,7 @@ public final class JaxRsRestconf implements ParamConverterProvider { if (result instanceof InvokeResult invokeOperation) { final var output = invokeOperation.output(); return output == null ? Response.noContent().build() - : Response.ok().entity(new JaxRsFormattableBody(output, format)).build(); + : Response.ok().entity(new JaxRsFormattableBody(output, prettyPrint)).build(); } LOG.error("Unhandled result {}", result); return Response.serverError().build(); @@ -670,7 +669,7 @@ public final class JaxRsRestconf implements ParamConverterProvider { MediaTypes.APPLICATION_YANG_DATA_JSON, MediaType.APPLICATION_JSON }) public void operationsGET(@Suspended final AsyncResponse ar) { - server.operationsGET(emptyRequest).addCallback(new FormattableBodyCallback(ar, emptyRequest.format())); + server.operationsGET(emptyRequest).addCallback(new FormattableBodyCallback(ar, prettyPrint)); } /** @@ -687,7 +686,7 @@ public final class JaxRsRestconf implements ParamConverterProvider { }) public void operationsGET(@PathParam("operation") final ApiPath operation, @Suspended final AsyncResponse ar) { server.operationsGET(emptyRequest, operation) - .addCallback(new FormattableBodyCallback(ar, emptyRequest.format())); + .addCallback(new FormattableBodyCallback(ar, prettyPrint)); } /** @@ -777,7 +776,7 @@ public final class JaxRsRestconf implements ParamConverterProvider { MediaType.TEXT_XML }) public void yangLibraryVersionGET(@Suspended final AsyncResponse ar) { - server.yangLibraryVersionGET(emptyRequest).addCallback(new FormattableBodyCallback(ar, emptyRequest.format())); + server.yangLibraryVersionGET(emptyRequest).addCallback(new FormattableBodyCallback(ar, prettyPrint)); } // FIXME: References to these resources are generated by our yang-library implementation. That means: diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JsonJaxRsFormattableBodyWriter.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JsonJaxRsFormattableBodyWriter.java index f012e0d013..9385a0c92d 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JsonJaxRsFormattableBodyWriter.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/JsonJaxRsFormattableBodyWriter.java @@ -12,15 +12,16 @@ import java.io.OutputStream; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.ext.Provider; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.FormattableBody; import org.opendaylight.restconf.api.MediaTypes; +import org.opendaylight.restconf.api.query.PrettyPrintParam; @Provider @Produces({ MediaTypes.APPLICATION_YANG_DATA_JSON, MediaType.APPLICATION_JSON }) public final class JsonJaxRsFormattableBodyWriter extends JaxRsFormattableBodyWriter { @Override - void writeTo(final FormattableBody body, final FormatParameters format, final OutputStream out) throws IOException { - body.formatToJSON(format, out); + void writeTo(final FormattableBody body, final PrettyPrintParam prettyPrint, final OutputStream out) + throws IOException { + body.formatToJSON(prettyPrint, out); } } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/XmlJaxRsFormattableBodyWriter.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/XmlJaxRsFormattableBodyWriter.java index 5f047a31d6..0802cc4299 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/XmlJaxRsFormattableBodyWriter.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/jaxrs/XmlJaxRsFormattableBodyWriter.java @@ -12,15 +12,16 @@ import java.io.OutputStream; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.ext.Provider; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.FormattableBody; import org.opendaylight.restconf.api.MediaTypes; +import org.opendaylight.restconf.api.query.PrettyPrintParam; @Provider @Produces({ MediaTypes.APPLICATION_YANG_DATA_XML, MediaType.APPLICATION_XML, MediaType.TEXT_XML }) public final class XmlJaxRsFormattableBodyWriter extends JaxRsFormattableBodyWriter { @Override - void writeTo(final FormattableBody body, final FormatParameters format, final OutputStream out) throws IOException { - body.formatToXML(format, out); + void writeTo(final FormattableBody body, final PrettyPrintParam prettyPrint, final OutputStream out) + throws IOException { + body.formatToXML(prettyPrint, out); } } 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 872be8f01d..8bf81af721 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 @@ -17,7 +17,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyWriter; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.restconf.api.FormatParameters; +import org.opendaylight.restconf.api.query.PrettyPrintParam; import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload; import org.opendaylight.restconf.nb.rfc8040.legacy.WriterParameters; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -35,10 +35,10 @@ abstract class AbstractNormalizedNodeBodyWriter implements MessageBodyWriter httpHeaders, final OutputStream entityStream) throws IOException { writeData(context.inference().toSchemaInferenceStack(), context.data(), context.writerParameters(), - context.format(), requireNonNull(entityStream)); + context.prettyPrint(), requireNonNull(entityStream)); } @NonNullByDefault abstract void writeData(SchemaInferenceStack stack, NormalizedNode data, WriterParameters writerParameters, - FormatParameters format, OutputStream out) throws IOException; + PrettyPrintParam prettyPrint, OutputStream out) throws IOException; } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyWriter.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyWriter.java index bcb65ee12c..a7363fbef4 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyWriter.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyWriter.java @@ -14,8 +14,8 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.ext.Provider; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.MediaTypes; +import org.opendaylight.restconf.api.query.PrettyPrintParam; import org.opendaylight.restconf.nb.rfc8040.jersey.providers.api.RestconfNormalizedNodeWriter; import org.opendaylight.restconf.nb.rfc8040.legacy.WriterParameters; import org.opendaylight.restconf.server.spi.FormattableBodySupport; @@ -34,7 +34,7 @@ import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference public final class JsonNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWriter { @Override void writeData(final SchemaInferenceStack stack, final NormalizedNode data, final WriterParameters writerParameters, - final FormatParameters format, final OutputStream out) throws IOException { + final PrettyPrintParam prettyPrint, final OutputStream out) throws IOException { if (!stack.isEmpty()) { stack.exit(); } @@ -47,7 +47,7 @@ public final class JsonNormalizedNodeBodyWriter extends AbstractNormalizedNodeBo .build() : data; - try (var jsonWriter = FormattableBodySupport.createJsonWriter(out, format)) { + try (var jsonWriter = FormattableBodySupport.createJsonWriter(out, prettyPrint)) { jsonWriter.beginObject(); final var nnWriter = createNormalizedNodeWriter(stack.toInference(), jsonWriter, writerParameters, null); diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyWriter.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyWriter.java index 40092e5637..439d01560a 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyWriter.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlNormalizedNodeBodyWriter.java @@ -15,8 +15,8 @@ import javax.ws.rs.ext.Provider; import javax.xml.XMLConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.MediaTypes; +import org.opendaylight.restconf.api.query.PrettyPrintParam; import org.opendaylight.restconf.nb.rfc8040.jersey.providers.api.RestconfNormalizedNodeWriter; import org.opendaylight.restconf.nb.rfc8040.legacy.WriterParameters; import org.opendaylight.restconf.server.spi.FormattableBodySupport; @@ -35,7 +35,7 @@ import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference public final class XmlNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWriter { @Override void writeData(final SchemaInferenceStack stack, final NormalizedNode data, final WriterParameters writerParameters, - final FormatParameters format, final OutputStream out) throws IOException { + final PrettyPrintParam prettyPrint, final OutputStream out) throws IOException { final boolean isRoot; if (!stack.isEmpty()) { stack.exit(); @@ -44,7 +44,7 @@ public final class XmlNormalizedNodeBodyWriter extends AbstractNormalizedNodeBod isRoot = true; } - final var xmlWriter = FormattableBodySupport.createXmlWriter(out, format); + final var xmlWriter = FormattableBodySupport.createXmlWriter(out, prettyPrint); final var nnWriter = createNormalizedNodeWriter(xmlWriter, stack.toInference(), writerParameters); if (data instanceof MapEntryNode mapEntry) { // Restconf allows returning one list item. We need to wrap it diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/legacy/NormalizedNodePayload.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/legacy/NormalizedNodePayload.java index c8c9d7221a..4e62f79e9b 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/legacy/NormalizedNodePayload.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/legacy/NormalizedNodePayload.java @@ -10,7 +10,7 @@ package org.opendaylight.restconf.nb.rfc8040.legacy; import static java.util.Objects.requireNonNull; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.restconf.api.FormatParameters; +import org.opendaylight.restconf.api.query.PrettyPrintParam; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference; @@ -23,11 +23,11 @@ public record NormalizedNodePayload( Inference inference, NormalizedNode data, WriterParameters writerParameters, - FormatParameters format) { + PrettyPrintParam prettyPrint) { public NormalizedNodePayload { requireNonNull(inference); requireNonNull(data); requireNonNull(writerParameters); - requireNonNull(format); + requireNonNull(prettyPrint); } } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfStrategy.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfStrategy.java index 9c65daff08..9cf61e62fc 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfStrategy.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/MdsalRestconfStrategy.java @@ -132,7 +132,7 @@ public final class MdsalRestconfStrategy extends RestconfStrategy { RestconfFuture dataGET(final ServerRequest request, final Data path, final DataGetParams params) { final var inference = path.inference(); final var fields = params.fields(); - return completeDataGET(request.format(), inference, + return completeDataGET(request.prettyPrint(), inference, fields == null ? WriterParameters.of(params.depth()) : new WriterParameters(params.depth(), translateFieldsParam(inference.modelContext(), path.schema(), fields)), diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfStrategy.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfStrategy.java index 00adede4ea..e06d3ea265 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfStrategy.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfStrategy.java @@ -125,7 +125,7 @@ public final class NetconfRestconfStrategy extends RestconfStrategy { node = readData(params.content(), path.instance(), params.withDefaults()); } - return completeDataGET(request.format(), inference, WriterParameters.of(params.depth()), node, null); + return completeDataGET(request.prettyPrint(), inference, WriterParameters.of(params.depth()), node, null); } @Override diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfStrategy.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfStrategy.java index 7cad275e02..a091c955bf 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfStrategy.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/RestconfStrategy.java @@ -50,9 +50,9 @@ import org.opendaylight.mdsal.dom.api.DOMTransactionChain; import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult; import org.opendaylight.netconf.dom.api.NetconfDataTreeService; import org.opendaylight.restconf.api.ApiPath; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.FormattableBody; import org.opendaylight.restconf.api.query.ContentParam; +import org.opendaylight.restconf.api.query.PrettyPrintParam; import org.opendaylight.restconf.api.query.WithDefaultsParam; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.opendaylight.restconf.common.errors.RestconfError; @@ -843,7 +843,7 @@ public abstract class RestconfStrategy { abstract @NonNull RestconfFuture dataGET(ServerRequest request, Data path, DataGetParams params); - static final @NonNull RestconfFuture completeDataGET(final FormatParameters format, + static final @NonNull RestconfFuture completeDataGET(final PrettyPrintParam prettyPrint, final Inference inference, final WriterParameters writerParams, final @Nullable NormalizedNode node, final @Nullable ConfigurationMetadata metadata) { if (node == null) { @@ -852,7 +852,7 @@ public abstract class RestconfStrategy { ErrorType.PROTOCOL, ErrorTag.DATA_MISSING)); } - final var payload = new NormalizedNodePayload(inference, node, writerParams, format); + final var payload = new NormalizedNodePayload(inference, node, writerParams, prettyPrint); return RestconfFuture.of(metadata == null ? new DataGetResult(payload) : new DataGetResult(payload, metadata.entityTag(), metadata.lastModified())); } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/DatabindFormattableBody.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/DatabindFormattableBody.java index d1aaf2d090..8d5308a0f9 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/DatabindFormattableBody.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/DatabindFormattableBody.java @@ -12,8 +12,8 @@ import static java.util.Objects.requireNonNull; import java.io.IOException; import java.io.OutputStream; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.FormattableBody; +import org.opendaylight.restconf.api.query.PrettyPrintParam; /** * A {@link FormattableBody} which has an attached {@link DatabindContext}. @@ -27,18 +27,18 @@ public abstract class DatabindFormattableBody extends FormattableBody { } @Override - public final void formatToJSON(final FormatParameters format, final OutputStream out) throws IOException { - formatToJSON(databind, format, out); + public final void formatToJSON(final PrettyPrintParam prettyPrint, final OutputStream out) throws IOException { + formatToJSON(databind, prettyPrint, out); } - protected abstract void formatToJSON(DatabindContext databind, FormatParameters format, OutputStream out) + protected abstract void formatToJSON(DatabindContext databind, PrettyPrintParam prettyPrint, OutputStream out) throws IOException; @Override - public final void formatToXML(final FormatParameters format, final OutputStream out) throws IOException { - formatToXML(databind, format, out); + public final void formatToXML(final PrettyPrintParam prettyPrint, final OutputStream out) throws IOException { + formatToXML(databind, prettyPrint, out); } - protected abstract void formatToXML(DatabindContext databind, FormatParameters format, OutputStream out) + protected abstract void formatToXML(DatabindContext databind, PrettyPrintParam prettyPrint, OutputStream out) throws IOException; } diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/ServerRequest.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/ServerRequest.java index a675189950..4f28f44bf9 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/ServerRequest.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/ServerRequest.java @@ -10,7 +10,6 @@ package org.opendaylight.restconf.server.api; import static java.util.Objects.requireNonNull; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.QueryParameters; import org.opendaylight.restconf.api.query.PrettyPrintParam; @@ -19,24 +18,20 @@ import org.opendaylight.restconf.api.query.PrettyPrintParam; * HTTP transport layer. This includes: *
    *
  • HTTP request {@link #queryParameters() query parameters},
  • - *
  • {@link #format() format parameters}, including those affected by query parameters
  • + *
  • {@link #prettyPrint() pretty printing}, including affected by query parameters
  • *
* It notably does not hold the HTTP request path, nor the request body. Those are passed as separate arguments * to server methods as implementations of those methods are expected to act on them. */ @NonNullByDefault -public record ServerRequest(QueryParameters queryParameters, FormatParameters format) { +public record ServerRequest(QueryParameters queryParameters, PrettyPrintParam prettyPrint) { // TODO: this is where a binding to security principal and access control should be: // - we would like to be able to have java.security.Principal#name() for logging purposes // - we need to have a NACM-capable interface, through which we can check permissions (such as data PUT) and // establish output filters (i.e. excluding paths inaccessible path to user from a data GET a ContainerNode) public ServerRequest { requireNonNull(queryParameters); - requireNonNull(format); - } - - private ServerRequest(final QueryParameters queryParameters, final PrettyPrintParam prettyPrint) { - this(queryParameters, prettyPrint.value() ? FormatParameters.PRETTY : FormatParameters.COMPACT); + requireNonNull(prettyPrint); } public static ServerRequest of(final QueryParameters queryParameters, final PrettyPrintParam defaultPrettyPrint) { diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/FormattableBodySupport.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/FormattableBodySupport.java index a42bedfebb..0dbb5218a0 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/FormattableBodySupport.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/FormattableBodySupport.java @@ -18,8 +18,8 @@ import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.FormattableBody; +import org.opendaylight.restconf.api.query.PrettyPrintParam; import org.opendaylight.yangtools.yang.data.codec.gson.JsonWriterFactory; /** @@ -34,16 +34,16 @@ public final class FormattableBodySupport { // Hidden on purpose } - public static JsonWriter createJsonWriter(final OutputStream out, final FormatParameters format) { + public static JsonWriter createJsonWriter(final OutputStream out, final PrettyPrintParam prettyPrint) { final var ret = JsonWriterFactory.createJsonWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8)); - ret.setIndent(format.prettyPrint().value() ? PRETTY_PRINT_INDENT : ""); + ret.setIndent(prettyPrint.value() ? PRETTY_PRINT_INDENT : ""); return ret; } - public static XMLStreamWriter createXmlWriter(final OutputStream out, final FormatParameters format) + public static XMLStreamWriter createXmlWriter(final OutputStream out, final PrettyPrintParam prettyPrint) throws IOException { final var xmlWriter = createXmlWriter(out); - return format.prettyPrint().value() ? new IndentingXMLStreamWriter(xmlWriter) : xmlWriter; + return prettyPrint.value() ? new IndentingXMLStreamWriter(xmlWriter) : xmlWriter; } private static XMLStreamWriter createXmlWriter(final OutputStream out) throws IOException { diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/NormalizedFormattableBody.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/NormalizedFormattableBody.java index ae06d5e013..9ccd06efb4 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/NormalizedFormattableBody.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/NormalizedFormattableBody.java @@ -15,8 +15,8 @@ import java.io.IOException; import java.io.OutputStream; import javax.xml.stream.XMLStreamException; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.FormattableBody; +import org.opendaylight.restconf.api.query.PrettyPrintParam; import org.opendaylight.restconf.server.api.DatabindContext; import org.opendaylight.restconf.server.api.DatabindFormattableBody; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; @@ -61,16 +61,16 @@ public final class NormalizedFormattableBody extends D } @Override - protected void formatToJSON(final DatabindContext databind, final FormatParameters format, final OutputStream out) - throws IOException { + protected void formatToJSON(final DatabindContext databind, final PrettyPrintParam prettyPrint, + final OutputStream out) throws IOException { writeTo(JSONNormalizedNodeStreamWriter.createExclusiveWriter(databind.jsonCodecs(), parent, null, - FormattableBodySupport.createJsonWriter(out, format))); + FormattableBodySupport.createJsonWriter(out, prettyPrint))); } @Override - protected void formatToXML(final DatabindContext databind, final FormatParameters format, final OutputStream out) - throws IOException { - final var xmlWriter = FormattableBodySupport.createXmlWriter(out, format); + protected void formatToXML(final DatabindContext databind, final PrettyPrintParam prettyPrint, + final OutputStream out) throws IOException { + final var xmlWriter = FormattableBodySupport.createXmlWriter(out, prettyPrint); writeTo(XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, parent)); try { xmlWriter.close(); diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/OperationOutputBody.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/OperationOutputBody.java index a80724ba5d..32ed369e0a 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/OperationOutputBody.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/spi/OperationOutputBody.java @@ -17,8 +17,8 @@ import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.restconf.api.FormatParameters; import org.opendaylight.restconf.api.FormattableBody; +import org.opendaylight.restconf.api.query.PrettyPrintParam; import org.opendaylight.restconf.server.api.DatabindPath.OperationPath; import org.opendaylight.restconf.server.api.DatabindPathFormattableBody; import org.opendaylight.yangtools.yang.common.QName; @@ -49,12 +49,12 @@ public final class OperationOutputBody extends DatabindPathFormattableBody