Transform domain classes to Java records 71/106171/11
authorYaroslav Lastivka <yaroslav.lastivka@pantheon.tech>
Fri, 26 May 2023 11:34:49 +0000 (14:34 +0300)
committerIvan Hrasko <ivan.hrasko@pantheon.tech>
Wed, 7 Jun 2023 08:57:32 +0000 (08:57 +0000)
All domain Java classes in org.opendaylight.restconf.openapi.model
have been converted into Java records and builders have been created
in case we need to mutate them.

JIRA: NETCONF-1041
Change-Id: Ifd0cdeb07e60210af6247548694a7f415df122a1
Signed-off-by: Yaroslav Lastivka <yaroslav.lastivka@pantheon.tech>
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
17 files changed:
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/BaseYangOpenApiGenerator.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/DefinitionGenerator.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/OpenApiServiceImpl.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/Components.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/Info.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/MountPointInstance.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/OpenApiObject.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/Path.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/Schema.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/SecuritySchemes.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/Server.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/mountpoints/MountPointOpenApi.java
restconf/restconf-openapi/src/test/java/org/opendaylight/restconf/openapi/DocGenTestHelper.java
restconf/restconf-openapi/src/test/java/org/opendaylight/restconf/openapi/OpenApiTestUtils.java
restconf/restconf-openapi/src/test/java/org/opendaylight/restconf/openapi/impl/DefinitionGeneratorTest.java
restconf/restconf-openapi/src/test/java/org/opendaylight/restconf/openapi/impl/OpenApiGeneratorRFC8040Test.java
restconf/restconf-openapi/src/test/java/org/opendaylight/restconf/openapi/mountpoints/MountPointOpenApiTest.java

index a97777d6f93b3ccba1ddb27a8adc6a380a1a2a9c..58522d570373eb37d36f8e82e58b7d8ccd59fa0e 100644 (file)
@@ -94,10 +94,11 @@ 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);
+        return getAllModulesDoc(uriInfo, Optional.empty(), schemaContext, Optional.empty(), "", definitionNames)
+            .build();
     }
 
