Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit e8bd86a

Browse files
authored
Java, adds schema contains (#360)
* Adds initial ContainsValidator * Adds ContainsValidator, adds needed containsPathToSchemas input to the validate method * Fixes 303 java unit tests * Regenerates other java samples * Docs updated, java 310 tests updated * Fixes java test with list of only null * Samples regen * Deletes lingering FakeValidator.java
1 parent 12ebcd6 commit e8bd86a

File tree

171 files changed

+3368
-397
lines changed

Some content is hidden

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

171 files changed

+3368
-397
lines changed

docs/generators/java.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
277277
|AllOf|✓|OAS2,OAS3
278278
|AnyOf|✓|OAS3
279279
|Const|✓|OAS3
280-
|Contains||OAS3
280+
|Contains||OAS3
281281
|Default|✓|OAS2,OAS3
282282
|DependentRequired|✗|OAS3
283283
|DependentSchemas|✗|OAS3

samples/client/3_0_3_unit_test/java/.openapi-generator/FILES

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,14 +210,14 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanEnumVa
210210
src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanSchemaValidator.java
211211
src/main/java/org/openapijsonschematools/client/schemas/validation/BooleanValueMethod.java
212212
src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java
213+
src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValidator.java
213214
src/main/java/org/openapijsonschematools/client/schemas/validation/CustomIsoparser.java
214215
src/main/java/org/openapijsonschematools/client/schemas/validation/DefaultValueMethod.java
215216
src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleEnumValidator.java
216217
src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleValueMethod.java
217218
src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java
218219
src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java
219220
src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java
220-
src/main/java/org/openapijsonschematools/client/schemas/validation/FakeValidator.java
221221
src/main/java/org/openapijsonschematools/client/schemas/validation/FloatEnumValidator.java
222222
src/main/java/org/openapijsonschematools/client/schemas/validation/FloatValueMethod.java
223223
src/main/java/org/openapijsonschematools/client/schemas/validation/FormatValidator.java

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AdditionalPropertiesValidator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ public AdditionalPropertiesValidator(Class<? extends JsonSchema> additionalPrope
1515
}
1616

1717
@Override
18-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
18+
public @Nullable PathToSchemasMap validate(
19+
JsonSchema schema,
20+
@Nullable Object arg,
21+
ValidationMetadata validationMetadata,
22+
List<PathToSchemasMap> containsPathToSchemas
23+
) {
1924
if (!(arg instanceof Map<?, ?> mapArg)) {
2025
return null;
2126
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AllOfValidator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ public AllOfValidator(List<Class<? extends JsonSchema>> allOf) {
1111
}
1212

1313
@Override
14-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
14+
public @Nullable PathToSchemasMap validate(
15+
JsonSchema schema,
16+
@Nullable Object arg,
17+
ValidationMetadata validationMetadata,
18+
List<PathToSchemasMap> containsPathToSchemas
19+
) {
1520
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
1621
for(Class<? extends JsonSchema> allOfClass: allOf) {
1722
JsonSchema allOfSchema = JsonSchemaFactory.getInstance(allOfClass);

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/AnyOfValidator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ public AnyOfValidator(List<Class<? extends JsonSchema>> anyOf) {
1414
}
1515

1616
@Override
17-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
17+
public @Nullable PathToSchemasMap validate(
18+
JsonSchema schema,
19+
@Nullable Object arg,
20+
ValidationMetadata validationMetadata,
21+
List<PathToSchemasMap> containsPathToSchemas
22+
) {
1823
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
1924
List<Class<? extends JsonSchema>> validatedAnyOfClasses = new ArrayList<>();
2025
for(Class<? extends JsonSchema> anyOfClass: anyOf) {

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ConstValidator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.checkerframework.checker.nullness.qual.Nullable;
55

66
import java.math.BigDecimal;
7+
import java.util.List;
78
import java.util.Objects;
89

910
public class ConstValidator extends BigDecimalValidator implements KeywordValidator {
@@ -14,7 +15,12 @@ public ConstValidator(@Nullable Object constValue) {
1415
}
1516

1617
@Override
17-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
18+
public @Nullable PathToSchemasMap validate(
19+
JsonSchema schema,
20+
@Nullable Object arg,
21+
ValidationMetadata validationMetadata,
22+
List<PathToSchemasMap> containsPathToSchemas
23+
) {
1824
if (arg instanceof Number) {
1925
BigDecimal castArg = getBigDecimal((Number) arg);
2026
if (Objects.equals(castArg, constValue)) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package org.openapijsonschematools.client.schemas.validation;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.openapijsonschematools.client.exceptions.ValidationException;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
public class ContainsValidator implements KeywordValidator {
10+
public final Class<? extends JsonSchema> contains;
11+
12+
public ContainsValidator(Class<? extends JsonSchema> contains) {
13+
this.contains = contains;
14+
}
15+
16+
@Override
17+
public @Nullable PathToSchemasMap validate(
18+
JsonSchema schema,
19+
@Nullable Object arg,
20+
ValidationMetadata validationMetadata,
21+
List<PathToSchemasMap> containsPathToSchemas
22+
) {
23+
if (!(arg instanceof List)) {
24+
return null;
25+
}
26+
if (containsPathToSchemas.isEmpty()) {
27+
throw new ValidationException(
28+
"Validation failed for contains keyword in class="+schema.getClass()
29+
+ " at pathToItem="+validationMetadata.pathToItem()+". No "
30+
+ "items validated to the contains schema."
31+
);
32+
}
33+
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
34+
for (PathToSchemasMap otherPathToSchema: containsPathToSchemas) {
35+
pathToSchemas.update(otherPathToSchema);
36+
}
37+
return pathToSchemas;
38+
}
39+
40+
public List<PathToSchemasMap> getContainsPathToSchemas(
41+
@Nullable Object arg,
42+
ValidationMetadata validationMetadata
43+
) {
44+
if (!(arg instanceof List)) {
45+
return new ArrayList<>();
46+
}
47+
List<PathToSchemasMap> containsPathToSchemas = new ArrayList<>();
48+
int i = 0;
49+
for(Object itemValue: (List<?>) arg) {
50+
PathToSchemasMap thesePathToSchemas = new PathToSchemasMap();
51+
List<Object> itemPathToItem = new ArrayList<>(validationMetadata.pathToItem());
52+
itemPathToItem.add(i);
53+
ValidationMetadata itemValidationMetadata = new ValidationMetadata(
54+
itemPathToItem,
55+
validationMetadata.configuration(),
56+
validationMetadata.validatedPathToSchemas(),
57+
validationMetadata.seenClasses()
58+
);
59+
JsonSchema containsSchema = JsonSchemaFactory.getInstance(contains);
60+
if (itemValidationMetadata.validationRanEarlier(containsSchema)) {
61+
// todo add_deeper_validated_schemas
62+
containsPathToSchemas.add(thesePathToSchemas);
63+
i += 1;
64+
continue;
65+
}
66+
67+
try {
68+
PathToSchemasMap otherPathToSchemas = JsonSchema.validate(
69+
containsSchema, itemValue, itemValidationMetadata);
70+
containsPathToSchemas.add(otherPathToSchemas);
71+
} catch (ValidationException ignored) {
72+
;
73+
}
74+
}
75+
return containsPathToSchemas;
76+
}
77+
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.checkerframework.checker.nullness.qual.Nullable;
55

66
import java.math.BigDecimal;
7+
import java.util.List;
78
import java.util.Set;
89

910
public class EnumValidator extends BigDecimalValidator implements KeywordValidator {
@@ -19,7 +20,12 @@ private boolean enumContainsArg(@Nullable Object arg){
1920
}
2021

2122
@Override
22-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
23+
public @Nullable PathToSchemasMap validate(
24+
JsonSchema schema,
25+
@Nullable Object arg,
26+
ValidationMetadata validationMetadata,
27+
List<PathToSchemasMap> containsPathToSchemas
28+
) {
2329
if (enumValues.isEmpty()) {
2430
throw new ValidationException("No value can match enum because enum is empty");
2531
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMaximumValidator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.openapijsonschematools.client.exceptions.ValidationException;
44
import org.checkerframework.checker.nullness.qual.Nullable;
55

6+
import java.util.List;
67

78
public class ExclusiveMaximumValidator implements KeywordValidator {
89
public final Number exclusiveMaximum;
@@ -12,7 +13,12 @@ public ExclusiveMaximumValidator(Number exclusiveMaximum) {
1213
}
1314

1415
@Override
15-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
16+
public @Nullable PathToSchemasMap validate(
17+
JsonSchema schema,
18+
@Nullable Object arg,
19+
ValidationMetadata validationMetadata,
20+
List<PathToSchemasMap> containsPathToSchemas
21+
) {
1622
if (!(arg instanceof Number)) {
1723
return null;
1824
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ExclusiveMinimumValidator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.openapijsonschematools.client.exceptions.ValidationException;
44
import org.checkerframework.checker.nullness.qual.Nullable;
55

6+
import java.util.List;
67

78
public class ExclusiveMinimumValidator implements KeywordValidator {
89
public final Number exclusiveMinimum;
@@ -12,7 +13,12 @@ public ExclusiveMinimumValidator(Number exclusiveMinimum) {
1213
}
1314

1415
@Override
15-
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
16+
public @Nullable PathToSchemasMap validate(
17+
JsonSchema schema,
18+
@Nullable Object arg,
19+
ValidationMetadata validationMetadata,
20+
List<PathToSchemasMap> containsPathToSchemas
21+
) {
1622
if (!(arg instanceof Number)) {
1723
return null;
1824
}

0 commit comments

Comments
 (0)