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

Commit 950e487

Browse files
committed
Adds initial ContainsValidator
1 parent 12ebcd6 commit 950e487

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package {{{packageName}}}.schemas.validation;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class ContainsValidator implements KeywordValidator {
9+
public final Class<? extends JsonSchema> contains;
10+
11+
public ItemsValidator(Class<? extends JsonSchema> contains) {
12+
this.contains = contains;
13+
}
14+
15+
@Override
16+
public @Nullable PathToSchemasMap validate(JsonSchema schema, @Nullable Object arg, ValidationMetadata validationMetadata) {
17+
if (!(arg instanceof List)) {
18+
return null;
19+
}
20+
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
21+
// todo add handling for prefixItems
22+
int i = 0;
23+
for(Object itemValue: (List<?>) arg) {
24+
List<Object> itemPathToItem = new ArrayList<>(validationMetadata.pathToItem());
25+
itemPathToItem.add(i);
26+
ValidationMetadata itemValidationMetadata = new ValidationMetadata(
27+
itemPathToItem,
28+
validationMetadata.configuration(),
29+
validationMetadata.validatedPathToSchemas(),
30+
validationMetadata.seenClasses()
31+
);
32+
JsonSchema itemsSchema = JsonSchemaFactory.getInstance(items);
33+
if (itemValidationMetadata.validationRanEarlier(itemsSchema)) {
34+
// todo add_deeper_validated_schemas
35+
i +=1;
36+
continue;
37+
}
38+
PathToSchemasMap otherPathToSchemas = JsonSchema.validate(itemsSchema, itemValue, itemValidationMetadata);
39+
pathToSchemas.update(otherPathToSchemas);
40+
i += 1;
41+
}
42+
return pathToSchemas;
43+
}
44+
45+
public List<PathToSchemasMap> getContainsPathToSchemas(
46+
arg: typing.Any,
47+
ValidationMetadata validation_metadata,
48+
PathToSchemasMap path_to_schemas,
49+
) {
50+
if (!(arg instanceof List)) {
51+
return new ArrayList<>();
52+
}
53+
List<PathToSchemasMap> containsPathToSchemas = new ArrayList<>();
54+
int i = 0;
55+
for(Object itemValue: (List<?>) arg) {
56+
PathToSchemasMap thesePathToSchemas = new PathToSchemasMap();
57+
58+
List<Object> itemPathToItem = new ArrayList<>(validationMetadata.pathToItem());
59+
itemPathToItem.add(i);
60+
ValidationMetadata itemValidationMetadata = new ValidationMetadata(
61+
itemPathToItem,
62+
validationMetadata.configuration(),
63+
validationMetadata.validatedPathToSchemas(),
64+
validationMetadata.seenClasses()
65+
);
66+
if (itemValidationMetadata.validationRanEarlier(itemsSchema)) {
67+
// todo add_deeper_validated_schemas
68+
containsPathToSchemas.add(thesePathToSchemas);
69+
i +=1;
70+
continue;
71+
}
72+
73+
JsonSchema containsSchema = JsonSchemaFactory.getInstance(contains);
74+
try {
75+
PathToSchemasMap otherPathToSchemas = JsonSchema.validate(
76+
containsSchema, itemValue, itemValidationMetadata)
77+
containsPathToSchemas.append(otherPathToSchemas)
78+
} except (exceptions.OpenApiException ignored) {
79+
;
80+
}
81+
return containsPathToSchemas;
82+
}
83+
}

0 commit comments

Comments
 (0)