瀏覽代碼

Add type boundary checks for AllOf, AnyOf, OneOf

Sam Jaffe 6 年之前
父節點
當前提交
f872db0d4c

+ 11 - 0
src/main/lombok/org/leumasjaffe/json/schema/tester/AllOfTester.java

@@ -1,11 +1,14 @@
 package org.leumasjaffe.json.schema.tester;
 
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 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;
@@ -19,6 +22,14 @@ public class AllOfTester implements Tester {
 	public AllOfTester(Tester...testers) {
 		this(Arrays.asList(testers));
 	}
+	
+	@Override
+	public JsonNodeType[] acceptedTypes() {
+		final Set<JsonNodeType> set = new HashSet<>();
+		children.stream().map(Tester::acceptedTypes)
+				.forEach(a -> set.retainAll(Arrays.asList(a)));
+		return set.toArray(new JsonNodeType[0]);
+	}
 
 	public boolean accepts(JsonNode node) {
 		return children.parallelStream().allMatch(t -> t.accepts(node));

+ 11 - 0
src/main/lombok/org/leumasjaffe/json/schema/tester/AnyOfTester.java

@@ -1,11 +1,14 @@
 package org.leumasjaffe.json.schema.tester;
 
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 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;
@@ -19,6 +22,14 @@ public class AnyOfTester implements Tester {
 	public AnyOfTester(Tester...testers) {
 		this(Arrays.asList(testers));
 	}
+	
+	@Override
+	public JsonNodeType[] acceptedTypes() {
+		final Set<JsonNodeType> set = new HashSet<>();
+		children.stream().map(Tester::acceptedTypes)
+				.forEach(a -> set.addAll(Arrays.asList(a)));
+		return set.toArray(new JsonNodeType[0]);
+	}
 
 	public boolean accepts(JsonNode node) {
 		return children.parallelStream().anyMatch(t -> t.accepts(node));

+ 11 - 0
src/main/lombok/org/leumasjaffe/json/schema/tester/OneOfTester.java

@@ -1,11 +1,14 @@
 package org.leumasjaffe.json.schema.tester;
 
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 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;
@@ -20,6 +23,14 @@ public class OneOfTester implements Tester {
 		this(Arrays.asList(testers));
 	}
 
+	@Override
+	public JsonNodeType[] acceptedTypes() {
+		final Set<JsonNodeType> set = new HashSet<>();
+		children.stream().map(Tester::acceptedTypes)
+				.forEach(a -> set.addAll(Arrays.asList(a)));
+		return set.toArray(new JsonNodeType[0]);
+	}
+	
 	public boolean accepts(JsonNode node) {
 		return children.parallelStream().filter(t -> t.accepts(node)).count() == 1;
 	}