Replace Optional range with separate methods 36/106236/15
authorŠimon Ukuš <simon.ukus@pantheon.tech>
Tue, 30 May 2023 07:09:25 +0000 (09:09 +0200)
committerIvan Hrasko <ivan.hrasko@pantheon.tech>
Wed, 12 Jul 2023 10:49:28 +0000 (12:49 +0200)
The logic was divided into two methods: one for range-based
doc creation and the other for non-range doc creation,
eliminating the use of Optional<Range<Integer>>.

JIRA: NETCONF-998
Change-Id: I521813b87e08d28b6d1071e006b2b2f85f438437
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/impl/OpenApiServiceImpl.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/mountpoints/MountPointOpenApi.java
restconf/restconf-openapi/src/test/java/org/opendaylight/restconf/openapi/mountpoints/MountPointOpenApiTest.java

index 16068315408c301d4a712d8de072b20f383f4dad..0993309905a076317808b2a49bda288ca6e22841 100644 (file)
@@ -90,11 +90,30 @@ 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, Optional.empty(), schemaContext, Optional.empty(), "", definitionNames)
-            .build();
+        return getAllModulesDoc(uriInfo, schemaContext, Optional.empty(), "", definitionNames).build();
     }
 
-    public OpenApiObject.Builder getAllModulesDoc(final UriInfo uriInfo, final Optional<Range<Integer>> range,
+    public OpenApiObject.Builder getAllModulesDoc(final UriInfo uriInfo, final EffectiveModelContext schemaContext,
+            final Optional<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 = name + " modules of RESTCONF";
+        final OpenApiObject.Builder docBuilder = createOpenApiObjectBuilder(schema, host, BASE_PATH, title);
+        docBuilder.paths(new HashMap<>());
+
+        final SortedSet<Module> sortedModules = getSortedModules(schemaContext);
+        fillDoc(docBuilder, sortedModules, schemaContext, context, deviceName, definitionNames);
+
+        // FIXME rework callers logic to make possible to return OpenApiObject from here
+        return docBuilder;
+    }
+
+    public OpenApiObject.Builder getAllModulesDoc(final UriInfo uriInfo, final Range<Integer> range,
             final EffectiveModelContext schemaContext, final Optional<String> deviceName, final String context,
             final DefinitionNames definitionNames) {
         final String schema = createSchemaFromUriInfo(uriInfo);
@@ -108,24 +127,18 @@ public abstract class BaseYangOpenApiGenerator {
         final OpenApiObject.Builder docBuilder = createOpenApiObjectBuilder(schema, host, BASE_PATH, title);
         docBuilder.paths(new HashMap<>());
 
-        fillDoc(docBuilder, range, schemaContext, context, deviceName, definitionNames);
+        final SortedSet<Module> sortedModules = getSortedModules(schemaContext);
+        final Set<Module> filteredModules = filterByRange(sortedModules, range);
+        fillDoc(docBuilder, filteredModules, schemaContext, context, deviceName, definitionNames);
 
         // FIXME rework callers logic to make possible to return OpenApiObject from here
         return docBuilder;
     }
 
-    public void fillDoc(final OpenApiObject.Builder docBuilder, final Optional<Range<Integer>> range,
+    public void fillDoc(final OpenApiObject.Builder docBuilder, final Set<Module> modules,
             final EffectiveModelContext schemaContext, final String context, final Optional<String> deviceName,
             final DefinitionNames definitionNames) {
-        final SortedSet<Module> modules = getSortedModules(schemaContext);
-        final Set<Module> filteredModules;
-        if (range.isPresent()) {
-            filteredModules = filterByRange(modules, range.orElseThrow());
-        } else {
-            filteredModules = modules;
-        }
-
-        for (final Module module : filteredModules) {
+        for (final Module module : modules) {
             final String revisionString = module.getQNameModule().getRevision().map(Revision::toString).orElse(null);
 
             LOG.debug("Working on [{},{}]...", module.getName(), revisionString);
index 49291a319258a1fa94ca1831890a0ab32c33655f..d5298138484e03de015285738150d2cc4015f9b1 100644 (file)
@@ -11,7 +11,6 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.VisibleForTesting;
 import java.util.List;
-import java.util.Optional;
 import java.util.stream.Collectors;
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -120,10 +119,8 @@ public final class OpenApiServiceImpl implements OpenApiService {
     @Override
     public synchronized Response getMountDoc(final String instanceNum, final UriInfo uriInfo) {
         final String stringPageNum = uriInfo.getQueryParameters().getFirst(PAGE_NUM);
-        final Optional<Integer> pageNum = stringPageNum != null ? Optional.of(Integer.valueOf(stringPageNum))
-                : Optional.empty();
         final OpenApiObject api = mountPointOpenApiRFC8040.getMountPointApi(uriInfo,
-                Long.parseLong(instanceNum), pageNum);
+                Long.parseLong(instanceNum), stringPageNum);
         return Response.ok(api).build();
     }
 }
index 30202332530b8133a7470af1c04ca037b1d91ab3..c13ccc56896ced972e5ae37351ee0286e56fb6ec 100644 (file)
@@ -28,6 +28,7 @@ import java.util.concurrent.atomic.AtomicLong;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.dom.api.DOMMountPointListener;
 import org.opendaylight.mdsal.dom.api.DOMMountPointService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
@@ -148,11 +149,11 @@ public class MountPointOpenApi implements DOMMountPointListener, AutoCloseable {
         return openApiGenerator.getApiDeclaration(module, revision, uriInfo, context, urlPrefix);
     }
 
-    public OpenApiObject getMountPointApi(final UriInfo uriInfo, final Long id, final Optional<Integer> pageNum) {
+    public OpenApiObject getMountPointApi(final UriInfo uriInfo, final Long id, final @Nullable String strPageNum) {
         final YangInstanceIdentifier iid = getInstanceId(id);
         final EffectiveModelContext context = getSchemaContext(iid);
         final String urlPrefix = getYangMountUrl(iid);
-        final String deviceName  = extractDeviceName(iid);
+        final String deviceName = extractDeviceName(iid);
 
         if (context == null) {
             return null;
@@ -160,22 +161,24 @@ public class MountPointOpenApi implements DOMMountPointListener, AutoCloseable {
         final DefinitionNames definitionNames = new DefinitionNames();
 
         boolean includeDataStore = true;
-        Optional<Range<Integer>> range = Optional.empty();
 
-        if (pageNum.isPresent()) {
-            final int pageNumValue = pageNum.orElseThrow();
-            final int end = DEFAULT_PAGESIZE * pageNumValue - 1;
+        final OpenApiObject.Builder openApiObjectBuilder;
+        if (strPageNum != null) {
+            final int pageNum = Integer.parseInt(strPageNum);
+            final int end = DEFAULT_PAGESIZE * pageNum - 1;
             int start = end - DEFAULT_PAGESIZE;
-            if (pageNumValue == 1) {
+            if (pageNum == 1) {
                 start++;
             } else {
                 includeDataStore = false;
             }
-            range = Optional.of(Range.closed(start, end));
+            openApiObjectBuilder = openApiGenerator.getAllModulesDoc(uriInfo, Range.closed(start, end), context,
+                    Optional.of(deviceName), urlPrefix, definitionNames);
+        } else {
+            openApiObjectBuilder = openApiGenerator.getAllModulesDoc(uriInfo, context, Optional.of(deviceName),
+                    urlPrefix, definitionNames);
         }
 
-        final OpenApiObject.Builder openApiObjectBuilder = openApiGenerator.getAllModulesDoc(uriInfo, range, context,
-            Optional.of(deviceName), urlPrefix, definitionNames);
         if (includeDataStore) {
             final var paths = new HashMap<>(openApiObjectBuilder.getPaths());
             paths.putAll(getDataStoreApiPaths(urlPrefix, deviceName));
index 3f1a05e9f84c8d0a22b59fcc4456da4388f8b017..e99d79c6e116a656ce9f4cc32919893ff8942424 100644 (file)
@@ -118,7 +118,7 @@ public final class MountPointOpenApiTest {
         final UriInfo mockInfo = DocGenTestHelper.createMockUriInfo(HTTP_URL);
         openApi.onMountPointCreated(INSTANCE_ID);
 
-        final OpenApiObject mountPointApi = openApi.getMountPointApi(mockInfo, 1L, Optional.empty());
+        final OpenApiObject mountPointApi = openApi.getMountPointApi(mockInfo, 1L, null);
         assertNotNull("Failed to find Datastore API", mountPointApi);
 
         final Map<String, Path> paths = mountPointApi.paths();
@@ -206,7 +206,7 @@ public final class MountPointOpenApiTest {
         final UriInfo mockInfo = DocGenTestHelper.createMockUriInfo(HTTP_URL);
         openApi.onMountPointCreated(INSTANCE_ID);
 
-        final OpenApiObject mountPointApi = openApi.getMountPointApi(mockInfo, 1L, Optional.empty());
+        final OpenApiObject mountPointApi = openApi.getMountPointApi(mockInfo, 1L, null);
         assertNotNull("Failed to find Datastore API", mountPointApi);
 
         var pathToList1 = "/rests/data/nodes/node=123/yang-ext:mount/path-params-test:cont/list1={name}";
@@ -238,7 +238,7 @@ public final class MountPointOpenApiTest {
         final var mockInfo = DocGenTestHelper.createMockUriInfo(HTTP_URL);
         openApi.onMountPointCreated(INSTANCE_ID);
 
-        final var mountPointApi = openApi.getMountPointApi(mockInfo, 1L, Optional.empty());
+        final var mountPointApi = openApi.getMountPointApi(mockInfo, 1L, null);
         assertNotNull("Failed to find Datastore API", mountPointApi);
 
         final var pathWithParameters =