|
|
@@ -1,22 +1,42 @@
|
|
|
package org.leumasjaffe.json.schema.tester;
|
|
|
|
|
|
+import java.util.function.Predicate;
|
|
|
+
|
|
|
import org.leumasjaffe.json.schema.Tester;
|
|
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
+import com.fasterxml.jackson.databind.node.JsonNodeType;
|
|
|
+
|
|
|
+import lombok.AccessLevel;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.experimental.FieldDefaults;
|
|
|
|
|
|
-public abstract class TypeTester implements Tester {
|
|
|
+@RequiredArgsConstructor(access=AccessLevel.PRIVATE)
|
|
|
+@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
|
+public class TypeTester implements Tester {
|
|
|
|
|
|
- public static Tester fromType(final String type) {
|
|
|
+ public static TypeTester fromType(final String type) {
|
|
|
switch (type) {
|
|
|
- case "array": return JsonNode::isArray;
|
|
|
- case "boolean": return JsonNode::isBoolean;
|
|
|
- case "integer": return JsonNode::isInt;
|
|
|
- case "null": return JsonNode::isNull;
|
|
|
- case "number": return JsonNode::isNumber;
|
|
|
- case "object": return JsonNode::isObject;
|
|
|
- case "string": return JsonNode::isTextual;
|
|
|
+ case "array": return new TypeTester(JsonNode::isArray);
|
|
|
+ case "boolean": return new TypeTester(JsonNode::isBoolean);
|
|
|
+ case "integer": return new TypeTester(JsonNode::isInt);
|
|
|
+ case "null": return new TypeTester(JsonNode::isNull);
|
|
|
+ case "number": return new TypeTester(JsonNode::isNumber);
|
|
|
+ case "object": return new TypeTester(JsonNode::isObject);
|
|
|
+ case "string": return new TypeTester(JsonNode::isTextual);
|
|
|
default: throw new IllegalArgumentException("Invalid type: " + type);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ Predicate<JsonNode> test;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public JsonNodeType[] acceptedTypes() {
|
|
|
+ return ANY;
|
|
|
+ }
|
|
|
|
|
|
+ @Override
|
|
|
+ public boolean accepts(JsonNode node) {
|
|
|
+ return test.test(node);
|
|
|
+ }
|
|
|
}
|