diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java index d6499b352..dd4c77eed 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/CodegenConfig.java @@ -69,6 +69,8 @@ public enum ConfigName { ADDITIONAL_PROPERTIES_AS_ATTRIBUTE("additional-properties-as-attribute"), ADDITIONAL_REQUEST_ARGS("additional-request-args"), REMOVE_OPERATION_ID_PREFIX("remove-operation-id-prefix"), + REMOVE_OPERATION_ID_PREFIX_DELIMITER("remove-operation-id-prefix-delimiter"), + REMOVE_OPERATION_ID_PREFIX_COUNT("remove-operation-id-prefix-count"), BEAN_VALIDATION("use-bean-validation"); private final String name; diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java index 9be9e42dd..3eb45978f 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/SpecItemConfig.java @@ -43,6 +43,17 @@ public class SpecItemConfig extends CommonItemConfig { * Remove operation id prefix */ @ConfigItem(name = "remove-operation-id-prefix") - public Optional removeOperationIdPrefix; + public Optional removeOperationIdPrefix; + /** + * Remove operation id prefix + */ + @ConfigItem(name = "remove-operation-id-prefix-delimiter") + public Optional removeOperationIdPrefixDelimiter; + + /** + * Remove operation id prefix + */ + @ConfigItem(name = "remove-operation-id-prefix-count") + public Optional removeOperationIdPrefixCount; } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java index e7b5a84d1..143527c08 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/codegen/OpenApiGeneratorCodeGenBase.java @@ -14,6 +14,8 @@ import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.MODEL_NAME_PREFIX; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.MODEL_NAME_SUFFIX; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.REMOVE_OPERATION_ID_PREFIX; +import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.REMOVE_OPERATION_ID_PREFIX_COUNT; +import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.REMOVE_OPERATION_ID_PREFIX_DELIMITER; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.TEMPLATE_BASE_DIR; import static io.quarkiverse.openapi.generator.deployment.CodegenConfig.ConfigName.VALIDATE_SPEC; @@ -232,6 +234,12 @@ protected void generate(OpenApiGeneratorOptions options) { getRemoveOperationIdPrefix(config, openApiFilePath) .ifPresent(generator::withRemoveOperationIdPrefix); + getRemoveOperationIdPrefixDelimiter(config, openApiFilePath) + .ifPresent(generator::withRemoveOperationIdPrefixDelimiter); + + getRemoveOperationIdPrefixCount(config, openApiFilePath) + .ifPresent(generator::withRemoveOperationIdPrefixCount); + getValues(config, openApiFilePath, CodegenConfig.ConfigName.MUTINY, Boolean.class) .ifPresent(generator::withMutiny); @@ -362,6 +370,16 @@ private Optional getRemoveOperationIdPrefix(final Config config, final .getOptionalValue(getSpecConfigName(REMOVE_OPERATION_ID_PREFIX, openApiFilePath), Boolean.class); } + private Optional getRemoveOperationIdPrefixDelimiter(final Config config, final Path openApiFilePath) { + return config + .getOptionalValue(getSpecConfigName(REMOVE_OPERATION_ID_PREFIX_DELIMITER, openApiFilePath), String.class); + } + + private Optional getRemoveOperationIdPrefixCount(final Config config, final Path openApiFilePath) { + return config + .getOptionalValue(getSpecConfigName(REMOVE_OPERATION_ID_PREFIX_COUNT, openApiFilePath), Integer.class); + } + private Optional getInputBaseDirRelativeToModule(final Path sourceDir, final Config config) { return config.getOptionalValue(getGlobalConfigName(INPUT_BASE_DIR), String.class).map(baseDir -> { int srcIndex = sourceDir.toString().lastIndexOf("src"); diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index 746aca903..56ca01450 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -290,6 +290,16 @@ public OpenApiClientGeneratorWrapper withRemoveOperationIdPrefix(final Boolean r return this; } + public OpenApiClientGeneratorWrapper withRemoveOperationIdPrefixDelimiter(final String removeOperationIdPrefixDelimiter) { + this.configurator.addAdditionalProperty("removeOperationIdPrefixDelimiter", removeOperationIdPrefixDelimiter); + return this; + } + + public OpenApiClientGeneratorWrapper withRemoveOperationIdPrefixCount(final Integer removeOperationIdPrefixCount) { + this.configurator.addAdditionalProperty("removeOperationIdPrefixCount", removeOperationIdPrefixCount); + return this; + } + public OpenApiClientGeneratorWrapper withModelNamePrefix(final String modelNamePrefix) { this.configurator.setModelNamePrefix(modelNamePrefix); return this; diff --git a/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-count.yaml b/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-count.yaml new file mode 100644 index 000000000..0759f940e --- /dev/null +++ b/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-count.yaml @@ -0,0 +1,108 @@ +--- +openapi: 3.0.3 +info: + title: code-with-quarkus API + version: 1.0.0-SNAPSHOT +servers: +- url: http://localhost:8080 + description: Auto generated value +- url: http://0.0.0.0:8080 + description: Auto generated value +paths: + /users: + get: + tags: + - User Resource + description: Find All + operationId: org.acme.UserResource.findAll + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/User" + post: + tags: + - User Resource + description: Add + operationId: org.acme.UserResource.add + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + /users/{id}: + get: + tags: + - User Resource + description: Find + operationId: org.acme.UserResource.find + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + put: + tags: + - User Resource + description: Update + operationId: org.acme.UserResource.update + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "204": + description: No Content + delete: + tags: + - User Resource + description: Delete + operationId: org.acme.UserResource.delete + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "204": + description: No Content +components: + schemas: + User: + type: object + properties: + id: + format: int32 + type: integer + name: + type: string diff --git a/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-delimiter.yaml b/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-delimiter.yaml new file mode 100644 index 000000000..a6ac8abb9 --- /dev/null +++ b/client/integration-tests/remove-operationid-prefix/src/main/openapi/openapi-prefix-delimiter.yaml @@ -0,0 +1,108 @@ +--- +openapi: 3.0.3 +info: + title: code-with-quarkus API + version: 1.0.0-SNAPSHOT +servers: +- url: http://localhost:8080 + description: Auto generated value +- url: http://0.0.0.0:8080 + description: Auto generated value +paths: + /users: + get: + tags: + - User Resource + description: Find All + operationId: UserResource.findAll + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/User" + post: + tags: + - User Resource + description: Add + operationId: UserResource.add + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + /users/{id}: + get: + tags: + - User Resource + description: Find + operationId: UserResource.find + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/User" + put: + tags: + - User Resource + description: Update + operationId: UserResource.update + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + "204": + description: No Content + delete: + tags: + - User Resource + description: Delete + operationId: UserResource.delete + parameters: + - name: id + in: path + required: true + schema: + format: int32 + type: integer + responses: + "204": + description: No Content +components: + schemas: + User: + type: object + properties: + id: + format: int32 + type: integer + name: + type: string diff --git a/client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties b/client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties index cef3041dd..ccde9f8d2 100644 --- a/client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties +++ b/client/integration-tests/remove-operationid-prefix/src/main/resources/application.properties @@ -1,2 +1,10 @@ quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 + quarkus.openapi-generator.codegen.spec.openapi_remove_operation_id_prefix_yaml.remove-operation-id-prefix=true + +quarkus.openapi-generator.codegen.spec.openapi_prefix_delimiter_yaml.remove-operation-id-prefix=true +quarkus.openapi-generator.codegen.spec.openapi_prefix_delimiter_yaml.remove-operation-id-prefix-delimiter=. + +quarkus.openapi-generator.codegen.spec.openapi_prefix_count_yaml.remove-operation-id-prefix=true +quarkus.openapi-generator.codegen.spec.openapi_prefix_count_yaml.remove-operation-id-prefix-delimiter=. +quarkus.openapi-generator.codegen.spec.openapi_prefix_count_yaml.remove-operation-id-prefix-count=3 diff --git a/client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java b/client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java index 64d0b9833..e108f8791 100644 --- a/client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java +++ b/client/integration-tests/remove-operationid-prefix/src/test/java/io/quarkiverse/openapi/generator/it/RemoveOperationIdPrefixTest.java @@ -9,11 +9,55 @@ @QuarkusTest public class RemoveOperationIdPrefixTest { - String apiClassName = "org.openapi.quarkus.openapi_remove_operation_id_prefix_yaml.api.UserResourceApi"; - String modelClassName = "org.openapi.quarkus.openapi_remove_operation_id_prefix_yaml.model.User"; + @Test + void removeOperationIdPrefixTest() { + String apiClassName = "org.openapi.quarkus.openapi_remove_operation_id_prefix_yaml.api.UserResourceApi"; + String modelClassName = "org.openapi.quarkus.openapi_remove_operation_id_prefix_yaml.model.User"; + + assertThatCode(() -> Class.forName(apiClassName).getMethod("find", Integer.class)) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("findAll")) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("add", Class.forName(modelClassName))) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("update", Integer.class, Class.forName(modelClassName))) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("delete", Integer.class)) + .doesNotThrowAnyException(); + + } + + @Test + void removeOperationIdPrefixDelimiterTest() { + String apiClassName = "org.openapi.quarkus.openapi_prefix_delimiter_yaml.api.UserResourceApi"; + String modelClassName = "org.openapi.quarkus.openapi_prefix_delimiter_yaml.model.User"; + + assertThatCode(() -> Class.forName(apiClassName).getMethod("find", Integer.class)) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("findAll")) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("add", Class.forName(modelClassName))) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("update", Integer.class, Class.forName(modelClassName))) + .doesNotThrowAnyException(); + + assertThatCode(() -> Class.forName(apiClassName).getMethod("delete", Integer.class)) + .doesNotThrowAnyException(); + + } @Test - void apiIsBeingGenerated() { + void removeOperationIdPrefixCountTest() { + String apiClassName = "org.openapi.quarkus.openapi_prefix_count_yaml.api.UserResourceApi"; + String modelClassName = "org.openapi.quarkus.openapi_prefix_count_yaml.model.User"; + assertThatCode(() -> Class.forName(apiClassName).getMethod("find", Integer.class)) .doesNotThrowAnyException(); diff --git a/docs/modules/ROOT/pages/includes/getting-started.adoc b/docs/modules/ROOT/pages/includes/getting-started.adoc index 25296f58a..494c454c1 100644 --- a/docs/modules/ROOT/pages/includes/getting-started.adoc +++ b/docs/modules/ROOT/pages/includes/getting-started.adoc @@ -95,6 +95,20 @@ You can remove operationId prefix (e.g. User_findAll=> findAll). To do that, you quarkus.openapi-generator.codegen.spec.petstore_json.remove-operation-id-prefix=true ---- +Character to use as a delimiter for the prefix. Default is '_'.You can define the prefix delimiter (e.g. User.findAll=> findAll): + +[source,properties] +---- +quarkus.openapi-generator.codegen.spec.petstore_json.remove-operation-id-prefix-delimiter=. +---- + +You can define count of delimiter for the prefix (e.g. org.acme.UserResource.findAll=> findAll). Use -1 for last Default: + +[source,properties] +---- +quarkus.openapi-generator.codegen.spec.petstore_json.remove-operation-id-prefix-count=3 +---- + The same way you can add any additional annotations to the generated api files with `additional-api-type-annotations`. Given you want to include Foo and Bar annotations, you must define additional-api-type-annotations as: [source,properties]