Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Configure apiNameSuffix via plugins #12062

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions modules/openapi-generator-gradle-plugin/README.adoc
Expand Up @@ -204,6 +204,11 @@ apply plugin: 'org.openapi.generator'
|None
|Suffix that will be appended to all model names.

|apiNameSuffix
|String
|None
|Suffix that will be appended to all api names.

|instantiationTypes
|Map(String,String)
|None
Expand Down
Expand Up @@ -106,6 +106,7 @@ class OpenApiGeneratorPlugin : Plugin<Project> {
modelPackage.set(generate.modelPackage)
modelNamePrefix.set(generate.modelNamePrefix)
modelNameSuffix.set(generate.modelNameSuffix)
apiNameSuffix.set(generate.apiNameSuffix)
instantiationTypes.set(generate.instantiationTypes)
typeMappings.set(generate.typeMappings)
additionalProperties.set(generate.additionalProperties)
Expand Down
Expand Up @@ -106,6 +106,11 @@ open class OpenApiGeneratorGenerateExtension(project: Project) {
*/
val modelNameSuffix = project.objects.property<String>()

/**
* Suffix that will be appended to all api names. Default is the empty string.
*/
val apiNameSuffix = project.objects.property<String>()

/**
* Sets instantiation type mappings.
*/
Expand Down Expand Up @@ -326,6 +331,7 @@ open class OpenApiGeneratorGenerateExtension(project: Project) {
releaseNote.set("Minor update")
modelNamePrefix.set("")
modelNameSuffix.set("")
apiNameSuffix.set("")
generateModelTests.set(true)
generateModelDocumentation.set(true)
generateApiTests.set(true)
Expand Down
Expand Up @@ -168,6 +168,13 @@ open class GenerateTask : DefaultTask() {
@Input
val modelNameSuffix = project.objects.property<String>()

/**
* Suffix that will be appended to all api names. Default is the empty string.
*/
@Optional
@Input
val apiNameSuffix = project.objects.property<String>()

/**
* Sets instantiation type mappings.
*/
Expand Down Expand Up @@ -573,6 +580,10 @@ open class GenerateTask : DefaultTask() {
configurator.setModelNameSuffix(value)
}

apiNameSuffix.ifNotEmpty { value ->
configurator.setApiNameSuffix(value)
}

invokerPackage.ifNotEmpty { value ->
configurator.setInvokerPackage(value)
}
Expand Down
Expand Up @@ -68,6 +68,55 @@ class GenerateTaskDslTest : TestBase() {
"Expected a successful run, but found ${result.task(":openApiGenerate")?.outcome}")
}

@Test
fun `should apply prefix & suffix config parameters`() {
// Arrange
val projectFiles = mapOf(
"spec.yaml" to javaClass.classLoader.getResourceAsStream("specs/petstore-v3.0.yaml")
)
withProject("""
plugins {
id 'org.openapi.generator'
}
openApiGenerate {
generatorName = "java"
inputSpec = file("spec.yaml").absolutePath
outputDir = file("build/java").absolutePath
apiPackage = "org.openapitools.example.api"
invokerPackage = "org.openapitools.example.invoker"
modelPackage = "org.openapitools.example.model"
modelNamePrefix = "ModelPref"
modelNameSuffix = "Suff"
apiNameSuffix = "ApiClassSuffix"
configOptions = [
dateLibrary: "java8"
]
}
""".trimIndent(), projectFiles)

// Act
val result = GradleRunner.create()
.withProjectDir(temp)
.withArguments("openApiGenerate")
.withPluginClasspath()
.build()

// Assert
assertTrue(result.output.contains("Successfully generated code to"), "User friendly generate notice is missing.")

listOf(
"build/java/src/main/java/org/openapitools/example/model/ModelPrefPetSuff.java",
"build/java/src/main/java/org/openapitools/example/model/ModelPrefErrorSuff.java",
"build/java/src/main/java/org/openapitools/example/api/PetsApiClassSuffix.java"
).map {
val f = File(temp, it)
assertTrue(f.exists() && f.isFile, "An expected file was not generated when invoking the generation. - " + f)
}

assertEquals(TaskOutcome.SUCCESS, result.task(":openApiGenerate")?.outcome,
"Expected a successful run, but found ${result.task(":openApiGenerate")?.outcome}")
}

@Test
fun `openApiGenerate should used up-to-date instead of regenerate`() {
// Arrange
Expand Down
1 change: 1 addition & 0 deletions modules/openapi-generator-maven-plugin/README.md
Expand Up @@ -67,6 +67,7 @@ mvn clean compile
| `library` | `openapi.generator.maven.plugin.library` | library template (sub-template)
| `modelNamePrefix` | `openapi.generator.maven.plugin.modelNamePrefix` | Sets the prefix for model classes and enums
| `modelNameSuffix` | `openapi.generator.maven.plugin.modelNameSuffix` | Sets the suffix for model classes and enums
| `apiNameSuffix` | `openapi.generator.maven.plugin.apiNameSuffix` | Sets the suffix for api classes
| `ignoreFileOverride` | `openapi.generator.maven.plugin.ignoreFileOverride` | specifies the full path to a `.openapi-generator-ignore` used for pattern based overrides of generated outputs
| `httpUserAgent` | `openapi.generator.maven.plugin.httpUserAgent` | Sets custom User-Agent header value
| `removeOperationIdPrefix` | `openapi.generator.maven.plugin.removeOperationIdPrefix` | remove operationId prefix (e.g. user_getName => getName)
Expand Down
Expand Up @@ -220,6 +220,12 @@ public class CodeGenMojo extends AbstractMojo {
@Parameter(name = "modelNameSuffix", property = "openapi.generator.maven.plugin.modelNameSuffix")
private String modelNameSuffix;

/**
* Sets the suffix for api classes
*/
@Parameter(name = "apiNameSuffix", property = "openapi.generator.maven.plugin.apiNameSuffix")
private String apiNameSuffix;

/**
* Sets an optional ignoreFileOverride path
*/
Expand Down Expand Up @@ -596,6 +602,10 @@ public void execute() throws MojoExecutionException {
configurator.setModelNameSuffix(modelNameSuffix);
}

if (isNotEmpty(apiNameSuffix)) {
configurator.setApiNameSuffix(apiNameSuffix);
}

if (null != templateDirectory) {
configurator.setTemplateDir(templateDirectory.getAbsolutePath());
}
Expand Down
Expand Up @@ -46,6 +46,7 @@ public void testCommonConfiguration() throws Exception {
mojo.execute();
assertEquals("java", getVariableValueFromObject(mojo, "generatorName"));
assertEquals("jersey2", getVariableValueFromObject(mojo, "library"));
assertEquals("Suffix", getVariableValueFromObject(mojo, "apiNameSuffix"));
assertEquals("remote.org.openapitools.client.api", getVariableValueFromObject(mojo, "apiPackage"));
assertEquals("remote.org.openapitools.client.model", getVariableValueFromObject(mojo, "modelPackage"));
assertEquals("remote.org.openapitools.client", getVariableValueFromObject(mojo, "invokerPackage"));
Expand Down
Expand Up @@ -34,6 +34,7 @@
<configOptions>
<dateLibrary>joda</dateLibrary>
</configOptions>
<apiNameSuffix>Suffix</apiNameSuffix>
<library>jersey2</library>
<output>${basedir}/target/generated-sources/common-maven/remote-openapi</output>
<apiPackage>remote.org.openapitools.client.api</apiPackage>
Expand Down