Eliminate NormalizedNodePayload
[netconf.git] / restconf / restconf-nb / src / main / java / org / opendaylight / restconf / nb / rfc8040 / rests / transactions / MdsalRestconfStrategy.java
index 313a9e9ac8adc07b29321283a0d14d26b74d5f50..01c34331724b871aac37a0a709e866095630d1bf 100644 (file)
@@ -21,6 +21,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -31,19 +32,20 @@ import org.opendaylight.mdsal.dom.api.DOMMountPointService;
 import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService.YangTextSourceExtension;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
+import org.opendaylight.restconf.api.FormattableBody;
 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.common.errors.RestconfFuture;
 import org.opendaylight.restconf.common.errors.SettableRestconfFuture;
-import org.opendaylight.restconf.nb.rfc8040.jersey.providers.ParameterAwareNormalizedNodeWriter;
-import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
-import org.opendaylight.restconf.nb.rfc8040.legacy.WriterParameters;
+import org.opendaylight.restconf.nb.rfc8040.jersey.providers.RestconfNormalizedNodeWriter;
 import org.opendaylight.restconf.server.api.DataGetParams;
 import org.opendaylight.restconf.server.api.DataGetResult;
 import org.opendaylight.restconf.server.api.DatabindContext;
 import org.opendaylight.restconf.server.api.DatabindPath.Data;
-import org.opendaylight.restconf.server.api.QueryParams;
+import org.opendaylight.restconf.server.api.ServerRequest;
+import org.opendaylight.restconf.server.spi.HttpGetResource;
+import org.opendaylight.restconf.server.spi.NormalizedNodeWriterFactory;
 import org.opendaylight.restconf.server.spi.RpcImplementation;
 import org.opendaylight.restconf.server.spi.YangLibraryVersionResource;
 import org.opendaylight.yangtools.yang.common.Empty;
@@ -64,7 +66,7 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
  * @see DOMDataTreeReadWriteTransaction
  */
 public final class MdsalRestconfStrategy extends RestconfStrategy {
-    private final @NonNull YangLibraryVersionResource yangLibraryVersion;
+    private final @NonNull HttpGetResource yangLibraryVersion;
     private final @NonNull DOMDataBroker dataBroker;
 
     public MdsalRestconfStrategy(final DatabindContext databind, final DOMDataBroker dataBroker,
@@ -76,8 +78,9 @@ public final class MdsalRestconfStrategy extends RestconfStrategy {
         yangLibraryVersion = YangLibraryVersionResource.of(databind);
     }
 
-    public @NonNull RestconfFuture<NormalizedNodePayload> yangLibraryVersionGET(final QueryParams params) {
-        return yangLibraryVersion.httpGET(params);
+    @NonNullByDefault
+    public RestconfFuture<FormattableBody> yangLibraryVersionGET(final ServerRequest request) {
+        return yangLibraryVersion.httpGET(request);
     }
 
     @Override
@@ -86,7 +89,8 @@ public final class MdsalRestconfStrategy extends RestconfStrategy {
     }
 
     @Override
-    void delete(final SettableRestconfFuture<Empty> future, final YangInstanceIdentifier path) {
+    void delete(final SettableRestconfFuture<Empty> future, final ServerRequest request,
+            final YangInstanceIdentifier path) {
         final var tx = dataBroker.newReadWriteTransaction();
         tx.exists(CONFIGURATION, path).addCallback(new FutureCallback<>() {
             @Override
@@ -125,14 +129,15 @@ public final class MdsalRestconfStrategy extends RestconfStrategy {
     }
 
     @Override
-    RestconfFuture<DataGetResult> dataGET(final Data path, final DataGetParams params) {
-        final var inference = path.inference();
+    RestconfFuture<DataGetResult> dataGET(final ServerRequest request, final Data path, final DataGetParams params) {
+        final var depth = params.depth();
         final var fields = params.fields();
-        return completeDataGET(inference,
-            fields == null ? WriterParameters.of(params.prettyPrint(), params.depth())
-                : new WriterParameters(params.prettyPrint(), params.depth(),
-                    translateFieldsParam(inference.modelContext(), path.schema(), fields)),
-            readData(params.content(), path.instance(), params.withDefaults()), null);
+        final var writerFactory = fields == null ? NormalizedNodeWriterFactory.of(depth)
+            : new MdsalNormalizedNodeWriterFactory(
+                translateFieldsParam(path.inference().modelContext(), path.schema(), fields), depth);
+
+        return completeDataGET(readData(params.content(), path.instance(), params.withDefaults()), path, writerFactory,
+            null);
     }
 
     @Override
@@ -152,7 +157,7 @@ public final class MdsalRestconfStrategy extends RestconfStrategy {
 
     /**
      * Translate a {@link FieldsParam} to a complete list of child nodes organized into levels, suitable for use with
-     * {@link ParameterAwareNormalizedNodeWriter}.
+     * {@link RestconfNormalizedNodeWriter}.
      *
      * <p>
      * Fields parser that stores set of {@link QName}s in each level. Because of this fact, from the output it is only