This repository was archived by the owner on Dec 25, 2024. It is now read-only.
File tree 10 files changed +120
-0
lines changed
java/org/openapijsonschematools/codegen/generators
resources/java/src/main/java/packagename
10 files changed +120
-0
lines changed Original file line number Diff line number Diff line change @@ -591,10 +591,12 @@ public void processOpts() {
591
591
keywordValidatorFiles .add ("LongValueMethod" );
592
592
keywordValidatorFiles .add ("MapSchemaValidator" );
593
593
keywordValidatorFiles .add ("MapUtils" );
594
+ keywordValidatorFiles .add ("MaxContainsValidator" );
594
595
keywordValidatorFiles .add ("MaximumValidator" );
595
596
keywordValidatorFiles .add ("MaxItemsValidator" );
596
597
keywordValidatorFiles .add ("MaxLengthValidator" );
597
598
keywordValidatorFiles .add ("MaxPropertiesValidator" );
599
+ keywordValidatorFiles .add ("MinContainsValidator" );
598
600
keywordValidatorFiles .add ("MinimumValidator" );
599
601
keywordValidatorFiles .add ("MinItemsValidator" );
600
602
keywordValidatorFiles .add ("MinLengthValidator" );
Original file line number Diff line number Diff line change @@ -102,6 +102,12 @@ public static class {{jsonPathPiece.pascalCase}} extends JsonSchema implements {
102
102
{{ #if contains }}
103
103
{{> src/main/java/packagename/components/schemas/SchemaClass/_contains }}
104
104
{{ /if }}
105
+ {{ #neq maxContains null}}
106
+ {{> src/main/java/packagename/components/schemas/SchemaClass/_maxContains }}
107
+ {{ /neq }}
108
+ {{ #neq minContains null}}
109
+ {{> src/main/java/packagename/components/schemas/SchemaClass/_minContains }}
110
+ {{ /neq }}
105
111
);
106
112
}
107
113
Original file line number Diff line number Diff line change @@ -47,6 +47,12 @@ public static class {{jsonPathPiece.pascalCase}} extends JsonSchema implements L
47
47
{{ #if contains }}
48
48
{{> src/main/java/packagename/components/schemas/SchemaClass/_contains }}
49
49
{{ /if }}
50
+ {{ #neq maxContains null}}
51
+ {{> src/main/java/packagename/components/schemas/SchemaClass/_maxContains }}
52
+ {{ /if }}
53
+ {{ #neq minContains null}}
54
+ {{> src/main/java/packagename/components/schemas/SchemaClass/_minContains }}
55
+ {{ /neq }}
50
56
);
51
57
}
52
58
Original file line number Diff line number Diff line change
1
+ {{ #if forDocs }}
2
+ maxContains = {{ maxContains }}
3
+ {{ ~else }}
4
+ .maxContains({{ maxContains }} )
5
+ {{ /if }}
Original file line number Diff line number Diff line change
1
+ {{ #if forDocs }}
2
+ minContains = {{ minContains }}
3
+ {{ ~else }}
4
+ .minContains({{ minContains }} )
5
+ {{ /if }}
Original file line number Diff line number Diff line change 76
76
{{ #if contains }}
77
77
| Class< ? extends JsonSchema> | {{> src/main/java/packagename/components/schemas/SchemaClass/_contains }} |
78
78
{{ /if }}
79
+ {{ #neq maxContains null}}
80
+ | Integer | {{> src/main/java/packagename/components/schemas/SchemaClass/_maxContains }} |
81
+ {{ /neq }}
82
+ {{ #neq minContains null}}
83
+ | Integer | {{> src/main/java/packagename/components/schemas/SchemaClass/_minContains }} |
84
+ {{ /neq }}
Original file line number Diff line number Diff line change @@ -236,6 +236,20 @@ public abstract class JsonSchema {
236
236
new ContainsValidator(this.contains)
237
237
);
238
238
}
239
+ this.maxContains = jsonSchemaInfo.maxContains;
240
+ if (this.maxContains != null) {
241
+ keywordToValidator.put(
242
+ "maxContains",
243
+ new MaxContainsValidator(this.maxContains)
244
+ );
245
+ }
246
+ this.minContains = jsonSchemaInfo.minContains;
247
+ if (this.minContains != null) {
248
+ keywordToValidator.put(
249
+ "minContains",
250
+ new MinContainsValidator(this.minContains)
251
+ );
252
+ }
239
253
this.keywordToValidator = keywordToValidator;
240
254
}
241
255
Original file line number Diff line number Diff line change @@ -147,4 +147,14 @@ public class JsonSchemaInfo {
147
147
this.contains = contains;
148
148
return this;
149
149
}
150
+ public @Nullable Integer maxContains = null;
151
+ public JsonSchemaInfo maxContains(Integer maxContains) {
152
+ this.maxContains = maxContains;
153
+ return this;
154
+ }
155
+ public @Nullable Integer minContains = null;
156
+ public JsonSchemaInfo minContains(Integer minContains) {
157
+ this.minContains = minContains;
158
+ return this;
159
+ }
150
160
}
Original file line number Diff line number Diff line change
1
+ package {{{ packageName }}} .schemas.validation;
2
+
3
+ import org.checkerframework.checker.nullness.qual.Nullable;
4
+ import {{{ packageName }}} .exceptions.ValidationException;
5
+
6
+ import java.util.List;
7
+
8
+ public class MaxContainsValidator implements KeywordValidator {
9
+ public final int maxContains;
10
+
11
+ public MaxContainsValidator(int maxContains) {
12
+ this.maxContains = maxContains;
13
+ }
14
+
15
+ @Override
16
+ public @Nullable PathToSchemasMap validate(
17
+ JsonSchema schema,
18
+ @Nullable Object arg,
19
+ ValidationMetadata validationMetadata,
20
+ List<PathToSchemasMap > containsPathToSchemas
21
+ ) {
22
+ if (!(arg instanceof List)) {
23
+ return null;
24
+ }
25
+ if (containsPathToSchemas.size() > maxContains) {
26
+ throw new ValidationException(
27
+ "Validation failed for maxContains keyword in class="+schema.getClass()+
28
+ " at pathToItem="+validationMetadata.pathToItem()+". Too many items validated to the contains schema."
29
+ )
30
+ }
31
+ return null;
32
+ }
33
+ }
Original file line number Diff line number Diff line change
1
+ package {{{ packageName }}} .schemas.validation;
2
+
3
+ import org.checkerframework.checker.nullness.qual.Nullable;
4
+ import {{{ packageName }}} .exceptions.ValidationException;
5
+
6
+ import java.util.List;
7
+
8
+ public class MinContainsValidator implements KeywordValidator {
9
+ public final int minContains;
10
+
11
+ public MinContainsValidator(int minContains) {
12
+ this.minContains = minContains;
13
+ }
14
+
15
+ @Override
16
+ public @Nullable PathToSchemasMap validate(
17
+ JsonSchema schema,
18
+ @Nullable Object arg,
19
+ ValidationMetadata validationMetadata,
20
+ List<PathToSchemasMap > containsPathToSchemas
21
+ ) {
22
+ if (!(arg instanceof List)) {
23
+ return null;
24
+ }
25
+ if (containsPathToSchemas.size() < minContains) {
26
+ throw new ValidationException(
27
+ "Validation failed for minContains keyword in class="+schema.getClass()+
28
+ " at pathToItem="+validationMetadata.pathToItem()+". Too few items validated to the contains schema."
29
+ )
30
+ }
31
+ return null;
32
+ }
33
+ }
You can’t perform that action at this time.
0 commit comments