-    public OpenApiObject getAllModulesDoc(final UriInfo uriInfo, final Optional<Range<Integer>> range,
+    public OpenApiObject.Builder getAllModulesDoc(final UriInfo uriInfo, final Optional<Range<Integer>> range,
             final EffectiveModelContext schemaContext, final Optional<String> deviceName, final String context,
             final DefinitionNames definitionNames) {
         final String schema = createSchemaFromUriInfo(uriInfo);
@@ -108,15 +109,16 @@ public abstract class BaseYangOpenApiGenerator {
         }
 
         final String title = name + " modules of RESTCONF";
-        final OpenApiObject doc = createOpenApiObject(schema, host, BASE_PATH, title);
-        doc.setPaths(new HashMap<>());
+        final OpenApiObject.Builder docBuilder = createOpenApiObjectBuilder(schema, host, BASE_PATH, title);
+        docBuilder.paths(new HashMap<>());
 
-        fillDoc(doc, range, schemaContext, context, deviceName, definitionNames);
+        fillDoc(docBuilder, range, schemaContext, context, deviceName, definitionNames);
 
-        return doc;
+        // FIXME rework callers logic to make possible to return OpenApiObject from here
+        return docBuilder;
     }
 
-    public void fillDoc(final OpenApiObject doc, final Optional<Range<Integer>> range,
+    public void fillDoc(final OpenApiObject.Builder docBuilder, final Optional<Range<Integer>> range,
             final EffectiveModelContext schemaContext, final String context, final Optional<String> deviceName,
             final DefinitionNames definitionNames) {
         final SortedSet<Module> modules = getSortedModules(schemaContext);
@@ -132,7 +134,7 @@ public abstract class BaseYangOpenApiGenerator {
 
             LOG.debug("Working on [{},{}]...", module.getName(), revisionString);
 
-            getOpenApiSpec(module, context, deviceName, schemaContext, definitionNames, doc, false);
+            getOpenApiSpec(module, context, deviceName, schemaContext, definitionNames, docBuilder, false);
         }
     }
 
@@ -208,20 +210,20 @@ public abstract class BaseYangOpenApiGenerator {
 
     public OpenApiObject getOpenApiSpec(final Module module, final String schema, final String host,
             final String basePath, final String context, final EffectiveModelContext schemaContext) {
-        final OpenApiObject doc = createOpenApiObject(schema, host, basePath, module.getName());
+        final OpenApiObject.Builder docBuilder = createOpenApiObjectBuilder(schema, host, basePath, module.getName());
         final DefinitionNames definitionNames = new DefinitionNames();
-        return getOpenApiSpec(module, context, Optional.empty(), schemaContext, definitionNames, doc, true);
+        return getOpenApiSpec(module, context, Optional.empty(), schemaContext, definitionNames, docBuilder, true);
     }
 
     public OpenApiObject getOpenApiSpec(final Module module, final String context, final Optional<String> deviceName,
-            final EffectiveModelContext schemaContext, final DefinitionNames definitionNames, final OpenApiObject doc,
-            final boolean isForSingleModule) {
+            final EffectiveModelContext schemaContext, final DefinitionNames definitionNames,
+            final OpenApiObject.Builder docBuilder, final boolean isForSingleModule) {
         try {
             final Map<String, Schema> schemas = jsonConverter.convertToSchemas(module, schemaContext,
                 definitionNames, isForSingleModule);
-            doc.getComponents().getSchemas().putAll(schemas);
+            docBuilder.getComponents().schemas().putAll(schemas);
             if (LOG.isDebugEnabled()) {
-                LOG.debug("Document: {}", MAPPER.writeValueAsString(doc));
+                LOG.debug("Document: {}", MAPPER.writeValueAsString(docBuilder.build()));
             }
         } catch (final IOException e) {
             LOG.error("Exception occurred in DefinitionGenerator", e);
@@ -270,12 +272,12 @@ public abstract class BaseYangOpenApiGenerator {
         LOG.debug("Number of Paths found [{}]", paths.size());
 
         if (isForSingleModule) {
-            doc.setPaths(paths);
+            docBuilder.paths(paths);
         } else {
-            doc.getPaths().putAll(paths);
+            docBuilder.getPaths().putAll(paths);
         }
 
-        return doc;
+        return docBuilder.build();
     }
 
     private static void addRootPostLink(final Module module, final Optional<String> deviceName,
@@ -283,25 +285,24 @@ public abstract class BaseYangOpenApiGenerator {
         if (containsListOrContainer(module.getChildNodes())) {
             final String moduleName = module.getName();
             final String name = moduleName + MODULE_NAME_SUFFIX;
-            final var post = new Path();
-            post.setPost(buildPost("", name, "", moduleName, deviceName,
+            final var postBuilder = new Path.Builder();
+            postBuilder.post(buildPost("", name, "", moduleName, deviceName,
                     module.getDescription().orElse(""), pathParams));
-            paths.put(resourcePath, post);
+            paths.put(resourcePath, postBuilder.build());
         }
     }
 
-    public OpenApiObject createOpenApiObject(final String schema, final String host, final String basePath,
-                final String title) {
-        final OpenApiObject doc = new OpenApiObject();
-        doc.setOpenapi(OPEN_API_VERSION);
-        final Info info = new Info();
-        info.setTitle(title);
-        info.setVersion(API_VERSION);
-        doc.setInfo(info);
-        doc.setServers(List.of(new Server(schema + "://" + host + basePath)));
-        doc.setComponents(new Components(new HashMap<>(), new SecuritySchemes(OPEN_API_BASIC_AUTH)));
-        doc.setSecurity(SECURITY);
-        return doc;
+    public OpenApiObject.Builder createOpenApiObjectBuilder(final String schema, final String host,
+            final String basePath, final String title) {
+        final OpenApiObject.Builder docBuilder = new OpenApiObject.Builder();
+        docBuilder.openapi(OPEN_API_VERSION);
+        final Info.Builder infoBuilder = new Info.Builder();
+        infoBuilder.title(title);
+        infoBuilder.version(API_VERSION);
+        docBuilder.info(infoBuilder.build());
+        docBuilder.servers(List.of(new Server(schema + "://" + host + basePath)));
+        docBuilder.components(new Components(new HashMap<>(), new SecuritySchemes(OPEN_API_BASIC_AUTH)));
+        return docBuilder;
     }
 
     public abstract String getResourcePath(String resourceType, String context);
@@ -356,32 +357,32 @@ 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 parentName, final DefinitionNames definitionNames) {
-        final Path operations = new Path();
+        final Path.Builder operationsBuilder = new Path.Builder();
 
         final String discriminator = definitionNames.getDiscriminator(node);
         final String nodeName = node.getQName().getLocalName();
 
         final String defName = parentName + "_" + nodeName + TOP + discriminator;
         final ObjectNode get = buildGet(node, moduleName, deviceName, pathParams, defName, isConfig);
-        operations.setGet(get);
+        operationsBuilder.get(get);
 
         if (isConfig) {
             final ObjectNode put = buildPut(parentName, nodeName, discriminator, moduleName, deviceName,
                     node.getDescription().orElse(""), pathParams);
-            operations.setPut(put);
+            operationsBuilder.put(put);
 
             final ObjectNode patch = buildPatch(parentName, nodeName, moduleName, deviceName,
                     node.getDescription().orElse(""), pathParams);
-            operations.setPatch(patch);
+            operationsBuilder.patch(patch);
 
             final ObjectNode delete = buildDelete(node, moduleName, deviceName, pathParams);
-            operations.setDelete(delete);
+            operationsBuilder.delete(delete);
 
             final ObjectNode post = buildPost(parentName, nodeName, discriminator, moduleName, deviceName,
                     node.getDescription().orElse(""), pathParams);
-            operations.setPost(post);
+            operationsBuilder.post(post);
         }
-        return operations;
+        return operationsBuilder.build();
     }
 
     protected abstract ListPathBuilder newListPathBuilder();
@@ -466,9 +467,9 @@ 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 DefinitionNames definitionNames, final String resourcePath) {
-        final var path = new Path();
-        path.setPost(buildPostOperation(operDef, moduleName, deviceName, parentName, definitionNames));
-        paths.put(resourcePath, path);
+        final var pathBuilder = new Path.Builder();
+        pathBuilder.post(buildPostOperation(operDef, moduleName, deviceName, parentName, definitionNames));
+        paths.put(resourcePath, pathBuilder.build());
     }
 
     protected abstract void appendPathKeyValue(StringBuilder builder, Object value);
index 383f274cf2063e19c8d235cba4f2fcde5092bcad..d8d6cad45723b52e511e2f96ff32c19260659216 100644 (file)
@@ -167,7 +167,7 @@ public class DefinitionGenerator {
 
     private void processModule(final Module module, final Map<String, Schema> definitions,
             final DefinitionNames definitionNames, final EffectiveModelContext schemaContext) {
-        final Schema definition = new Schema();
+        final Schema.Builder definitionBuilder = new Schema.Builder();
         final ObjectNode properties = JsonNodeFactory.instance.objectNode();
         final ArrayNode required = JsonNodeFactory.instance.arrayNode();
         final String moduleName = module.getName();
@@ -214,13 +214,13 @@ public class DefinitionGenerator {
             }
             stack.exit();
         }
-        definition.setTitle(definitionName);
-        definition.setType(OBJECT_TYPE);
-        definition.setProperties(properties);
-        definition.setDescription(module.getDescription().orElse(""));
-        setRequiredIfNotEmpty(definition, required);
+        definitionBuilder.title(definitionName);
+        definitionBuilder.type(OBJECT_TYPE);
+        definitionBuilder.properties(properties);
+        definitionBuilder.description(module.getDescription().orElse(""));
+        setRequiredIfNotEmpty(definitionBuilder, required);
 
-        definitions.put(definitionName, definition);
+        definitions.put(definitionName, definitionBuilder.build());
     }
 
     private void processContainersAndLists(final Module module, final Map<String, Schema> definitions,
@@ -281,18 +281,18 @@ public class DefinitionGenerator {
         stack.enterSchemaTree(container.getQName());
         if (!container.getChildNodes().isEmpty()) {
             final String filename = parentName + "_" + operationName + (isInput ? INPUT_SUFFIX : OUTPUT_SUFFIX);
-            final Schema childSchema = new Schema();
-            processChildren(childSchema, container.getChildNodes(), parentName, definitions, definitionNames,
+            final Schema.Builder childSchemaBuilder = new Schema.Builder();
+            processChildren(childSchemaBuilder, container.getChildNodes(), parentName, definitions, definitionNames,
                     false, stack);
 
-            childSchema.setType(OBJECT_TYPE);
+            childSchemaBuilder.type(OBJECT_TYPE);
             final ObjectNode xml = JsonNodeFactory.instance.objectNode();
             xml.put(NAME_KEY, isInput ? INPUT : OUTPUT);
-            childSchema.setXml(xml);
-            childSchema.setTitle(filename);
+            childSchemaBuilder.xml(xml);
+            childSchemaBuilder.title(filename);
             final String discriminator =
                     definitionNames.pickDiscriminator(container, List.of(filename, filename + TOP));
-            definitions.put(filename + discriminator, childSchema);
+            definitions.put(filename + discriminator, childSchemaBuilder.build());
 
             processTopData(filename, discriminator, definitions, container);
         }
@@ -326,13 +326,12 @@ public class DefinitionGenerator {
             use RestDocGenUtil#resolveNodesName for creating property name
          */
         properties.set(schemaNode.getQName().getLocalName(), dataNodeProperties);
-        final Schema finalChildSchema = new Schema();
-        finalChildSchema.setType(OBJECT_TYPE);
-        finalChildSchema.setProperties(properties);
-        finalChildSchema.setTitle(topName);
+        final Schema.Builder finalChildSchemaBuilder = new Schema.Builder();
+        finalChildSchemaBuilder.type(OBJECT_TYPE);
+        finalChildSchemaBuilder.properties(properties);
+        finalChildSchemaBuilder.title(topName);
 
-
-        definitions.put(topName + discriminator, finalChildSchema);
+        definitions.put(topName + discriminator, finalChildSchemaBuilder.build());
 
         return dataNodeProperties;
     }
@@ -373,10 +372,10 @@ public class DefinitionGenerator {
             final Collection<? extends DataSchemaNode> containerChildren = dataNode.getChildNodes();
             final SchemaNode schemaNode = (SchemaNode) dataNode;
             final String localName = schemaNode.getQName().getLocalName();
-            final Schema childSchema = new Schema();
+            final Schema.Builder childSchemaBuilder = new Schema.Builder();
             final String nameAsParent = parentName + "_" + localName;
             final ObjectNode properties =
-                    processChildren(childSchema, containerChildren, parentName + "_" + localName, definitions,
+                    processChildren(childSchemaBuilder, containerChildren, parentName + "_" + localName, definitions,
                             definitionNames, isConfig, stack);
 
             final String nodeName = parentName + (isConfig ? CONFIG : "") + "_" + localName;
@@ -395,14 +394,14 @@ public class DefinitionGenerator {
                 discriminator = definitionNames.getDiscriminator(schemaNode);
             }
 
-            childSchema.setType(OBJECT_TYPE);
-            childSchema.setProperties(properties);
-            childSchema.setTitle(nodeName);
-            childSchema.setDescription(description);
+            childSchemaBuilder.type(OBJECT_TYPE);
+            childSchemaBuilder.properties(properties);
+            childSchemaBuilder.title(nodeName);
+            childSchemaBuilder.description(description);
 
             final String defName = nodeName + discriminator;
-            childSchema.setXml(buildXmlParameter(schemaNode));
-            definitions.put(defName, childSchema);
+            childSchemaBuilder.xml(buildXmlParameter(schemaNode));
+            definitions.put(defName, childSchemaBuilder.build());
 
             return processTopData(nodeName, discriminator, definitions, schemaNode);
         }
@@ -412,9 +411,10 @@ public class DefinitionGenerator {
     /**
      * Processes the nodes.
      */
-    private ObjectNode processChildren(final Schema parentNode, final Collection<? extends DataSchemaNode> nodes,
-            final String parentName, final Map<String, Schema> definitions, final DefinitionNames definitionNames,
-            final boolean isConfig, final SchemaInferenceStack stack) throws IOException {
+    private ObjectNode processChildren(final Schema.Builder parentNodeBuilder,
+            final Collection<? extends DataSchemaNode> nodes, final String parentName,
+            final Map<String, Schema> definitions, final DefinitionNames definitionNames, final boolean isConfig,
+            final SchemaInferenceStack stack) throws IOException {
         final ObjectNode properties = JsonNodeFactory.instance.objectNode();
         final ArrayNode required = JsonNodeFactory.instance.arrayNode();
         for (final DataSchemaNode node : nodes) {
@@ -422,8 +422,8 @@ public class DefinitionGenerator {
                 processChildNode(node, parentName, definitions, definitionNames, isConfig, stack, properties);
             }
         }
-        parentNode.setProperties(properties);
-        setRequiredIfNotEmpty(parentNode, required);
+        parentNodeBuilder.properties(properties);
+        setRequiredIfNotEmpty(parentNodeBuilder, required);
         return properties;
     }
 
@@ -695,21 +695,21 @@ public class DefinitionGenerator {
 
     private static Schema buildIdentityObject(final IdentitySchemaNode idNode,
             final EffectiveModelContext context) {
-        final Schema identityObj = new Schema();
+        final Schema.Builder schemaBuilder = new Schema.Builder();
         final String identityName = idNode.getQName().getLocalName();
         LOG.debug("Processing Identity: {}", identityName);
 
-        identityObj.setTitle(identityName);
-        identityObj.setDescription(idNode.getDescription().orElse(""));
+        schemaBuilder.title(identityName);
+        schemaBuilder.description(idNode.getDescription().orElse(""));
 
         final Collection<? extends IdentitySchemaNode> derivedIds = context.getDerivedIdentities(idNode);
 
         final ArrayNode enumPayload = JsonNodeFactory.instance.arrayNode();
         enumPayload.add(identityName);
         populateEnumWithDerived(derivedIds, enumPayload, context);
-        identityObj.setEnum(enumPayload);
-        identityObj.setType(STRING_TYPE);
-        return identityObj;
+        schemaBuilder.schemaEnum(enumPayload);
+        schemaBuilder.type(STRING_TYPE);
+        return schemaBuilder.build();
     }
 
     private boolean isImported(final IdentityrefTypeDefinition leafTypeDef) {
@@ -886,9 +886,9 @@ public class DefinitionGenerator {
         }
     }
 
-    private static void setRequiredIfNotEmpty(final Schema node, final ArrayNode required) {
+    private static void setRequiredIfNotEmpty(final Schema.Builder nodeBuilder, final ArrayNode required) {
         if (required.size() > 0) {
-            node.setRequired(required);
+            nodeBuilder.required(required);
         }
     }
 
index 86d69ddec255a2f810010650786bc5a7807df551..49291a319258a1fa94ca1831890a0ab32c33655f 100644 (file)
@@ -104,7 +104,8 @@ public final class OpenApiServiceImpl implements OpenApiService {
     public synchronized Response getListOfMounts(final UriInfo uriInfo) {
         final List<MountPointInstance> entity = mountPointOpenApiRFC8040
                 .getInstanceIdentifiers().entrySet().stream()
-                .map(MountPointInstance::new).collect(Collectors.toList());
+                .map(entry -> new MountPointInstance(entry.getKey(), entry.getValue()))
+                .collect(Collectors.toList());
         return Response.ok(entity).build();
     }
 
index 7f0e17808f09969b328bd1c66fd1d84f6a7b6e71..9f549ef865bb329f447abd9be899fb6d54b0239d 100644 (file)
@@ -12,28 +12,5 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import java.util.Map;
 
 @JsonInclude(Include.NON_NULL)
-public class Components {
-    private Map<String, Schema> schemas;
-    private SecuritySchemes securitySchemes;
-
-    public Components(Map<String, Schema> schemas, SecuritySchemes securitySchemes) {
-        this.schemas = schemas;
-        this.securitySchemes = securitySchemes;
-    }
-
-    public Map<String, Schema> getSchemas() {
-        return schemas;
-    }
-
-    public void setSchemas(Map<String, Schema> schemas) {
-        this.schemas = schemas;
-    }
-
-    public SecuritySchemes getSecuritySchemes() {
-        return securitySchemes;
-    }
-
-    public void setSecuritySchemes(SecuritySchemes securitySchemes) {
-        this.securitySchemes = securitySchemes;
-    }
+public record Components(Map<String, Schema> schemas, SecuritySchemes securitySchemes) {
 }
index 7b698f2a3e7c2ef84acc009d22f99dbc3c736836..2f7ef61fac9642a01ffbb04189c8b452a40b55e1 100644 (file)
@@ -11,23 +11,29 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 
 @JsonInclude(Include.NON_NULL)
-public class Info {
-    private String version;
-    private String title;
+public record Info(String version, String title) {
 
-    public String getVersion() {
-        return version;
+    private Info(final Builder builder) {
+        this(builder.version, builder.title);
     }
 
-    public void setVersion(String version) {
-        this.version = version;
-    }
+    @SuppressWarnings("checkstyle:hiddenField")
+    public static class Builder {
+        private String version;
+        private String title;
 
-    public String getTitle() {
-        return title;
-    }
+        public Builder version(final String version) {
+            this.version = version;
+            return this;
+        }
+
+        public Builder title(final String title) {
+            this.title = title;
+            return this;
+        }
 
-    public void setTitle(String title) {
-        this.title = title;
+        public Info build() {
+            return new Info(this);
+        }
     }
 }
index c0d53b297d9833ac858073dd6a375e8b50b278f6..bab6a1299538d00d9bab57eaf5ab0863efd51485 100644 (file)
@@ -9,24 +9,7 @@ package org.opendaylight.restconf.openapi.model;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import java.util.Map;
 
 @JsonInclude(Include.NON_NULL)
-public class MountPointInstance {
-    private final String instance;
-    private final Long id;
-
-    public MountPointInstance(Map.Entry<String, Long> entry) {
-        this.instance = entry.getKey();
-        this.id = entry.getValue();
-    }
-
-    public String getInstance() {
-        return instance;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
+public record MountPointInstance(String instance, Long id) {
 }
index b3e6a3ef8a6df62ffdf870b15540d04eddffd01a..6c1b08d1cea89001d20dafce098dd3082f2feb48 100644 (file)
@@ -14,59 +14,64 @@ import java.util.List;
 import java.util.Map;
 
 @JsonInclude(Include.NON_NULL)
-public class OpenApiObject {
-    private String openapi;
-    private Info info;
-    private List<Server> servers;
-    private Map<String, Path> paths;
-    private Components components;
-    private ArrayNode security;
+public record OpenApiObject(String openapi, Info info, List<Server> servers, Map<String, Path> paths,
+        Components components, ArrayNode security) {
 
-    public String getOpenapi() {
-        return openapi;
+    private OpenApiObject(final Builder builder) {
+        this(builder.openapi, builder.info, builder.servers, builder.paths, builder.components, builder.security);
     }
 
-    public void setOpenapi(String openapi) {
-        this.openapi = openapi;
-    }
+    @SuppressWarnings("checkstyle:hiddenField")
+    public static class Builder {
+        private String openapi;
+        private Info info;
+        private List<Server> servers;
+        private Map<String, Path> paths;
+        private Components components;
+        private ArrayNode security;
 
-    public Info getInfo() {
-        return info;
-    }
+        public Builder openapi(final String openapi) {
+            this.openapi = openapi;
+            return this;
+        }
 
-    public void setInfo(Info info) {
-        this.info = info;
-    }
+        public Builder info(final Info info) {
+            this.info = info;
+            return this;
+        }
 
-    public List<Server> getServers() {
-        return servers;
-    }
+        public Builder servers(final List<Server> servers) {
+            this.servers = servers;
+            return this;
+        }
 
-    public void setServers(List<Server> servers) {
-        this.servers = servers;
-    }
+        public Builder paths(final Map<String, Path> paths) {
+            this.paths = paths;
+            return this;
+        }
 
-    public Map<String, Path> getPaths() {
-        return paths;
-    }
+        public Builder components(final Components components) {
+            this.components = components;
+            return this;
+        }
 
-    public void setPaths(Map<String, Path> paths) {
-        this.paths = paths;
-    }
+        public Builder security(final ArrayNode security) {
+            this.security = security;
+            return this;
+        }
 
-    public Components getComponents() {
-        return components;
-    }
+        public OpenApiObject build() {
+            return new OpenApiObject(this);
+        }
 
-    public void setComponents(Components components) {
-        this.components = components;
-    }
-
-    public ArrayNode getSecurity() {
-        return security;
-    }
+        // FIXME remove this getter
+        public Components getComponents() {
+            return this.components;
+        }
 
-    public void setSecurity(ArrayNode security) {
-        this.security = security;
+        // FIXME remove this getter
+        public Map<String, Path> getPaths() {
+            return this.paths;
+        }
     }
 }
index 47a98c2c9f192a41af6dd5b3de91c0d9a74b64f5..b10dd69a79bbaf24e2df4760d4dc9e695652ea9f 100644 (file)
@@ -13,118 +13,92 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 @JsonInclude(Include.NON_NULL)
-public class Path {
-    @JsonProperty("$ref")
-    private String ref;
-    private String summary;
-    private String description;
-    private ObjectNode get;
-    private ObjectNode put;
-    private ObjectNode post;
-    private ObjectNode delete;
-    private ObjectNode options;
-    private ObjectNode head;
-    private ObjectNode patch;
-    private ObjectNode trace;
-    private ObjectNode servers;
-
-    public Path() {
-        // just for fasterxml
-    }
-
-    public String getRef() {
-        return ref;
-    }
-
-    public void setRef(String ref) {
-        this.ref = ref;
-    }
-
-    public String getSummary() {
-        return summary;
-    }
-
-    public void setSummary(String summary) {
-        this.summary = summary;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public ObjectNode getGet() {
-        return get;
-    }
-
-    public void setGet(ObjectNode get) {
-        this.get = get;
-    }
-
-    public ObjectNode getPut() {
-        return put;
-    }
-
-    public void setPut(ObjectNode put) {
-        this.put = put;
-    }
-
-    public ObjectNode getPost() {
-        return post;
-    }
-
-    public void setPost(ObjectNode post) {
-        this.post = post;
-    }
-
-    public ObjectNode getDelete() {
-        return delete;
-    }
-
-    public void setDelete(ObjectNode delete) {
-        this.delete = delete;
-    }
-
-    public ObjectNode getOptions() {
-        return options;
-    }
-
-    public void setOptions(ObjectNode options) {
-        this.options = options;
-    }
-
-    public ObjectNode getHead() {
-        return head;
-    }
-
-    public void setHead(ObjectNode head) {
-        this.head = head;
-    }
-
-    public ObjectNode getPatch() {
-        return patch;
-    }
-
-    public void setPatch(ObjectNode patch) {
-        this.patch = patch;
-    }
-
-    public ObjectNode getTrace() {
-        return trace;
-    }
-
-    public void setTrace(ObjectNode trace) {
-        this.trace = trace;
-    }
-
-    public ObjectNode getServers() {
-        return servers;
-    }
-
-    public void setServers(ObjectNode servers) {
-        this.servers = servers;
-    }
-}
+public record Path(@JsonProperty("$ref") String ref, String summary, String description, ObjectNode get,
+        ObjectNode put, ObjectNode post, ObjectNode delete, ObjectNode options, ObjectNode head, ObjectNode patch,
+        ObjectNode trace, ObjectNode servers) {
+
+    private Path(final Builder builder) {
+        this(builder.ref, builder.summary, builder.description, builder.get, builder.put, builder.post,
+            builder.delete, builder.options, builder.head, builder.patch, builder.trace, builder.servers);
+    }
+
+    @SuppressWarnings("checkstyle:hiddenField")
+    public static class Builder {
+        private String ref;
+        private String summary;
+        private String description;
+        private ObjectNode get;
+        private ObjectNode put;
+        private ObjectNode post;
+        private ObjectNode delete;
+        private ObjectNode options;
+        private ObjectNode head;
+        private ObjectNode patch;
+        private ObjectNode trace;
+        private ObjectNode servers;
+
+        public Builder ref(final String ref) {
+            this.ref = ref;
+            return this;
+        }
+
+        public Builder summary(final String summary) {
+            this.summary = summary;
+            return this;
+        }
+
+        public Builder description(final String description) {
+            this.description = description;
+            return this;
+        }
+
+        public Builder get(final ObjectNode get) {
+            this.get = get;
+            return this;
+        }
+
+        public Builder put(final ObjectNode put) {
+            this.put = put;
+            return this;
+        }
+
+        public Builder post(final ObjectNode post) {
+            this.post = post;
+            return this;
+        }
+
+        public Builder delete(final ObjectNode delete) {
+            this.delete = delete;
+            return this;
+        }
+
+        public Builder options(final ObjectNode options) {
+            this.options = options;
+            return this;
+        }
+
+        public Builder head(final ObjectNode head) {
+            this.head = head;
+            return this;
+        }
+
+        public Builder patch(final ObjectNode patch) {
+            this.patch = patch;
+            return this;
+        }
+
+        public Builder trace(final ObjectNode trace) {
+            this.trace = trace;
+            return this;
+        }
+
+        public Builder servers(final ObjectNode servers) {
+            this.servers = servers;
+            return this;
+        }
+
+        public Path build() {
+            return new Path(this);
+        }
+    }
+}
\ No newline at end of file
index fbe982fb6060ede74a28e743b0c5e3c5d1a2ab16..f1ac8f9d2fa2b14e9a63c934d9871b4da859b069 100644 (file)
@@ -14,105 +14,86 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 @JsonInclude(value = Include.NON_NULL)
-public class Schema {
-    private ArrayNode schemaEnum;
-    private ArrayNode required;
-    private ObjectNode discriminator;
-    private ObjectNode examples;
-    private ObjectNode externalDocs;
-    private ObjectNode properties;
-    private ObjectNode xml;
-    private String description;
-    @JsonProperty("$ref")
-    private String ref;
-    private String title;
-    private String type;
-
-    public ObjectNode getDiscriminator() {
-        return discriminator;
-    }
-
-    public void setDiscriminator(ObjectNode discriminator) {
-        this.discriminator = discriminator;
-    }
-
-    public ObjectNode getXml() {
-        return xml;
-    }
-
-    public void setXml(ObjectNode xml) {
-        this.xml = xml;
-    }
-
-    public ObjectNode getExternalDocs() {
-        return externalDocs;
-    }
-
-    public void setExternalDocs(ObjectNode externalDocs) {
-        this.externalDocs = externalDocs;
-    }
-
-    public ObjectNode getExamples() {
-        return examples;
-    }
-
-    public void setExamples(ObjectNode examples) {
-        this.examples = examples;
-    }
-
-    public ObjectNode getProperties() {
-        return properties;
-    }
-
-    public void setProperties(ObjectNode properties) {
-        this.properties = properties;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public ArrayNode getRequired() {
-        return required;
-    }
-
-    public void setRequired(ArrayNode required) {
-        this.required = required;
-    }
-
-    public String getRef() {
-        return ref;
-    }
-
-    public void setRef(String ref) {
-        this.ref = ref;
-    }
-
-    public ArrayNode getEnum() {
-        return schemaEnum;
-    }
-
-    public void setEnum(ArrayNode enumKey) {
-        this.schemaEnum = enumKey;
+public record Schema(@JsonProperty("enum") ArrayNode schemaEnum, ArrayNode required, ObjectNode discriminator,
+        ObjectNode examples, ObjectNode externalDocs, ObjectNode properties, ObjectNode xml, String description,
+        @JsonProperty("$ref") String ref, String title, String type) {
+
+    private Schema(final Builder builder) {
+        this(builder.schemaEnum, builder.required, builder.discriminator, builder.examples, builder.externalDocs,
+            builder.properties, builder.xml, builder.description, builder.ref, builder.title, builder.type);
+    }
+
+    @SuppressWarnings("checkstyle:hiddenField")
+    public static class Builder {
+        private ArrayNode schemaEnum;
+        private ArrayNode required;
+        private ObjectNode discriminator;
+        private ObjectNode examples;
+        private ObjectNode externalDocs;
+        private ObjectNode properties;
+        private ObjectNode xml;
+        private String description;
+        private String ref;
+        private String title;
+        private String type;
+
+        public Builder schemaEnum(final ArrayNode schemaEnum) {
+            this.schemaEnum = schemaEnum;
+            return this;
+        }
+
+        public Builder required(final ArrayNode required) {
+            this.required = required;
+            return this;
+        }
+
+        public Builder discriminator(final ObjectNode discriminator) {
+            this.discriminator = discriminator;
+            return this;
+        }
+
+        public Builder examples(final ObjectNode examples) {
+            this.examples = examples;
+            return this;
+        }
+
+        public Builder externalDocs(final ObjectNode externalDocs) {
+            this.externalDocs = externalDocs;
+            return this;
+        }
+
+        public Builder properties(final ObjectNode properties) {
+            this.properties = properties;
+            return this;
+        }
+
+        public Builder xml(final ObjectNode xml) {
+            this.xml = xml;
+            return this;
+        }
+
+        public Builder description(final String description) {
+            this.description = description;
+            return this;
+        }
+
+        public Builder ref(final String ref) {
+            this.ref = ref;
+            return this;
+        }
+
+        public Builder title(final String title) {
+            this.title = title;
+            return this;
+        }
+
+        public Builder type(final String type) {
+            this.type = type;
+            return this;
+        }
+
+        public Schema build() {
+            return new Schema(this);
+        }
     }
 }
index 55d6cc8a072c50ea70929faa46d4f5ee88a0fdbf..56050f3e4100f4ae31fecfc3a034211bbf326563 100644 (file)
@@ -12,18 +12,5 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 @JsonInclude(Include.NON_NULL)
-public class SecuritySchemes {
-    private ObjectNode basicAuth;
-
-    public SecuritySchemes(ObjectNode basicAuth) {
-        this.basicAuth = basicAuth;
-    }
-
-    public ObjectNode getBasicAuth() {
-        return basicAuth;
-    }
-
-    public void setBasicAuth(ObjectNode basicAuth) {
-        this.basicAuth = basicAuth;
-    }
+public record SecuritySchemes(ObjectNode basicAuth) {
 }
index 8e64ab7d752f09938fafda0c06485892ef60d11d..46cb98a4db7751f90b77f1a88b6b6672b916e63a 100644 (file)
@@ -11,22 +11,5 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 
 @JsonInclude(Include.NON_NULL)
-public class Server {
-    private String url;
-
-    public Server() {
-
-    }
-
-    public Server(String url) {
-        this.url = url;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
+public record Server(String url) {
 }
index ae02b9cda7ef2cbbc66704311f872371fa5c47a2..8bebd37a17942f344bcb2a83c5b198eb19af154c 100644 (file)
@@ -177,14 +177,14 @@ public class MountPointOpenApi implements DOMMountPointListener, AutoCloseable {
             range = Optional.of(Range.closed(start, end));
         }
 
-        final OpenApiObject openApiObject = openApiGenerator.getAllModulesDoc(uriInfo, range, 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<>(openApiObject.getPaths());
+            final var paths = new HashMap<>(openApiObjectBuilder.getPaths());
             paths.putAll(getDataStoreApiPaths(urlPrefix, deviceName));
-            openApiObject.setPaths(paths);
+            openApiObjectBuilder.paths(paths);
         }
-        return openApiObject;
+        return openApiObjectBuilder.build();
     }
 
     private static String extractDeviceName(final YangInstanceIdentifier iid) {
@@ -193,23 +193,24 @@ public class MountPointOpenApi implements DOMMountPointListener, AutoCloseable {
     }
 
     private OpenApiObject generateDataStoreOpenApi(final UriInfo info, final String context, final String deviceName) {
-        final var openApiObject = openApiGenerator.createOpenApiObject(openApiGenerator.createSchemaFromUriInfo(info),
+        final var openApiObjectBuilder = openApiGenerator.createOpenApiObjectBuilder(openApiGenerator
+                        .createSchemaFromUriInfo(info),
                 openApiGenerator.createHostFromUriInfo(info), BASE_PATH, context);
-        openApiObject.setPaths(getDataStoreApiPaths(context, deviceName));
-        return openApiObject;
+        openApiObjectBuilder.paths(getDataStoreApiPaths(context, deviceName));
+        return openApiObjectBuilder.build();
     }
 
     private Map<String, Path> getDataStoreApiPaths(final String context, final String deviceName) {
-        final var data = new Path();
-        data.setGet(createGetPathItem("data",
+        final var dataBuilder = new Path.Builder();
+        dataBuilder.get(createGetPathItem("data",
                 "Queries the config (startup) datastore on the mounted hosted.", deviceName));
 
-        final var operations = new Path();
-        operations.setGet(createGetPathItem("operations",
+        final var operationsBuilder = new Path.Builder();
+        operationsBuilder.get(createGetPathItem("operations",
                 "Queries the available operations (RPC calls) on the mounted hosted.", deviceName));
 
-        return Map.of(openApiGenerator.getResourcePath("data", context), data,
-            openApiGenerator.getResourcePath("operations", context), operations);
+        return Map.of(openApiGenerator.getResourcePath("data", context), dataBuilder.build(),
+            openApiGenerator.getResourcePath("operations", context), operationsBuilder.build());
     }
 
     private static ObjectNode createGetPathItem(final String resourceType, final String description,
index 3cea58aea734030cc07f033f631339222682c6bf..720102ec23b424fba4b9eb0741e454424eee3f62 100644 (file)
@@ -47,7 +47,7 @@ public final class DocGenTestHelper {
      */
     public static void containsReferences(final Schema mainObject, final String childObject,
             final String expectedRef) {
-        final JsonNode properties = mainObject.getProperties();
+        final JsonNode properties = mainObject.properties();
         assertNotNull(properties);
 
         final JsonNode childNode = properties.get(childObject);
index fda19fd5bf0deca029a9bd6fc39955b29657ab77..6019737d868610996148dcc69032906002a1123c 100644 (file)
@@ -25,7 +25,7 @@ public final class OpenApiTestUtils {
      */
     public static List<String> getPathParameters(final Map<String, Path> paths, final String path) {
         final var params = new ArrayList<String>();
-        paths.get(path).getPost().get("parameters").elements()
+        paths.get(path).post().get("parameters").elements()
             .forEachRemaining(p -> params.add(p.get("name").asText()));
         return params;
     }
index b443d2855f1aeaccc22628a3c22ec2175d6ab5f7..2f3fd96a966bc454209c5e4db65870558ee44788 100644 (file)
@@ -62,7 +62,7 @@ public final class DefinitionGeneratorTest {
         final var jsonObject = generator.convertToSchemas(module, context, new DefinitionNames(), true);
         assertNotNull(jsonObject);
 
-        var properties = jsonObject.get("strings-from-regex_test").getProperties();
+        var properties = jsonObject.get("strings-from-regex_test").properties();
         assertEquals("00:00:00:00:00:00", properties.get("mac-address").get("default").asText());
         assertEquals("0000-00-00T00:00:00Z", properties.get("login-date-time").get("default").asText());
         assertEquals("0.0.0.0", properties.get("ipv4-address").get("default").asText());
index c51ea4dfdbd32db8a8557fd410b46fd6850cebf1..458c77c1a86f6bc3a520b30a243c4e65d0d53267 100644 (file)
@@ -67,7 +67,7 @@ public final class OpenApiGeneratorRFC8040Test {
             "/rests/operations/toaster2:make-toast",
             "/rests/operations/toaster2:cancel-toast",
             "/rests/operations/toaster2:restock-toaster"),
-            doc.getPaths().keySet());
+            doc.paths().keySet());
     }
 
     /**
@@ -85,12 +85,12 @@ public final class OpenApiGeneratorRFC8040Test {
         final OpenApiObject doc = generator.getOpenApiSpec(module, "http", "localhost:8181", "/", "", context);
 
         for (final String path : configPaths) {
-            final Path node = doc.getPaths().get(path);
-            assertNotNull(node.getGet());
-            assertNotNull(node.getPut());
-            assertNotNull(node.getDelete());
-            assertNotNull(node.getPost());
-            assertNotNull(node.getPatch());
+            final Path node = doc.paths().get(path);
+            assertNotNull(node.get());
+            assertNotNull(node.put());
+            assertNotNull(node.delete());
+            assertNotNull(node.post());
+            assertNotNull(node.patch());
         }
     }
 
@@ -102,7 +102,7 @@ public final class OpenApiGeneratorRFC8040Test {
         final var module = context.findModule(TOASTER_2, Revision.of(REVISION_DATE)).orElseThrow();
         final OpenApiObject doc = generator.getOpenApiSpec(module, "http", "localhost:8181", "/", "", context);
 
-        final Map<String, Schema> schemas = doc.getComponents().getSchemas();
+        final Map<String, Schema> schemas = doc.components().schemas();
         assertNotNull(schemas);
 
         final Schema configLstTop = schemas.get("toaster2_config_lst_TOP");
@@ -158,13 +158,13 @@ public final class OpenApiGeneratorRFC8040Test {
         final OpenApiObject doc = generator.getOpenApiSpec(module, "http", "localhost:8181", "/", "", context);
         assertNotNull(doc);
 
-        final Map<String, Schema> schemas = doc.getComponents().getSchemas();
+        final Map<String, Schema> schemas = doc.components().schemas();
         final Schema inputTop = schemas.get("toaster_make-toast_input_TOP");
         assertNotNull(inputTop);
         final String testString = "{\"input\":{\"$ref\":\"#/components/schemas/toaster_make-toast_input\"}}";
-        assertEquals(testString, inputTop.getProperties().toString());
+        assertEquals(testString, inputTop.properties().toString());
         final Schema input = schemas.get("toaster_make-toast_input");
-        final JsonNode properties = input.getProperties();
+        final JsonNode properties = input.properties();
         assertTrue(properties.has("toasterDoneness"));
         assertTrue(properties.has("toasterToastType"));
     }
@@ -175,15 +175,15 @@ public final class OpenApiGeneratorRFC8040Test {
         final var doc = generator.getOpenApiSpec(module, "http", "localhost:8181", "/", "", context);
         assertNotNull(doc);
 
-        final var schemas = doc.getComponents().getSchemas();
+        final var schemas = doc.components().schemas();
         final Schema firstContainer = schemas.get("choice-test_first-container");
         assertEquals("default-value",
-                firstContainer.getProperties().get("leaf-default").get("default").asText());
-        assertFalse(firstContainer.getProperties().has("leaf-non-default"));
+                firstContainer.properties().get("leaf-default").get("default").asText());
+        assertFalse(firstContainer.properties().has("leaf-non-default"));
 
         final Schema secondContainer = schemas.get("choice-test_second-container");
-        assertTrue(secondContainer.getProperties().has("leaf-first-case"));
-        assertFalse(secondContainer.getProperties().has("leaf-second-case"));
+        assertTrue(secondContainer.properties().has("leaf-first-case"));
+        assertFalse(secondContainer.properties().has("leaf-second-case"));
     }
 
     /**
@@ -200,7 +200,7 @@ public final class OpenApiGeneratorRFC8040Test {
         final var doc = generator.getOpenApiSpec(module, "http", "localhost:8181", "/", "", context);
         assertNotNull(doc);
 
-        final var paths = doc.getPaths();
+        final var paths = doc.paths();
         assertEquals(5, paths.size());
 
         for (final var expectedPath : configPaths.entrySet()) {
@@ -209,23 +209,23 @@ public final class OpenApiGeneratorRFC8040Test {
 
             final var path = paths.get(expectedPath.getKey());
 
-            final var get = path.getGet();
+            final var get = path.get();
             assertFalse(get.isMissingNode());
             assertEquals(expectedSize + 1, get.get("parameters").size());
 
-            final var put = path.getPut();
+            final var put = path.put();
             assertFalse(put.isMissingNode());
             assertEquals(expectedSize, put.get("parameters").size());
 
-            final var delete = path.getDelete();
+            final var delete = path.delete();
             assertFalse(delete.isMissingNode());
             assertEquals(expectedSize, delete.get("parameters").size());
 
-            final var post = path.getPost();
+            final var post = path.post();
             assertFalse(post.isMissingNode());
             assertEquals(expectedSize, post.get("parameters").size());
 
-            final var patch = path.getPatch();
+            final var patch = path.patch();
             assertFalse(patch.isMissingNode());
             assertEquals(expectedSize, patch.get("parameters").size());
         }
@@ -243,24 +243,24 @@ public final class OpenApiGeneratorRFC8040Test {
         final var doc = generator.getOpenApiSpec(module, "http", "localhost:8181", "/", "", context);
 
         var pathToList1 = "/rests/data/path-params-test:cont/list1={name}";
-        assertTrue(doc.getPaths().containsKey(pathToList1));
-        assertEquals(List.of("name"), getPathParameters(doc.getPaths(), pathToList1));
+        assertTrue(doc.paths().containsKey(pathToList1));
+        assertEquals(List.of("name"), getPathParameters(doc.paths(), pathToList1));
 
         var pathToList2 = "/rests/data/path-params-test:cont/list1={name}/list2={name1}";
-        assertTrue(doc.getPaths().containsKey(pathToList2));
-        assertEquals(List.of("name", "name1"), getPathParameters(doc.getPaths(), pathToList2));
+        assertTrue(doc.paths().containsKey(pathToList2));
+        assertEquals(List.of("name", "name1"), getPathParameters(doc.paths(), pathToList2));
 
         var pathToList3 = "/rests/data/path-params-test:cont/list3={name}";
-        assertTrue(doc.getPaths().containsKey(pathToList3));
-        assertEquals(List.of("name"), getPathParameters(doc.getPaths(), pathToList3));
+        assertTrue(doc.paths().containsKey(pathToList3));
+        assertEquals(List.of("name"), getPathParameters(doc.paths(), pathToList3));
 
         var pathToList4 = "/rests/data/path-params-test:cont/list1={name}/list4={name1}";
-        assertTrue(doc.getPaths().containsKey(pathToList4));
-        assertEquals(List.of("name", "name1"), getPathParameters(doc.getPaths(), pathToList4));
+        assertTrue(doc.paths().containsKey(pathToList4));
+        assertEquals(List.of("name", "name1"), getPathParameters(doc.paths(), pathToList4));
 
         var pathToList5 = "/rests/data/path-params-test:cont/list1={name}/cont2";
-        assertTrue(doc.getPaths().containsKey(pathToList4));
-        assertEquals(List.of("name"), getPathParameters(doc.getPaths(), pathToList5));
+        assertTrue(doc.paths().containsKey(pathToList4));
+        assertEquals(List.of("name"), getPathParameters(doc.paths(), pathToList5));
     }
 
     @Test
@@ -268,17 +268,17 @@ public final class OpenApiGeneratorRFC8040Test {
         final var module = context.findModule("my-yang", Revision.of("2022-10-06")).orElseThrow();
         final var doc = generator.getOpenApiSpec(module, "http", "localhost:8181", "/", "", context);
 
-        assertEquals(Set.of("/rests/data", "/rests/data/my-yang:data"), doc.getPaths().keySet());
-        final var JsonNodeMyYangData = doc.getPaths().get("/rests/data/my-yang:data");
-        verifyRequestRef(JsonNodeMyYangData.getPost(), "#/components/schemas/my-yang_config_data",
+        assertEquals(Set.of("/rests/data", "/rests/data/my-yang:data"), doc.paths().keySet());
+        final var JsonNodeMyYangData = doc.paths().get("/rests/data/my-yang:data");
+        verifyRequestRef(JsonNodeMyYangData.post(), "#/components/schemas/my-yang_config_data",
                 "#/components/schemas/my-yang_config_data");
-        verifyRequestRef(JsonNodeMyYangData.getPut(), "#/components/schemas/my-yang_config_data_TOP",
+        verifyRequestRef(JsonNodeMyYangData.put(), "#/components/schemas/my-yang_config_data_TOP",
                 "#/components/schemas/my-yang_config_data");
-        verifyRequestRef(JsonNodeMyYangData.getGet(), "#/components/schemas/my-yang_data_TOP",
+        verifyRequestRef(JsonNodeMyYangData.get(), "#/components/schemas/my-yang_data_TOP",
                 "#/components/schemas/my-yang_data_TOP");
 
         // Test `components/schemas` objects
-        final var definitions = doc.getComponents().getSchemas();
+        final var definitions = doc.components().schemas();
         assertEquals(5, definitions.size());
         assertTrue(definitions.containsKey("my-yang_config_data"));
         assertTrue(definitions.containsKey("my-yang_config_data_TOP"));
@@ -292,58 +292,58 @@ public final class OpenApiGeneratorRFC8040Test {
         final var module = context.findModule(TOASTER_2, Revision.of(REVISION_DATE)).orElseThrow();
         final var doc = generator.getOpenApiSpec(module, "http", "localhost:8181", "/", "", context);
 
-        final var jsonNodeToaster = doc.getPaths().get("/rests/data/toaster2:toaster");
-        verifyRequestRef(jsonNodeToaster.getPost(), "#/components/schemas/toaster2_config_toaster",
+        final var jsonNodeToaster = doc.paths().get("/rests/data/toaster2:toaster");
+        verifyRequestRef(jsonNodeToaster.post(), "#/components/schemas/toaster2_config_toaster",
                 "#/components/schemas/toaster2_config_toaster");
-        verifyRequestRef(jsonNodeToaster.getPut(), "#/components/schemas/toaster2_config_toaster_TOP",
+        verifyRequestRef(jsonNodeToaster.put(), "#/components/schemas/toaster2_config_toaster_TOP",
                 "#/components/schemas/toaster2_config_toaster");
-        verifyRequestRef(jsonNodeToaster.getGet(), "#/components/schemas/toaster2_toaster_TOP",
+        verifyRequestRef(jsonNodeToaster.get(), "#/components/schemas/toaster2_toaster_TOP",
                 "#/components/schemas/toaster2_toaster_TOP");
 
-        final var jsonNodeToasterSlot = doc.getPaths().get("/rests/data/toaster2:toaster/toasterSlot={slotId}");
-        verifyRequestRef(jsonNodeToasterSlot.getPost(), "#/components/schemas/toaster2_toaster_config_toasterSlot",
+        final var jsonNodeToasterSlot = doc.paths().get("/rests/data/toaster2:toaster/toasterSlot={slotId}");
+        verifyRequestRef(jsonNodeToasterSlot.post(), "#/components/schemas/toaster2_toaster_config_toasterSlot",
                 "#/components/schemas/toaster2_toaster_config_toasterSlot");
-        verifyRequestRef(jsonNodeToasterSlot.getPut(), "#/components/schemas/toaster2_toaster_config_toasterSlot_TOP",
+        verifyRequestRef(jsonNodeToasterSlot.put(), "#/components/schemas/toaster2_toaster_config_toasterSlot_TOP",
                 "#/components/schemas/toaster2_toaster_config_toasterSlot");
-        verifyRequestRef(jsonNodeToasterSlot.getGet(), "#/components/schemas/toaster2_toaster_toasterSlot_TOP",
+        verifyRequestRef(jsonNodeToasterSlot.get(), "#/components/schemas/toaster2_toaster_toasterSlot_TOP",
                 "#/components/schemas/toaster2_toaster_toasterSlot_TOP");
 
-        final var jsonNodeSlotInfo = doc.getPaths().get(
+        final var jsonNodeSlotInfo = doc.paths().get(
                 "/rests/data/toaster2:toaster/toasterSlot={slotId}/toaster-augmented:slotInfo");
-        verifyRequestRef(jsonNodeSlotInfo.getPost(),
+        verifyRequestRef(jsonNodeSlotInfo.post(),
                 "#/components/schemas/toaster2_toaster_toasterSlot_config_slotInfo",
                 "#/components/schemas/toaster2_toaster_toasterSlot_config_slotInfo");
-        verifyRequestRef(jsonNodeSlotInfo.getPut(),
+        verifyRequestRef(jsonNodeSlotInfo.put(),
                 "#/components/schemas/toaster2_toaster_toasterSlot_config_slotInfo_TOP",
                 "#/components/schemas/toaster2_toaster_toasterSlot_config_slotInfo");
-        verifyRequestRef(jsonNodeSlotInfo.getGet(), "#/components/schemas/toaster2_toaster_toasterSlot_slotInfo_TOP",
+        verifyRequestRef(jsonNodeSlotInfo.get(), "#/components/schemas/toaster2_toaster_toasterSlot_slotInfo_TOP",
                 "#/components/schemas/toaster2_toaster_toasterSlot_slotInfo_TOP");
 
-        final var jsonNodeLst = doc.getPaths().get("/rests/data/toaster2:lst");
-        verifyRequestRef(jsonNodeLst.getPost(), "#/components/schemas/toaster2_config_lst",
+        final var jsonNodeLst = doc.paths().get("/rests/data/toaster2:lst");
+        verifyRequestRef(jsonNodeLst.post(), "#/components/schemas/toaster2_config_lst",
                 "#/components/schemas/toaster2_config_lst");
-        verifyRequestRef(jsonNodeLst.getPut(), "#/components/schemas/toaster2_config_lst_TOP",
+        verifyRequestRef(jsonNodeLst.put(), "#/components/schemas/toaster2_config_lst_TOP",
                 "#/components/schemas/toaster2_config_lst");
-        verifyRequestRef(jsonNodeLst.getGet(), "#/components/schemas/toaster2_lst_TOP",
+        verifyRequestRef(jsonNodeLst.get(), "#/components/schemas/toaster2_lst_TOP",
                 "#/components/schemas/toaster2_lst_TOP");
 
-        final var jsonNodeLst1 = doc.getPaths().get("/rests/data/toaster2:lst/lst1={key1},{key2}");
-        verifyRequestRef(jsonNodeLst1.getPost(), "#/components/schemas/toaster2_lst_config_lst1",
+        final var jsonNodeLst1 = doc.paths().get("/rests/data/toaster2:lst/lst1={key1},{key2}");
+        verifyRequestRef(jsonNodeLst1.post(), "#/components/schemas/toaster2_lst_config_lst1",
                 "#/components/schemas/toaster2_lst_config_lst1");
-        verifyRequestRef(jsonNodeLst1.getPut(), "#/components/schemas/toaster2_lst_config_lst1_TOP",
+        verifyRequestRef(jsonNodeLst1.put(), "#/components/schemas/toaster2_lst_config_lst1_TOP",
                 "#/components/schemas/toaster2_lst_config_lst1");
-        verifyRequestRef(jsonNodeLst1.getGet(), "#/components/schemas/toaster2_lst_lst1_TOP",
+        verifyRequestRef(jsonNodeLst1.get(), "#/components/schemas/toaster2_lst_lst1_TOP",
                 "#/components/schemas/toaster2_lst_lst1_TOP");
 
-        final var jsonNodeMakeToast = doc.getPaths().get("/rests/operations/toaster2:make-toast");
-        assertNull(jsonNodeMakeToast.getGet());
-        verifyRequestRef(jsonNodeMakeToast.getPost(), "#/components/schemas/toaster2_make-toast_input_TOP",
+        final var jsonNodeMakeToast = doc.paths().get("/rests/operations/toaster2:make-toast");
+        assertNull(jsonNodeMakeToast.get());
+        verifyRequestRef(jsonNodeMakeToast.post(), "#/components/schemas/toaster2_make-toast_input_TOP",
                 "#/components/schemas/toaster2_make-toast_input");
 
-        final var jsonNodeCancelToast = doc.getPaths().get("/rests/operations/toaster2:cancel-toast");
-        assertNull(jsonNodeCancelToast.getGet());
+        final var jsonNodeCancelToast = doc.paths().get("/rests/operations/toaster2:cancel-toast");
+        assertNull(jsonNodeCancelToast.get());
         // Test RPC with empty input
-        final var postContent = jsonNodeCancelToast.getPost().get("requestBody").get("content");
+        final var postContent = jsonNodeCancelToast.post().get("requestBody").get("content");
         final var jsonSchema = postContent.get("application/json").get("schema");
         assertNull(jsonSchema.get("$ref"));
         assertEquals(2, jsonSchema.size());
@@ -352,7 +352,7 @@ public final class OpenApiGeneratorRFC8040Test {
         assertEquals(2, xmlSchema.size());
 
         // Test `components/schemas` objects
-        final var definitions = doc.getComponents().getSchemas();
+        final var definitions = doc.components().schemas();
         assertEquals(44, definitions.size());
     }
 
index fdd6d404e51d2eb43b12735820db5fa80222a569..67cb14a1d5cccce471228045aa17d242c8b35cf5 100644 (file)
@@ -93,7 +93,7 @@ public final class MountPointOpenApiTest {
         final OpenApiObject mountPointApi = openApi.getMountPointApi(mockInfo, 1L, "Datastores", "-");
         assertNotNull("Failed to find Datastore API", mountPointApi);
 
-        final Map<String, Path> paths = mountPointApi.getPaths();
+        final Map<String, Path> paths = mountPointApi.paths();
         assertNotNull(paths);
 
         assertEquals("Unexpected api list size", 2, paths.size());
@@ -102,7 +102,7 @@ public final class MountPointOpenApiTest {
 
         for (final Map.Entry<String, Path> path : paths.entrySet()) {
             actualUrls.add(path.getKey());
-            final JsonNode getOperation = path.getValue().getGet();
+            final JsonNode getOperation = path.getValue().get();
             assertNotNull("Unexpected operation method on " + path, getOperation);
             assertNotNull("Expected non-null desc on " + path, getOperation.get("description"));
         }
@@ -122,7 +122,7 @@ public final class MountPointOpenApiTest {
         final OpenApiObject mountPointApi = openApi.getMountPointApi(mockInfo, 1L, Optional.empty());
         assertNotNull("Failed to find Datastore API", mountPointApi);
 
-        final Map<String, Path> paths = mountPointApi.getPaths();
+        final Map<String, Path> paths = mountPointApi.paths();
         assertNotNull(paths);
 
         assertEquals("Unexpected api list size", 38, paths.size());
@@ -134,11 +134,11 @@ public final class MountPointOpenApiTest {
         final List<JsonNode> deleteOperations = new ArrayList<>();
 
         for (final Map.Entry<String, Path> path : paths.entrySet()) {
-            Optional.ofNullable(path.getValue().getGet()).ifPresent(getOperations::add);
-            Optional.ofNullable(path.getValue().getPost()).ifPresent(postOperations::add);
-            Optional.ofNullable(path.getValue().getPut()).ifPresent(putOperations::add);
-            Optional.ofNullable(path.getValue().getPatch()).ifPresent(patchOperations::add);
-            Optional.ofNullable(path.getValue().getDelete()).ifPresent(deleteOperations::add);
+            Optional.ofNullable(path.getValue().get()).ifPresent(getOperations::add);
+            Optional.ofNullable(path.getValue().post()).ifPresent(postOperations::add);
+            Optional.ofNullable(path.getValue().put()).ifPresent(putOperations::add);
+            Optional.ofNullable(path.getValue().patch()).ifPresent(patchOperations::add);
+            Optional.ofNullable(path.getValue().delete()).ifPresent(deleteOperations::add);
         }
 
         assertEquals("Unexpected GET paths size", 30, getOperations.size());
@@ -165,7 +165,7 @@ public final class MountPointOpenApiTest {
         final var mountPointApi = openApi.getMountPointApi(mockInfo, 1L, "recursive", "2023-05-22");
         assertNotNull("Failed to find Datastore API", mountPointApi);
 
-        final var paths = mountPointApi.getPaths();
+        final var paths = mountPointApi.paths();
         assertEquals(5, paths.size());
 
         for (final var expectedPath : configPaths.entrySet()) {
@@ -174,23 +174,23 @@ public final class MountPointOpenApiTest {
 
             final var path = paths.get(expectedPath.getKey());
 
-            final var get = path.getGet();
+            final var get = path.get();
             assertFalse(get.isMissingNode());
             assertEquals(expectedSize + 1, get.get("parameters").size());
 
-            final var put = path.getPut();
+            final var put = path.put();
             assertFalse(put.isMissingNode());
             assertEquals(expectedSize, put.get("parameters").size());
 
-            final var delete = path.getDelete();
+            final var delete = path.delete();
             assertFalse(delete.isMissingNode());
             assertEquals(expectedSize, delete.get("parameters").size());
 
-            final var post = path.getPost();
+            final var post = path.post();
             assertFalse(post.isMissingNode());
             assertEquals(expectedSize, post.get("parameters").size());
 
-            final var patch = path.getPatch();
+            final var patch = path.patch();
             assertFalse(patch.isMissingNode());
             assertEquals(expectedSize, patch.get("parameters").size());
         }
@@ -211,23 +211,23 @@ public final class MountPointOpenApiTest {
         assertNotNull("Failed to find Datastore API", mountPointApi);
 
         var pathToList1 = "/rests/data/nodes/node=123/yang-ext:mount/path-params-test:cont/list1={name}";
-        assertTrue(mountPointApi.getPaths().containsKey(pathToList1));
-        assertEquals(List.of("name"), getPathParameters(mountPointApi.getPaths(), pathToList1));
+        assertTrue(mountPointApi.paths().containsKey(pathToList1));
+        assertEquals(List.of("name"), getPathParameters(mountPointApi.paths(), pathToList1));
 
         var pathToList2 = "/rests/data/nodes/node=123/yang-ext:mount/path-params-test:cont/list1={name}/list2={name1}";
-        assertTrue(mountPointApi.getPaths().containsKey(pathToList2));
-        assertEquals(List.of("name", "name1"), getPathParameters(mountPointApi.getPaths(), pathToList2));
+        assertTrue(mountPointApi.paths().containsKey(pathToList2));
+        assertEquals(List.of("name", "name1"), getPathParameters(mountPointApi.paths(), pathToList2));
 
         var pathToList3 = "/rests/data/nodes/node=123/yang-ext:mount/path-params-test:cont/list3={name}";
-        assertTrue(mountPointApi.getPaths().containsKey(pathToList3));
-        assertEquals(List.of("name"), getPathParameters(mountPointApi.getPaths(), pathToList3));
+        assertTrue(mountPointApi.paths().containsKey(pathToList3));
+        assertEquals(List.of("name"), getPathParameters(mountPointApi.paths(), pathToList3));
 
         var pathToList4 = "/rests/data/nodes/node=123/yang-ext:mount/path-params-test:cont/list1={name}/list4={name1}";
-        assertTrue(mountPointApi.getPaths().containsKey(pathToList4));
-        assertEquals(List.of("name", "name1"), getPathParameters(mountPointApi.getPaths(), pathToList4));
+        assertTrue(mountPointApi.paths().containsKey(pathToList4));
+        assertEquals(List.of("name", "name1"), getPathParameters(mountPointApi.paths(), pathToList4));
 
         var pathToList5 = "/rests/data/nodes/node=123/yang-ext:mount/path-params-test:cont/list1={name}/cont2";
-        assertTrue(mountPointApi.getPaths().containsKey(pathToList5));
-        assertEquals(List.of("name"), getPathParameters(mountPointApi.getPaths(), pathToList5));
+        assertTrue(mountPointApi.paths().containsKey(pathToList5));
+        assertEquals(List.of("name"), getPathParameters(mountPointApi.paths(), pathToList5));
     }
 }