From c9d60fc259ea453a91e0b62a8eb73b6a5875ae01 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Wed, 11 Aug 2021 12:33:03 +0200 Subject: [PATCH 1/7] Exports freeFormModels as a regular model --- .../oss/codegen/BoatStaticDocsGenerator.java | 16 ++++++++++++++++ .../main/templates/boat-marina/api.js.handlebars | 5 +++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java index e1ee165e2..8c59db04a 100644 --- a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java +++ b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java @@ -20,6 +20,7 @@ import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenParameter; import org.openapitools.codegen.CodegenResponse; +import org.openapitools.codegen.utils.ModelUtils; import java.io.IOException; import java.nio.charset.Charset; @@ -71,6 +72,15 @@ public void preprocessOpenAPI(OpenAPI openAPI) { .collect(Collectors.toList())); } + // We need freeForm objects as models as well, since they are being referenced with $ref + if (openAPI.getComponents().getSchemas() != null) { + Set imports = new HashSet<>(); + additionalProperties.put("freeFormModels", openAPI.getComponents().getSchemas().entrySet().stream() + .filter(freeFormModel -> ModelUtils.isFreeFormObject(freeFormModel.getValue())) + .map(freeFormModel -> mapFreeFormObject(imports, freeFormModel)) + .collect(Collectors.toList())); + } + if (openAPI.getPaths() != null) // Ensure single tags for operations openAPI.getPaths().forEach((path, pathItem) -> @@ -96,6 +106,12 @@ private BoatExample mapComponentExample(Set imports, Map.Entry imports, Map.Entry freeFormObject) { + String name = freeFormObject.getKey(); + Schema schema = freeFormObject.getValue(); + return fromModel(name, schema); + } + private CodegenParameter mapComponentParameter(Set imports, java.util.Map.Entry nameParameter) { Parameter parameter = nameParameter.getValue(); return fromParameter(parameter, imports); diff --git a/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars b/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars index 1b121a32a..32c92cd7e 100644 --- a/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars +++ b/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars @@ -47,12 +47,13 @@ const data = { data["parameters"]["{{paramName}}"] = {{{jsonSchema}}}; {{/each}} +{{#each freeFormModels}} + data.models["{{name}}"] = {{{json .}}}; +{{/each}} {{#each swagger.vendorExtensions.x-shared-errors}} let err = {{{json .}}}; data["errors"][err.errorID] = err; {{/each}} - - module.exports = { data }; \ No newline at end of file From 03ed7d13d1dc6b580b278d648090f32c81bce79d Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Wed, 11 Aug 2021 12:46:54 +0200 Subject: [PATCH 2/7] Removes unused params --- .../com/backbase/oss/codegen/BoatStaticDocsGenerator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java index 8c59db04a..bf5c5ee2b 100644 --- a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java +++ b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java @@ -77,7 +77,7 @@ public void preprocessOpenAPI(OpenAPI openAPI) { Set imports = new HashSet<>(); additionalProperties.put("freeFormModels", openAPI.getComponents().getSchemas().entrySet().stream() .filter(freeFormModel -> ModelUtils.isFreeFormObject(freeFormModel.getValue())) - .map(freeFormModel -> mapFreeFormObject(imports, freeFormModel)) + .map(freeFormModel -> mapFreeFormObject(freeFormModel)) .collect(Collectors.toList())); } @@ -106,7 +106,7 @@ private BoatExample mapComponentExample(Set imports, Map.Entry imports, Map.Entry freeFormObject) { + private Object mapFreeFormObject(Map.Entry freeFormObject) { String name = freeFormObject.getKey(); Schema schema = freeFormObject.getValue(); return fromModel(name, schema); From c19c4c75da8c5481c372ec8e26a1c13f70fa8a48 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Wed, 11 Aug 2021 12:51:48 +0200 Subject: [PATCH 3/7] Removes unused params --- .../com/backbase/oss/codegen/BoatStaticDocsGenerator.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java index 8c59db04a..6cc2d8938 100644 --- a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java +++ b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java @@ -77,7 +77,7 @@ public void preprocessOpenAPI(OpenAPI openAPI) { Set imports = new HashSet<>(); additionalProperties.put("freeFormModels", openAPI.getComponents().getSchemas().entrySet().stream() .filter(freeFormModel -> ModelUtils.isFreeFormObject(freeFormModel.getValue())) - .map(freeFormModel -> mapFreeFormObject(imports, freeFormModel)) + .map(freeFormModel -> mapFreeFormObject(freeFormModel)) .collect(Collectors.toList())); } @@ -106,10 +106,9 @@ private BoatExample mapComponentExample(Set imports, Map.Entry imports, Map.Entry freeFormObject) { + private Object mapFreeFormObject(Map.Entry freeFormObject) { String name = freeFormObject.getKey(); - Schema schema = freeFormObject.getValue(); - return fromModel(name, schema); + return fromModel(name, freeFormObject.getValue()); } private CodegenParameter mapComponentParameter(Set imports, java.util.Map.Entry nameParameter) { From b702b274c89830d9ee44afcd85f49dd0fba58132 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Wed, 11 Aug 2021 12:55:47 +0200 Subject: [PATCH 4/7] Removes unused parameters --- .../com/backbase/oss/codegen/BoatStaticDocsGenerator.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java index 6cc2d8938..f44fa0d2e 100644 --- a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java +++ b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java @@ -66,15 +66,13 @@ public void preprocessOpenAPI(OpenAPI openAPI) { } if (openAPI.getComponents().getExamples() != null) { - Set imports = new HashSet<>(); additionalProperties.put("examples", openAPI.getComponents().getExamples().entrySet().stream() - .map(exampleEntry -> mapComponentExample(imports, exampleEntry)) + .map(exampleEntry -> mapComponentExample(exampleEntry)) .collect(Collectors.toList())); } // We need freeForm objects as models as well, since they are being referenced with $ref if (openAPI.getComponents().getSchemas() != null) { - Set imports = new HashSet<>(); additionalProperties.put("freeFormModels", openAPI.getComponents().getSchemas().entrySet().stream() .filter(freeFormModel -> ModelUtils.isFreeFormObject(freeFormModel.getValue())) .map(freeFormModel -> mapFreeFormObject(freeFormModel)) @@ -100,7 +98,7 @@ private CodegenParameter mapComponentRequestBody(Set imports, java.util. return fromRequestBody(requestBody, imports, name); } - private BoatExample mapComponentExample(Set imports, Map.Entry namedExample) { + private BoatExample mapComponentExample( Map.Entry namedExample) { String key = namedExample.getKey(); Example example = namedExample.getValue(); return new BoatExample(key,"", example , false); From 73f0d44cb1740d5e45f366bdeaa560adf5b45bda Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Wed, 11 Aug 2021 12:57:54 +0200 Subject: [PATCH 5/7] Replace with method reference --- .../com/backbase/oss/codegen/BoatStaticDocsGenerator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java index f44fa0d2e..6e5903b94 100644 --- a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java +++ b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java @@ -67,7 +67,7 @@ public void preprocessOpenAPI(OpenAPI openAPI) { if (openAPI.getComponents().getExamples() != null) { additionalProperties.put("examples", openAPI.getComponents().getExamples().entrySet().stream() - .map(exampleEntry -> mapComponentExample(exampleEntry)) + .map(this::mapComponentExample) .collect(Collectors.toList())); } @@ -75,7 +75,7 @@ public void preprocessOpenAPI(OpenAPI openAPI) { if (openAPI.getComponents().getSchemas() != null) { additionalProperties.put("freeFormModels", openAPI.getComponents().getSchemas().entrySet().stream() .filter(freeFormModel -> ModelUtils.isFreeFormObject(freeFormModel.getValue())) - .map(freeFormModel -> mapFreeFormObject(freeFormModel)) + .map(this::mapFreeFormObject) .collect(Collectors.toList())); } From 93e584ee17617fed6ec232607bf5649e0a29bfa1 Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Wed, 11 Aug 2021 13:15:52 +0200 Subject: [PATCH 6/7] supress sonar error --- .../java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java index 6e5903b94..7584cd0a6 100644 --- a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java +++ b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java @@ -104,7 +104,7 @@ private BoatExample mapComponentExample( Map.Entry namedExample return new BoatExample(key,"", example , false); } - private Object mapFreeFormObject(Map.Entry freeFormObject) { + private Object mapFreeFormObject(Map.Entry freeFormObject) {//NOSONAR String name = freeFormObject.getKey(); return fromModel(name, freeFormObject.getValue()); } From b76ff9888363f02ad3c0a3efa5bc7c37c69de6cd Mon Sep 17 00:00:00 2001 From: Nicolas Torres Date: Wed, 11 Aug 2021 14:03:26 +0200 Subject: [PATCH 7/7] Tests presence of examples and planObjects --- .../oss/codegen/marina/BoatMarinaTest.java | 8 +++-- .../openapi-with-json.yaml | 33 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java b/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java index 0da0acccf..682f51b63 100644 --- a/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java +++ b/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java @@ -2,7 +2,6 @@ import com.backbase.oss.boat.loader.OpenAPILoader; import com.backbase.oss.boat.loader.OpenAPILoaderException; -import com.backbase.oss.codegen.doc.BoatDocsGenerator; import io.swagger.v3.oas.models.OpenAPI; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -42,6 +41,11 @@ void testGenerateDocs() throws IOException { File index = new File("target/marina-docs/api.js"); String generated = String.join(" ", Files.readAllLines(Paths.get(index.getPath()))); assertTrue(generated.startsWith("/**")); + assertTrue(generated.contains("Simple API overview")); + assertTrue(generated.contains("appDescription: \"No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\",")); + assertTrue(generated.contains("data.examples[\"BadRequestError\"]")); + assertTrue(generated.contains("data.models[\"ParameterMap\"]")); + } @@ -53,7 +57,7 @@ protected File getFile(String name) { } - private static void generateDocs(File spec) { + private static void generateDocs(File spec) throws IOException { log.info("Generate docs for: {}", spec); OpenAPI openAPI = null; try { diff --git a/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml b/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml index de066b028..0b1572413 100644 --- a/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml +++ b/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml @@ -2,7 +2,38 @@ openapi: "3.0.0" info: title: Simple API overview version: 2.0.0 +components: + schemas: + ParameterMap: + type: object + additionalProperties: + type: object + example: + enable_payments: true + examples: + BadRequestError: + summary: BadRequestError + value: + message: Bad Request + errors: + - message: "Value Exceeded. Must be between {min} and {max}." + key: common.api.shoesize + context: + max: "50" + min: "1" paths: + /foo: + description: Some random description + get: + operationId: foo + summary: Gets a project's parameters. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ParameterMap' /: get: operationId: listVersionsv2 @@ -29,6 +60,8 @@ paths: links: - href: http://127.0.0.1:8774/v3/ rel: self + bar: + $ref: '#/components/examples/BadRequestError' '300': description: |-