Skip to content

Commit 0973795

Browse files
thrykolShane Perry
andauthored
Added Micronaut configuration points (#15005)
* Added ability to configure the AuthorizationFilter pattern * Added configuration for the Client annotation * Generated samples * Remove extra newline from template * Updated samples * Declarative client annotation path attribute only supported when id attribute is set * Cleaned up style of generated file --------- Co-authored-by: Shane Perry <shane.perry@acimacredit.com>
1 parent 9fa032b commit 0973795

5 files changed

Lines changed: 117 additions & 2 deletions

File tree

docs/generators/java-micronaut-client.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,13 @@ These options may be applied as additional-properties (cli) or configOptions (pl
2929
|artifactId|artifactId in generated pom.xml. This also becomes part of the generated library's filename| |openapi-micronaut-client|
3030
|artifactUrl|artifact URL in generated pom.xml| |https://github.com/openapitools/openapi-generator|
3131
|artifactVersion|artifact version in generated pom.xml. This also becomes part of the generated library's filename| |1.0.0|
32+
|authorizationFilterPattern|Configure the authorization filter pattern for the client. Generally defined when generating clients from multiple specification files| |null|
33+
|basePathSeparator|Configure the separator to use between the application name and base path when referencing the property| |-|
3234
|bigDecimalAsString|Treat BigDecimal values as Strings to avoid precision loss.| |false|
3335
|booleanGetterPrefix|Set booleanGetterPrefix| |get|
3436
|build|Specify for which build tool to generate files|<dl><dt>**gradle**</dt><dd>Gradle configuration is generated for the project</dd><dt>**all**</dt><dd>Both Gradle and Maven configurations are generated</dd><dt>**maven**</dt><dd>Maven configuration is generated for the project</dd></dl>|all|
3537
|camelCaseDollarSign|Fix camelCase when starting with $ sign. when true : $Value when false : $value| |false|
38+
|clientId|Configure the service ID for the Client| |null|
3639
|configureAuth|Configure all the authorization methods as specified in the file| |false|
3740
|containerDefaultToNull|Set containers (array, set, map) default to null| |false|
3841
|dateFormat|Specify the format pattern of date as a string| |null|

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaMicronautClientCodegen.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,20 @@
1313
public class JavaMicronautClientCodegen extends JavaMicronautAbstractCodegen {
1414

1515
public static final String OPT_CONFIGURE_AUTH = "configureAuth";
16+
public static final String OPT_CONFIGURE_AUTH_FILTER_PATTERN = "configureAuthFilterPattern";
17+
public static final String OPT_CONFIGURE_CLIENT_ID = "configureClientId";
1618
public static final String ADDITIONAL_CLIENT_TYPE_ANNOTATIONS = "additionalClientTypeAnnotations";
19+
public static final String AUTHORIZATION_FILTER_PATTERN = "authorizationFilterPattern";
20+
public static final String BASE_PATH_SEPARATOR = "basePathSeparator";
21+
public static final String CLIENT_ID = "clientId";
1722

1823
public static final String NAME = "java-micronaut-client";
1924

2025
protected boolean configureAuthorization;
2126
protected List<String> additionalClientTypeAnnotations;
27+
protected String authorizationFilterPattern;
28+
protected String basePathSeparator = "-";
29+
protected String clientId;
2230

2331
public JavaMicronautClientCodegen() {
2432
super();
@@ -33,6 +41,9 @@ public JavaMicronautClientCodegen() {
3341

3442
cliOptions.add(CliOption.newBoolean(OPT_CONFIGURE_AUTH, "Configure all the authorization methods as specified in the file", configureAuthorization));
3543
cliOptions.add(CliOption.newString(ADDITIONAL_CLIENT_TYPE_ANNOTATIONS, "Additional annotations for client type(class level annotations). List separated by semicolon(;) or new line (Linux or Windows)"));
44+
cliOptions.add(CliOption.newString(AUTHORIZATION_FILTER_PATTERN, "Configure the authorization filter pattern for the client. Generally defined when generating clients from multiple specification files"));
45+
cliOptions.add(CliOption.newString(BASE_PATH_SEPARATOR, "Configure the separator to use between the application name and base path when referencing the property").defaultValue(basePathSeparator));
46+
cliOptions.add(CliOption.newString(CLIENT_ID, "Configure the service ID for the Client"));
3647
}
3748

3849
@Override
@@ -66,6 +77,14 @@ public void processOpts() {
6677
// Write property that is present in server
6778
writePropertyBack(OPT_USE_AUTH, true);
6879

80+
writePropertyBack(OPT_CONFIGURE_AUTH_FILTER_PATTERN, false);
81+
writePropertyBack(OPT_CONFIGURE_CLIENT_ID, false);
82+
83+
if(additionalProperties.containsKey(BASE_PATH_SEPARATOR)) {
84+
basePathSeparator = additionalProperties.get(BASE_PATH_SEPARATOR).toString();
85+
}
86+
writePropertyBack(BASE_PATH_SEPARATOR, basePathSeparator);
87+
6988
final String invokerFolder = (sourceFolder + '/' + invokerPackage).replace(".", "/");
7089

7190
// Authorization files
@@ -79,6 +98,12 @@ public void processOpts() {
7998
supportingFiles.add(new SupportingFile("client/auth/configuration/ApiKeyAuthConfiguration.mustache", authConfigurationFolder, "ApiKeyAuthConfiguration.java"));
8099
supportingFiles.add(new SupportingFile("client/auth/configuration/ConfigurableAuthorization.mustache", authConfigurationFolder, "ConfigurableAuthorization.java"));
81100
supportingFiles.add(new SupportingFile("client/auth/configuration/HttpBasicAuthConfiguration.mustache", authConfigurationFolder, "HttpBasicAuthConfiguration.java"));
101+
102+
if (additionalProperties.containsKey(AUTHORIZATION_FILTER_PATTERN)) {
103+
String pattern = additionalProperties.get(AUTHORIZATION_FILTER_PATTERN).toString();
104+
this.setAuthorizationFilterPattern(pattern);
105+
additionalProperties.put(AUTHORIZATION_FILTER_PATTERN, authorizationFilterPattern);
106+
}
82107
}
83108

84109
if (additionalProperties.containsKey(ADDITIONAL_CLIENT_TYPE_ANNOTATIONS)) {
@@ -87,6 +112,18 @@ public void processOpts() {
87112
additionalProperties.put(ADDITIONAL_CLIENT_TYPE_ANNOTATIONS, additionalClientTypeAnnotations);
88113
}
89114

115+
if (additionalProperties.containsKey(CLIENT_ID)) {
116+
String id = additionalProperties.get(CLIENT_ID).toString();
117+
this.setClientId(id);
118+
additionalProperties.put(CLIENT_ID, clientId);
119+
}
120+
121+
if (additionalProperties.containsKey(BASE_PATH_SEPARATOR)) {
122+
String separator = additionalProperties.get(BASE_PATH_SEPARATOR).toString();
123+
this.setBasePathSeparator(separator);
124+
additionalProperties.put(BASE_PATH_SEPARATOR, basePathSeparator);
125+
}
126+
90127
// Api file
91128
apiTemplateFiles.clear();
92129
apiTemplateFiles.put("client/api.mustache", ".java");
@@ -109,4 +146,18 @@ public void processOpts() {
109146
public void setAdditionalClientTypeAnnotations(final List<String> additionalClientTypeAnnotations) {
110147
this.additionalClientTypeAnnotations = additionalClientTypeAnnotations;
111148
}
149+
150+
public void setAuthorizationFilterPattern(final String pattern) {
151+
writePropertyBack(OPT_CONFIGURE_AUTH_FILTER_PATTERN, true);
152+
this.authorizationFilterPattern = pattern;
153+
}
154+
155+
public void setClientId(final String id) {
156+
writePropertyBack(OPT_CONFIGURE_CLIENT_ID, true);
157+
this.clientId = id;
158+
}
159+
160+
public void setBasePathSeparator(final String separator) {
161+
this.basePathSeparator = separator;
162+
}
112163
}

modules/openapi-generator/src/main/resources/java-micronaut/client/api.mustache

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement;
4545
{{{.}}}
4646
{{/additionalClientTypeAnnotations}}
4747
{{>common/generatedAnnotation}}
48-
@Client("${{openbrace}}{{{applicationName}}}-base-path{{closebrace}}")
48+
@Client({{#configureClientId}}
49+
id = "{{clientId}}",
50+
path = {{/configureClientId}}"${{openbrace}}{{{applicationName}}}{{basePathSeparator}}base-path{{closebrace}}")
4951
public interface {{classname}} {
5052
{{#operations}}
5153
{{#operation}}

modules/openapi-generator/src/main/resources/java-micronaut/client/auth/AuthorizationFilter.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import {{javaxPackage}}.annotation.Generated;
3737

3838

3939
{{>common/generatedAnnotation}}
40-
@Filter(Filter.MATCH_ALL_PATTERN)
40+
@Filter({{#configureAuthFilterPattern}}"{{authorizationFilterPattern}}"{{/configureAuthFilterPattern}}{{^configureAuthFilterPattern}}Filter.MATCH_ALL_PATTERN{{/configureAuthFilterPattern}})
4141
public class AuthorizationFilter implements HttpClientFilter {
4242
private static final Logger LOG = LoggerFactory.getLogger(ClientCredentialsHttpClientFilter.class);
4343

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/micronaut/MicronautClientCodegenTest.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,4 +251,63 @@ public void testAdditionalClientTypeAnnotations() {
251251
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "MyAdditionalAnnotation1(1,${param1})");
252252
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "MyAdditionalAnnotation2(2,${param2})");
253253
}
254+
255+
@Test
256+
public void testDefaultAuthorizationFilterPattern() {
257+
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
258+
codegen.additionalProperties().put(JavaMicronautClientCodegen.OPT_CONFIGURE_AUTH, "true");
259+
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.SUPPORTING_FILES, CodegenConstants.APIS);
260+
261+
// Micronaut AuthorizationFilter should default to match all patterns
262+
assertFileContains(outputPath + "/src/main/java/org/openapitools/auth/AuthorizationFilter.java", "@Filter(Filter.MATCH_ALL_PATTERN)");
263+
}
264+
265+
@Test
266+
public void testAuthorizationFilterPattern() {
267+
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
268+
codegen.additionalProperties().put(JavaMicronautClientCodegen.OPT_CONFIGURE_AUTH, "true");
269+
codegen.additionalProperties().put(JavaMicronautClientCodegen.AUTHORIZATION_FILTER_PATTERN, "pet/**");
270+
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.SUPPORTING_FILES, CodegenConstants.APIS);
271+
272+
// Micronaut AuthorizationFilter should match the provided pattern
273+
assertFileContains(outputPath + "/src/main/java/org/openapitools/auth/AuthorizationFilter.java", "@Filter(\"pet/**\")");
274+
}
275+
276+
@Test
277+
public void testNoConfigureClientId() {
278+
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
279+
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.APIS);
280+
281+
// Micronaut declarative http client should not specify a Client id
282+
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "@Client(\"${openapi-micronaut-client-base-path}\")");
283+
}
284+
285+
@Test
286+
public void testConfigureClientId() {
287+
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
288+
codegen.additionalProperties().put(JavaMicronautClientCodegen.CLIENT_ID, "unit-test");
289+
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.APIS);
290+
291+
// Micronaut declarative http client should use the provided Client id
292+
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "@Client( id = \"unit-test\", path = \"${openapi-micronaut-client-base-path}\")");
293+
}
294+
295+
@Test
296+
public void testDefaultPathSeparator() {
297+
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
298+
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.APIS);
299+
300+
// Micronaut declarative http client should use the default path separator
301+
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "@Client(\"${openapi-micronaut-client-base-path}\")");
302+
}
303+
304+
@Test
305+
public void testConfigurePathSeparator() {
306+
JavaMicronautClientCodegen codegen = new JavaMicronautClientCodegen();
307+
codegen.additionalProperties().put(JavaMicronautClientCodegen.BASE_PATH_SEPARATOR, ".");
308+
String outputPath = generateFiles(codegen, PETSTORE_PATH, CodegenConstants.APIS);
309+
310+
// Micronaut declarative http client should use the provided path separator
311+
assertFileContains(outputPath + "/src/main/java/org/openapitools/api/PetApi.java", "@Client(\"${openapi-micronaut-client.base-path}\")");
312+
}
254313
}

0 commit comments

Comments
 (0)