Separate logic of get root path 76/110176/10
authorlubos-cicut <lubos.cicut@pantheon.tech>
Thu, 8 Feb 2024 09:34:15 +0000 (10:34 +0100)
committerIvan Hrasko <ivan.hrasko@pantheon.tech>
Mon, 12 Feb 2024 15:54:26 +0000 (15:54 +0000)
Repaired creating of get root path to simplify logic of
OperationEntity#generate method.

Change-Id: Ice9857b673e8db88f7edcb46cbf92a9851d033ba
Signed-off-by: lubos-cicut <lubos.cicut@pantheon.tech>
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/PathsStream.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetEntity.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetRootEntity.java [new file with mode: 0644]
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/OperationEntity.java

index a8f8911934215bf9d8fcee96fdcab3c81a9150ec..8382614ad52948e15b5d3348de513497e5f825cb 100644 (file)
@@ -31,6 +31,7 @@ import java.util.stream.Collectors;
 import org.opendaylight.restconf.openapi.jaxrs.OpenApiBodyWriter;
 import org.opendaylight.restconf.openapi.model.DeleteEntity;
 import org.opendaylight.restconf.openapi.model.GetEntity;
+import org.opendaylight.restconf.openapi.model.GetRootEntity;
 import org.opendaylight.restconf.openapi.model.ParameterEntity;
 import org.opendaylight.restconf.openapi.model.ParameterSchemaEntity;
 import org.opendaylight.restconf.openapi.model.PatchEntity;
@@ -160,11 +161,9 @@ public final class PathsStream extends InputStream {
         final var result = new ArrayDeque<PathEntity>();
         if (includeDataStore && !hasAddedDataStore) {
             final var dataPath = basePath + DATA + urlPrefix;
-            result.add(new PathEntity(dataPath,
-                new GetEntity(null, deviceName, "data", null, null, false)));
+            result.add(new PathEntity(dataPath, new GetRootEntity(deviceName, "data")));
             final var operationsPath = basePath + OPERATIONS + urlPrefix;
-            result.add(new PathEntity(operationsPath,
-                new GetEntity(null, deviceName, "operations", null, null, false)));
+            result.add(new PathEntity(operationsPath, new GetRootEntity(deviceName, "operations")));
             hasAddedDataStore = true;
         }
         // RPC operations (via post) - RPCs have their own path
index 23baaba8f2e489e84247a1a6f636474e692f6a9c..6a0f60f63291c18bb18b3fca5e717e78a8b2348a 100644 (file)
@@ -20,7 +20,7 @@ import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 
-public final class GetEntity extends OperationEntity {
+public sealed class GetEntity extends OperationEntity permits GetRootEntity {
     private final boolean isConfig;
 
     public GetEntity(final @Nullable SchemaNode schema, final @NonNull String deviceName,
diff --git a/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetRootEntity.java b/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetRootEntity.java
new file mode 100644 (file)
index 0000000..bafbb5d
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * 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.openapi.model;
+
+import static java.util.Objects.requireNonNull;
+import static javax.ws.rs.core.Response.Status.OK;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import java.io.IOException;
+import javax.ws.rs.HttpMethod;
+import org.eclipse.jdt.annotation.NonNull;
+
+public final class GetRootEntity extends GetEntity {
+    private final String type;
+
+    public GetRootEntity(final @NonNull String deviceName, final @NonNull String type) {
+        super(null, deviceName, "", null, null, false);
+        this.type = requireNonNull(type);
+    }
+
+    @Override
+    public void generate(final @NonNull JsonGenerator generator) throws IOException {
+        generator.writeObjectFieldStart("get");
+        generator.writeStringField(DESCRIPTION, type.equals("data")
+            ? "Queries the config (startup) datastore on the mounted hosted."
+            : "Queries the available operations (RPC calls) on the mounted hosted.");
+        generator.writeObjectFieldStart(RESPONSES);
+        generator.writeObjectFieldStart(String.valueOf(OK.getStatusCode()));
+        generator.writeStringField(DESCRIPTION, "OK");
+        generator.writeEndObject(); //end of 200
+        generator.writeEndObject(); // end of responses
+        final var summary = HttpMethod.GET + " - " + deviceName() + " - datastore - " + type;
+        generator.writeStringField(SUMMARY, summary);
+        generator.writeArrayFieldStart("tags");
+        generator.writeString(deviceName() + " GET root");
+        generator.writeEndArray(); //end of tags
+        generator.writeEndObject(); //end of get
+    }
+}
index 442958f7897bf30206d089c7c63b91660d5a36d1..412b7e582e17510c9883138a088954b50ff83009 100644 (file)
@@ -8,12 +8,10 @@
 package org.opendaylight.restconf.openapi.model;
 
 import static java.util.Objects.requireNonNull;
-import static javax.ws.rs.core.Response.Status.OK;
 
 import com.fasterxml.jackson.core.JsonGenerator;
 import java.io.IOException;
 import java.util.List;
-import javax.ws.rs.HttpMethod;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
@@ -80,17 +78,13 @@ public abstract sealed class OperationEntity extends OpenApiEntity permits Delet
 
     @Override
     public void generate(@NonNull JsonGenerator generator) throws IOException {
-        if (schema() == null) {
-            generateGetRoot(generator, moduleName());
-        } else {
-            generator.writeObjectFieldStart(operation());
-            generateBasics(generator);
-            generateRequestBody(generator);
-            generateResponses(generator);
-            generateTags(generator);
-            generateParams(generator);
-            generator.writeEndObject();
-        }
+        generator.writeObjectFieldStart(operation());
+        generateBasics(generator);
+        generateRequestBody(generator);
+        generateResponses(generator);
+        generateTags(generator);
+        generateParams(generator);
+        generator.writeEndObject();
     }
 
     public void generateBasics(@NonNull JsonGenerator generator) throws IOException {
@@ -151,26 +145,4 @@ public abstract sealed class OperationEntity extends OpenApiEntity permits Delet
         generator.writeEndObject();
         generator.writeEndObject();
     }
-
-    void generateGetRoot(final @NonNull JsonGenerator generator, final @NonNull String resourceType)
-            throws IOException {
-        generator.writeObjectFieldStart("get");
-        if (resourceType.equals("data")) {
-            generator.writeStringField(DESCRIPTION, "Queries the config (startup) datastore on the mounted hosted.");
-        } else if (resourceType.equals("operations")) {
-            generator.writeStringField(DESCRIPTION,
-                "Queries the available operations (RPC calls) on the mounted hosted.");
-        }
-        generator.writeObjectFieldStart(RESPONSES);
-        generator.writeObjectFieldStart(String.valueOf(OK.getStatusCode()));
-        generator.writeStringField(DESCRIPTION, "OK");
-        generator.writeEndObject(); //end of 200
-        generator.writeEndObject(); // end of responses
-        final var summary = HttpMethod.GET + " - " + deviceName() + " - datastore - " + resourceType;
-        generator.writeStringField(SUMMARY, summary);
-        generator.writeArrayFieldStart("tags");
-        generator.writeString(deviceName + " GET root");
-        generator.writeEndArray(); //end of tags
-        generator.writeEndObject(); //end of get
-    }
 }