|
|
@@ -1,8 +1,6 @@
|
|
|
package org.leumasjaffe.json.schema.factory;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.regex.Pattern;
|
|
|
+import java.util.function.Predicate;
|
|
|
|
|
|
import org.leumasjaffe.json.JsonHelper;
|
|
|
import org.leumasjaffe.json.schema.Tester;
|
|
|
@@ -59,22 +57,10 @@ class SchemaV6Factory extends SchemaFactory {
|
|
|
case "required": return json -> JsonHelper.toArray(value, JsonNode::asText).stream().allMatch(json::has);
|
|
|
case "additionalProperties": return j -> JsonHelper.toArray(j).stream().allMatch(create(value)::accepts);
|
|
|
// case "definitions": ; // TODO Implement definitions creation
|
|
|
- case "properties": {
|
|
|
- final List<PropertyTester.Pair> list = new ArrayList<>();
|
|
|
- value.fields().forEachRemaining(e -> {
|
|
|
- final String k = e.getKey();
|
|
|
- list.add(new PropertyTester.Pair(s -> k.equals(s), create(e.getValue())));
|
|
|
- });
|
|
|
- return new PropertyTester(list);
|
|
|
- }
|
|
|
- case "patternProperties": {
|
|
|
- final List<PropertyTester.Pair> list = new ArrayList<>();
|
|
|
- value.fields().forEachRemaining(e -> {
|
|
|
- final Pattern k = Pattern.compile(e.getKey());
|
|
|
- list.add(new PropertyTester.Pair(s -> k.matcher(s).matches(), create(e.getValue())));
|
|
|
- });
|
|
|
- return new PropertyTester(list);
|
|
|
- }
|
|
|
+ case "properties": return new PropertyTester(JsonHelper.values(value,
|
|
|
+ (k, v) -> new PropertyTester.Pair(stringEqual(k), create(v))));
|
|
|
+ case "patternProperties": return new PropertyTester(JsonHelper.values(value,
|
|
|
+ (k, v) -> new PropertyTester.Pair(stringMatches(k), create(v))));
|
|
|
// case "dependencies": ; // TODO Implement array(required) and object(schema) versions
|
|
|
case "propertyNames": return new PropertyNameTester(create(value));
|
|
|
case "const": return value::equals;
|
|
|
@@ -89,4 +75,12 @@ class SchemaV6Factory extends SchemaFactory {
|
|
|
throw new IllegalArgumentException("Unknown matcher: " + key);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private static Predicate<String> stringEqual(String to) {
|
|
|
+ return s -> s.equals(to);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static Predicate<String> stringMatches(String toRegex) {
|
|
|
+ return s -> s.matches(toRegex);
|
|
|
+ }
|
|
|
}
|