Remove Optional for deviceName parameter 37/106237/15
authorŠimon Ukuš <simon.ukus@pantheon.tech>
Thu, 8 Jun 2023 10:57:29 +0000 (12:57 +0200)
committerIvan Hrasko <ivan.hrasko@pantheon.tech>
Wed, 12 Jul 2023 11:49:25 +0000 (13:49 +0200)
This change modifies deviceName handling by replacing
Optional with null-value logic and adding nullable annotations.

JIRA: NETCONF-998
Change-Id: I5fe3a0bb164baaaed793e2bc0da20e16146e5438
Signed-off-by: Šimon Ukuš <simon.ukus@pantheon.tech>
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/BaseYangOpenApiGenerator.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/builder/OperationBuilder.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/mountpoints/MountPointOpenApi.java

index 0993309905a076317808b2a49bda288ca6e22841..53bbcc90717d6a413d1ae6078ade0449147f02c9 100644 (file)
@@ -90,19 +90,15 @@ public abstract class BaseYangOpenApiGenerator {
     public OpenApiObject getAllModulesDoc(final UriInfo uriInfo, final DefinitionNames definitionNames) {
         final EffectiveModelContext schemaContext = schemaService.getGlobalContext();
         Preconditions.checkState(schemaContext != null);
-        return getAllModulesDoc(uriInfo, schemaContext, Optional.empty(), "", definitionNames).build();
+        return getAllModulesDoc(uriInfo, schemaContext, "Controller", "", definitionNames).build();
     }
 
     public OpenApiObject.Builder getAllModulesDoc(final UriInfo uriInfo, final EffectiveModelContext schemaContext,
-            final Optional<String> deviceName, final String context, final DefinitionNames definitionNames) {
+            final @NonNull String deviceName, final String context, final DefinitionNames definitionNames) {
         final String schema = createSchemaFromUriInfo(uriInfo);
         final String host = createHostFromUriInfo(uriInfo);
-        String name = "Controller";
-        if (deviceName.isPresent()) {
-            name = deviceName.orElseThrow();
-        }
+        final String title = deviceName + " modules of RESTCONF";
 
-        final String title = name + " modules of RESTCONF";
         final OpenApiObject.Builder docBuilder = createOpenApiObjectBuilder(schema, host, BASE_PATH, title);
         docBuilder.paths(new HashMap<>());
 
@@ -114,16 +110,12 @@ public abstract class BaseYangOpenApiGenerator {
     }
 
     public OpenApiObject.Builder getAllModulesDoc(final UriInfo uriInfo, final Range<Integer> range,
-            final EffectiveModelContext schemaContext, final Optional<String> deviceName, final String context,
+            final EffectiveModelContext schemaContext, final @NonNull String deviceName, final String context,
             final DefinitionNames definitionNames) {
         final String schema = createSchemaFromUriInfo(uriInfo);
         final String host = createHostFromUriInfo(uriInfo);
-        String name = "Controller";
-        if (deviceName.isPresent()) {
-            name = deviceName.orElseThrow();
-        }
+        final String title = deviceName + " modules of RESTCONF";
 
-        final String title = name + " modules of RESTCONF";
         final OpenApiObject.Builder docBuilder = createOpenApiObjectBuilder(schema, host, BASE_PATH, title);
         docBuilder.paths(new HashMap<>());
 
@@ -135,8 +127,8 @@ public abstract class BaseYangOpenApiGenerator {
         return docBuilder;
     }
 
-    public void fillDoc(final OpenApiObject.Builder docBuilder, final Set<Module> modules,
-            final EffectiveModelContext schemaContext, final String context, final Optional<String> deviceName,
+    private void fillDoc(final OpenApiObject.Builder docBuilder, final Set<Module> modules,
+            final EffectiveModelContext schemaContext, final String context, final String deviceName,
             final DefinitionNames definitionNames) {
         for (final Module module : modules) {
             final String revisionString = module.getQNameModule().getRevision().map(Revision::toString).orElse(null);
@@ -220,10 +212,10 @@ public abstract class BaseYangOpenApiGenerator {
             final String basePath, final String context, final EffectiveModelContext schemaContext) {
         final OpenApiObject.Builder docBuilder = createOpenApiObjectBuilder(schema, host, basePath, module.getName());
         final DefinitionNames definitionNames = new DefinitionNames();
-        return getOpenApiSpec(module, context, Optional.empty(), schemaContext, definitionNames, docBuilder, true);
+        return getOpenApiSpec(module, context, null, schemaContext, definitionNames, docBuilder, true);
     }
 
-    public OpenApiObject getOpenApiSpec(final Module module, final String context, final Optional<String> deviceName,
+    private OpenApiObject getOpenApiSpec(final Module module, final String context, final String deviceName,
             final EffectiveModelContext schemaContext, final DefinitionNames definitionNames,
             final OpenApiObject.Builder docBuilder, final boolean isForSingleModule) {
         try {
@@ -285,7 +277,7 @@ public abstract class BaseYangOpenApiGenerator {
         return docBuilder.build();
     }
 
-    private static void addRootPostLink(final Module module, final Optional<String> deviceName,
+    private static void addRootPostLink(final Module module, final String deviceName,
             final ArrayNode pathParams, final String resourcePath, final Map<String, Path> paths) {
         if (containsListOrContainer(module.getChildNodes())) {
             final String moduleName = module.getName();
@@ -310,7 +302,7 @@ public abstract class BaseYangOpenApiGenerator {
 
     public abstract String getResourcePath(String resourceType, String context);
 
-    private void addPaths(final DataSchemaNode node, final Optional<String> deviceName, final String moduleName,
+    private void addPaths(final DataSchemaNode node, final String deviceName, final String moduleName,
             final Map<String, Path> paths, final ArrayNode parentPathParams, final EffectiveModelContext schemaContext,
             final boolean isConfig, final String parentName, final DefinitionNames definitionNames,
             final String resourcePathPart, final String context) {
@@ -359,7 +351,7 @@ public abstract class BaseYangOpenApiGenerator {
     }
 
     private static Path operations(final DataSchemaNode node, final String moduleName,
-            final Optional<String> deviceName, final ArrayNode pathParams, final boolean isConfig,
+            final String deviceName, final ArrayNode pathParams, final boolean isConfig,
             final String parentName, final DefinitionNames definitionNames) {
         final Path.Builder operationsBuilder = new Path.Builder();
 
@@ -460,7 +452,7 @@ public abstract class BaseYangOpenApiGenerator {
     }
 
     private static void addOperations(final OperationDefinition operDef, final String moduleName,
-            final Optional<String> deviceName, final Map<String, Path> paths, final String parentName,
+            final String deviceName, final Map<String, Path> paths, final String parentName,
             final DefinitionNames definitionNames, final String resourcePath, final ArrayNode parentPathParams) {
         final var pathBuilder = new Path.Builder();
         pathBuilder.post(buildPostOperation(operDef, moduleName, deviceName, parentName, definitionNames,
index d37be5b2f2f31cf529b684ff0a76cf5c4c912db0..3d1c17c096c697744824c787dbe7455690c5b6e0 100644 (file)
@@ -20,6 +20,7 @@ import java.util.Optional;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.restconf.openapi.impl.DefinitionNames;
 import org.opendaylight.restconf.openapi.model.Operation;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -65,7 +66,7 @@ public final class OperationBuilder {
     }
 
     public static Operation buildPost(final String parentName, final String nodeName, final String discriminator,
-            final String moduleName, final Optional<String> deviceName, final String description,
+            final String moduleName, final @Nullable String deviceName, final String description,
             final ArrayNode pathParams) {
         final var summary = buildSummaryValue(HttpMethod.POST, moduleName, deviceName, nodeName);
         final ArrayNode tags = buildTagsValue(deviceName, moduleName);
@@ -91,7 +92,7 @@ public final class OperationBuilder {
     }
 
     public static Operation buildGet(final DataSchemaNode node, final String moduleName,
-            final Optional<String> deviceName, final ArrayNode pathParams, final String defName,
+            final @Nullable String deviceName, final ArrayNode pathParams, final String defName,
             final String defNameTop, final boolean isConfig) {
         final String description = node.getDescription().orElse("");
         final String summary = buildSummaryValue(HttpMethod.GET, moduleName, deviceName,
@@ -137,7 +138,7 @@ public final class OperationBuilder {
     }
 
     public static Operation buildPut(final String parentName, final String nodeName, final String discriminator,
-            final String moduleName, final Optional<String> deviceName, final String description,
+            final String moduleName, final @Nullable String deviceName, final String description,
             final ArrayNode pathParams) {
         final String summary = buildSummaryValue(HttpMethod.PUT, moduleName, deviceName, nodeName);
         final ArrayNode tags = buildTagsValue(deviceName, moduleName);
@@ -163,7 +164,7 @@ public final class OperationBuilder {
     }
 
     public static Operation buildPatch(final String parentName, final String nodeName, final String moduleName,
-            final Optional<String> deviceName, final String description, final ArrayNode pathParams) {
+            final @Nullable String deviceName, final String description, final ArrayNode pathParams) {
         final String summary = buildSummaryValue(HttpMethod.PATCH, moduleName, deviceName, nodeName);
         final ArrayNode tags = buildTagsValue(deviceName, moduleName);
         final ArrayNode parameters = JsonNodeFactory.instance.arrayNode().addAll(pathParams);
@@ -188,7 +189,7 @@ public final class OperationBuilder {
     }
 
     public static Operation buildDelete(final DataSchemaNode node, final String moduleName,
-            final Optional<String> deviceName, final ArrayNode pathParams) {
+            final @Nullable String deviceName, final ArrayNode pathParams) {
         final String summary = buildSummaryValue(HttpMethod.DELETE, moduleName, deviceName,
                 node.getQName().getLocalName());
         final ArrayNode tags = buildTagsValue(deviceName, moduleName);
@@ -209,7 +210,7 @@ public final class OperationBuilder {
     }
 
     public static Operation buildPostOperation(final OperationDefinition operDef, final String moduleName,
-            final Optional<String> deviceName, final String parentName, final DefinitionNames definitionNames,
+            final @Nullable String deviceName, final String parentName, final DefinitionNames definitionNames,
             final ArrayNode parentPathParameters) {
         final ArrayNode parameters = JsonNodeFactory.instance.arrayNode().addAll(parentPathParameters);
         final String operationName = operDef.getQName().getLocalName();
@@ -343,15 +344,21 @@ public final class OperationBuilder {
     }
 
     private static String buildSummaryValue(final String httpMethod, final String moduleName,
-            final Optional<String> deviceName, final String nodeName) {
-        return httpMethod + SUMMARY_SEPARATOR + deviceName.map(s -> s + SUMMARY_SEPARATOR).orElse("")
+            final String deviceName, final String nodeName) {
+        // FIXME eliminate this method
+        if (deviceName == null) {
+            return httpMethod + SUMMARY_SEPARATOR + moduleName + SUMMARY_SEPARATOR + nodeName;
+        }
+        return httpMethod + SUMMARY_SEPARATOR + deviceName + SUMMARY_SEPARATOR
                 + moduleName + SUMMARY_SEPARATOR + nodeName;
     }
 
-    public static ArrayNode buildTagsValue(final Optional<String> deviceName, final String moduleName) {
-        final ArrayNode tagsValue = JsonNodeFactory.instance.arrayNode();
-        tagsValue.add(deviceName.map(s -> "mounted " + s).orElse("controller") + " " + moduleName);
-        return tagsValue;
+    public static ArrayNode buildTagsValue(final @Nullable String deviceName, final String moduleName) {
+        // FIXME eliminate this method
+        if (deviceName == null) {
+            return JsonNodeFactory.instance.arrayNode().add("controller" + " " + moduleName);
+        }
+        return JsonNodeFactory.instance.arrayNode().add("mounted " + deviceName + " " + moduleName);
     }
 
     public static ObjectNode getTypeParentNode(final ObjectNode parameter) {
index c13ccc56896ced972e5ae37351ee0286e56fb6ec..33b7366a61ef8428763dee54b019a09016a0b300 100644 (file)
@@ -173,10 +173,10 @@ public class MountPointOpenApi implements DOMMountPointListener, AutoCloseable {
                 includeDataStore = false;
             }
             openApiObjectBuilder = openApiGenerator.getAllModulesDoc(uriInfo, Range.closed(start, end), context,
-                    Optional.of(deviceName), urlPrefix, definitionNames);
+                    deviceName, urlPrefix, definitionNames);
         } else {
-            openApiObjectBuilder = openApiGenerator.getAllModulesDoc(uriInfo, context, Optional.of(deviceName),
-                    urlPrefix, definitionNames);
+            openApiObjectBuilder = openApiGenerator.getAllModulesDoc(uriInfo, context, deviceName, urlPrefix,
+                    definitionNames);
         }
 
         if (includeDataStore) {
@@ -216,7 +216,7 @@ public class MountPointOpenApi implements DOMMountPointListener, AutoCloseable {
     private static Operation createGetPathItem(final String resourceType, final String description,
             final String deviceName) {
         final String summary = HttpMethod.GET + SUMMARY_SEPARATOR + deviceName + SUMMARY_SEPARATOR + resourceType;
-        final ArrayNode tags = buildTagsValue(Optional.of(deviceName), "GET root");
+        final ArrayNode tags = buildTagsValue(deviceName, "GET root");
         final ObjectNode okResponse = JsonNodeFactory.instance.objectNode();
         okResponse.put(DESCRIPTION_KEY, Response.Status.OK.getReasonPhrase());
         final ObjectNode responses = JsonNodeFactory.instance.objectNode();