Skip to content

Commit 14c9626

Browse files
authored
Support useBeanValidation-configOption (#50)
* Support `useBeanValidation`-configOption in Record-fields * Update pom.xml * Update pojo.mustache * Annotate fields with bean validation * Update comment in `pojo.mustache` * Support `useBeanValidation`-configOption in Record-fields * Annotate fields with bean validation * Update comment in `pojo.mustache` * Add execution for `useBeanValidation` * Format `PluginExecution.java` * Annotate boolean-fields * Add new schema for testing string constraints * Support Nullable String-fields * Execute baseline tests of `RecordWithAllConstraints` * Add tests for `@NotNull`-annotations * Add inner `Builder`-class to `GenerateField` * Remove primitive-type check * Annotate fields with `@Pattern` * Add `@Size`-annotation based on `minLength`/`maxLength` * Annotate with `@Size` when `minItems`/`maxItems` is set * Annotate `Integer`-fields with `@Min`/`@Max` * Annotate `Long`-fields with `@Min`/`@Max` * Annotate `BigDecimal`-fields with `@DecimalMin`/`@DecimalMax` * Remove prototype `.mustache`-template * Update project version 1.7.6 -> 1.8.0 * Update project version 1.7.6 -> 1.8.0 * Reset minimum package line coverage ratio to 100%
1 parent b7e9125 commit 14c9626

File tree

79 files changed

+2200
-101
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+2200
-101
lines changed

pom.xml

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>io.github.chrimle</groupId>
77
<artifactId>openapi-to-java-records-mustache-templates</artifactId>
8-
<version>1.7.6</version>
8+
<version>1.8.0</version>
99

1010
<!-- Project Information -->
1111
<name>OpenAPI to Java records :: Mustache Templates</name>
@@ -90,6 +90,7 @@
9090
<serializableModel.default>false</serializableModel.default>
9191
<generateBuilders.default>false</generateBuilders.default>
9292
<useJakartaEe.default>false</useJakartaEe.default>
93+
<useBeanValidation.default>false</useBeanValidation.default>
9394

9495
<!-- Plugin Executions -->
9596
<!-- The Plugin Execution with Standard Configurations -->
@@ -106,6 +107,8 @@
106107
<execution.generateBuilders>generateBuilders</execution.generateBuilders>
107108
<!-- The Plugin Execution with useJakartaEe=true -->
108109
<execution.useJakartaEe>useJakartaEe</execution.useJakartaEe>
110+
<!-- The Plugin Execution with useBeanValidation=true -->
111+
<execution.useBeanValidation>useBeanValidation</execution.useBeanValidation>
109112
</properties>
110113

111114

@@ -151,6 +154,12 @@
151154
<artifactId>jackson-annotations</artifactId>
152155
<version>${jackson-annotations.version}</version>
153156
</dependency>
157+
<dependency>
158+
<!-- Needed when useBeanValidation=true -->
159+
<groupId>org.hibernate.validator</groupId>
160+
<artifactId>hibernate-validator</artifactId>
161+
<version>${hibernate-validator.version}</version>
162+
</dependency>
154163
</dependencies>
155164

156165

@@ -183,6 +192,7 @@
183192
<serializableModel>${serializableModel.default}</serializableModel>
184193
<generateBuilders>${generateBuilders.default}</generateBuilders>
185194
<useJakartaEe>${useJakartaEe.default}</useJakartaEe>
195+
<useBeanValidation>${useBeanValidation.default}</useBeanValidation>
186196
</configOptions>
187197
</configuration>
188198
</execution>
@@ -208,6 +218,7 @@
208218
<serializableModel>${serializableModel.default}</serializableModel>
209219
<generateBuilders>${generateBuilders.default}</generateBuilders>
210220
<useJakartaEe>${useJakartaEe.default}</useJakartaEe>
221+
<useBeanValidation>${useBeanValidation.default}</useBeanValidation>
211222
</configOptions>
212223
</configuration>
213224
</execution>
@@ -238,6 +249,7 @@
238249
<serializableModel>${serializableModel.default}</serializableModel>
239250
<generateBuilders>${generateBuilders.default}</generateBuilders>
240251
<useJakartaEe>${useJakartaEe.default}</useJakartaEe>
252+
<useBeanValidation>${useBeanValidation.default}</useBeanValidation>
241253
</configOptions>
242254
</configuration>
243255
</execution>
@@ -264,6 +276,7 @@
264276
<serializableModel>${serializableModel.default}</serializableModel>
265277
<generateBuilders>${generateBuilders.default}</generateBuilders>
266278
<useJakartaEe>${useJakartaEe.default}</useJakartaEe>
279+
<useBeanValidation>${useBeanValidation.default}</useBeanValidation>
267280
</configOptions>
268281
</configuration>
269282
</execution>
@@ -289,6 +302,7 @@
289302
<serializableModel>true</serializableModel>
290303
<generateBuilders>${generateBuilders.default}</generateBuilders>
291304
<useJakartaEe>${useJakartaEe.default}</useJakartaEe>
305+
<useBeanValidation>${useBeanValidation.default}</useBeanValidation>
292306
</configOptions>
293307
</configuration>
294308
</execution>
@@ -314,6 +328,7 @@
314328
<serializableModel>${serializableModel.default}</serializableModel>
315329
<generateBuilders>true</generateBuilders>
316330
<useJakartaEe>${useJakartaEe.default}</useJakartaEe>
331+
<useBeanValidation>${useBeanValidation.default}</useBeanValidation>
317332
</configOptions>
318333
</configuration>
319334
</execution>
@@ -339,6 +354,33 @@
339354
<serializableModel>${serializableModel.default}</serializableModel>
340355
<generateBuilders>${generateBuilders.default}</generateBuilders>
341356
<useJakartaEe>true</useJakartaEe>
357+
<useBeanValidation>${useBeanValidation.default}</useBeanValidation>
358+
</configOptions>
359+
</configuration>
360+
</execution>
361+
<execution>
362+
<id>generate-${execution.useBeanValidation}</id>
363+
<goals>
364+
<goal>generate</goal>
365+
</goals>
366+
<configuration>
367+
<output>${output.default}</output>
368+
<modelPackage>${modelPackage.default}.${execution.useBeanValidation}</modelPackage>
369+
<generateModels>${generateModels.default}</generateModels>
370+
<generateApis>${generateApis.default}</generateApis>
371+
<generateSupportingFiles>${generateSupportingFiles.default}</generateSupportingFiles>
372+
<generateModelTests>${generateModelTests.default}</generateModelTests>
373+
<generateModelDocumentation>${generateModelDocumentation.default}</generateModelDocumentation>
374+
<inputSpec>${inputSpec.default}</inputSpec>
375+
<templateDirectory>${templateDirectory.default}</templateDirectory>
376+
<generatorName>${generatorName.default}</generatorName>
377+
<configOptions>
378+
<sourceFolder>${sourceFolder.default}</sourceFolder>
379+
<useEnumCaseInsensitive>${useEnumCaseInsensitive.default}</useEnumCaseInsensitive>
380+
<serializableModel>${serializableModel.default}</serializableModel>
381+
<generateBuilders>${generateBuilders.default}</generateBuilders>
382+
<useJakartaEe>${useJakartaEe.default}</useJakartaEe>
383+
<useBeanValidation>true</useBeanValidation>
342384
</configOptions>
343385
</configuration>
344386
</execution>

src/main/resources/api.yaml

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,86 @@ components:
141141
- ENUM1
142142
- ENUM2
143143
- ENUM3
144+
RecordWithAllConstraints:
145+
type: object
146+
description: Example of a Record which has fields with constraints
147+
required:
148+
- stringRequired
149+
- stringRequiredNullable
150+
- stringRequiredPattern
151+
properties:
152+
stringStandard:
153+
type: string
154+
stringDefault:
155+
type: string
156+
default: 'someDefaultValue'
157+
stringNullable:
158+
type: string
159+
nullable: true
160+
stringRequired:
161+
type: string
162+
stringRequiredNullable:
163+
type: string
164+
nullable: true
165+
stringRequiredPattern:
166+
type: string
167+
pattern: '^\d{3}-\d{2}-\d{4}$'
168+
stringMinLength:
169+
type: string
170+
minLength: 3
171+
stringMaxLength:
172+
type: string
173+
maxLength: 7
174+
stringMinAndMaxLength:
175+
type: string
176+
minLength: 3
177+
maxLength: 7
178+
arrayMinItems:
179+
type: array
180+
minItems: 1
181+
items:
182+
type: string
183+
arrayMaxItems:
184+
type: array
185+
maxItems: 10
186+
items:
187+
type: string
188+
arrayMinAndMaxItems:
189+
type: array
190+
minItems: 1
191+
maxItems: 10
192+
items:
193+
type: string
194+
intMinimum:
195+
type: integer
196+
minimum: 18
197+
intMaximum:
198+
type: integer
199+
maximum: 100
200+
intMinimumAndMaximum:
201+
type: integer
202+
minimum: 0
203+
maximum: 100
204+
longMinimum:
205+
type: integer
206+
format: int64
207+
minimum: 18
208+
longMaximum:
209+
type: integer
210+
format: int64
211+
maximum: 100
212+
longMinimumAndMaximum:
213+
type: integer
214+
format: int64
215+
minimum: 0
216+
maximum: 100
217+
bigDecimalMinimum:
218+
type: number
219+
minimum: 0
220+
bigDecimalMaximum:
221+
type: number
222+
maximum: 100
223+
bigDecimalMinimumAndMaximum:
224+
type: number
225+
minimum: 0
226+
maximum: 100

src/main/resources/templates/generateBuilders.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{{!
22
Source: openapi-to-java-records-mustache-templates
3-
Version: 1.7.6
3+
Version: 1.8.0
44
55
Enabled via configOptions.generateBuilders=true
66

src/main/resources/templates/javadoc.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{{!
22
Source: openapi-to-java-records-mustache-templates
3-
Version: 1.7.6
3+
Version: 1.8.0
44
55
This template is optional, and does not override an existing template.
66

src/main/resources/templates/licenseInfo.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@
1212
* openapi-to-java-records-mustache-templates. For further information,
1313
* questions, requesting features or reporting issues, please visit:
1414
* https://github.com/Chrimle/openapi-to-java-records-mustache-templates.
15-
* Generated with Version: 1.7.6
15+
* Generated with Version: 1.8.0
1616
*
1717
*/

src/main/resources/templates/modelEnum.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{{!
22
Source: openapi-to-java-records-mustache-templates
3-
Version: 1.7.6
3+
Version: 1.8.0
44
55
Required mustache templates (generation will fail without them):
66
- `deprecation.mustache`

src/main/resources/templates/pojo.mustache

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{{!
22
Source: openapi-to-java-records-mustache-templates
3-
Version: 1.7.6
3+
Version: 1.8.0
44
55
Required imports:
66
- none
@@ -10,11 +10,12 @@
1010
- `generateBuilders.mustache`
1111
- `javadoc.mustache`
1212
- `serializableModel.mustache`
13+
- `useBeanValidation.mustache`
1314
- `additionalModelTypeAnnotations.mustache` (Official)
1415
1516
}}{{>javadoc}}{{>deprecation}}{{>additionalModelTypeAnnotations}}{{!
1617
}}public record {{classname}}(
17-
{{#vars}}@{{javaxPackage}}.annotation.{{#isNullable}}Nullable{{/isNullable}}{{^isNullable}}Nonnull{{/isNullable}} {{{datatypeWithEnum}}} {{name}}{{^-last}},
18+
{{#vars}}@{{javaxPackage}}.annotation.{{#isNullable}}Nullable{{/isNullable}}{{^isNullable}}Nonnull{{/isNullable}}{{>useBeanValidation}} {{{datatypeWithEnum}}} {{name}}{{^-last}},
1819
{{/-last}}{{/vars}}{{^serializableModel}}){{/serializableModel}}{{#serializableModel}}
1920
) implements Serializable{{/serializableModel}} {
2021
{{>serializableModel}}

src/main/resources/templates/serializableModel.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{{!
22
Source: openapi-to-java-records-mustache-templates
3-
Version: 1.7.6
3+
Version: 1.8.0
44
55
Enabled via configOptions.serializableModel=true
66
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
{{!
2+
Source: openapi-to-java-records-mustache-templates
3+
Version: 1.8.0
4+
5+
Enabled via configOption.useBeanValidation=true
6+
7+
}}{{#useBeanValidation}}{{!
8+
}}{{^required}}{{!
9+
When not required, the field *may* be nullable according to openapi-generator-maven-plugin.
10+
}}{{/required}}{{!
11+
}}{{#required}}{{!
12+
}}{{#isNullable}}{{!
13+
Jakarta Bean Validation does not have constraint annotations for nullable values,
14+
as values are nullable by default.
15+
}}{{/isNullable}}{{!
16+
}}{{^isNullable}}{{!
17+
}} @NotNull{{!
18+
}}{{/isNullable}}{{!
19+
}}{{/required}}{{!
20+
}}{{#pattern}}{{!
21+
}} @Pattern(regexp = "{{{.}}}"){{!
22+
}}{{/pattern}}{{!
23+
}}{{#minLength}}{{!
24+
}}{{#maxLength}}{{!
25+
}} @Size(min = {{minLength}}, max = {{maxLength}}){{!
26+
}}{{/maxLength}}{{!
27+
}}{{/minLength}}{{!
28+
}}{{#minLength}}{{!
29+
}}{{^maxLength}}{{!
30+
}} @Size(min = {{minLength}}){{!
31+
}}{{/maxLength}}{{!
32+
}}{{/minLength}}{{!
33+
}}{{^minLength}}{{!
34+
}}{{#maxLength}}{{!
35+
}} @Size(max = {{maxLength}}){{!
36+
}}{{/maxLength}}{{!
37+
}}{{/minLength}}{{!
38+
}}{{#minItems}}{{!
39+
}}{{#maxItems}}{{!
40+
}} @Size(min = {{minItems}}, max = {{maxItems}}){{!
41+
}}{{/maxItems}}{{!
42+
}}{{/minItems}}{{!
43+
}}{{#minItems}}{{!
44+
}}{{^maxItems}}{{!
45+
}} @Size(min = {{minItems}}){{!
46+
}}{{/maxItems}}{{!
47+
}}{{/minItems}}{{!
48+
}}{{^minItems}}{{!
49+
}}{{#maxItems}}{{!
50+
}} @Size(max = {{maxItems}}){{!
51+
}}{{/maxItems}}{{!
52+
}}{{/minItems}}{{!
53+
}}{{#isInteger}}{{!
54+
}}{{#minimum}}{{!
55+
}} @Min({{.}}){{!
56+
}}{{/minimum}}{{!
57+
}}{{#maximum}}{{!
58+
}} @Max({{.}}){{!
59+
}}{{/maximum}}{{!
60+
}}{{/isInteger}}{{!
61+
}}{{#isLong}}{{!
62+
}}{{#minimum}}{{!
63+
}} @Min({{.}}L){{!
64+
}}{{/minimum}}{{!
65+
}}{{#maximum}}{{!
66+
}} @Max({{.}}L){{!
67+
}}{{/maximum}}{{!
68+
}}{{/isLong}}{{!
69+
}}{{^isInteger}}{{!
70+
}}{{^isLong}}{{!
71+
}}{{#minimum}}{{!
72+
}} @DecimalMin({{#exclusiveMinimum}}value={{/exclusiveMinimum}}"{{minimum}}"{{#exclusiveMinimum}},inclusive=false{{/exclusiveMinimum}}){{!
73+
}}{{/minimum}}{{!
74+
}}{{#maximum}}{{!
75+
}} @DecimalMax({{#exclusiveMaximum}}value={{/exclusiveMaximum}}"{{maximum}}"{{#exclusiveMaximum}},inclusive=false{{/exclusiveMaximum}}){{!
76+
}}{{/maximum}}{{!
77+
}}{{/isLong}}{{!
78+
}}{{/isInteger}}{{!
79+
}}{{/useBeanValidation}}

src/test/java/com/chrimle/example/GeneratedClass.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ public enum GeneratedClass {
99
EXAMPLE_RECORD_WITH_REQUIRED_FIELDS_OF_EACH_TYPE(
1010
"ExampleRecordWithRequiredFieldsOfEachType", false, false),
1111
EXAMPLE_RECORD_WITH_NULLABLE_FIELDS_OF_EACH_TYPE(
12-
"ExampleRecordWithNullableFieldsOfEachType", false, false);
12+
"ExampleRecordWithNullableFieldsOfEachType", false, false),
13+
RECORD_WITH_ALL_CONSTRAINTS("RecordWithAllConstraints", false, false);
1314

1415
public static final String PACKAGE_NAME = "io.github.chrimle.example";
1516
public final String simpleClassName;

0 commit comments

Comments
 (0)