Explorar o código

Make things cleaner

Sam Jaffe %!s(int64=6) %!d(string=hai) anos
pai
achega
bdc2ef00d2

+ 1 - 26
src/main/lombok/org/leumasjaffe/json/schema/factory/SchemaFactory.java

@@ -14,12 +14,7 @@ import com.fasterxml.jackson.databind.node.JsonNodeType;
 
 import lombok.AllArgsConstructor;
 
-public class SchemaFactory {
-	static final JsonNodeType[] ANY = {
-			JsonNodeType.ARRAY, JsonNodeType.OBJECT, JsonNodeType.STRING,
-			JsonNodeType.NUMBER, JsonNodeType.BOOLEAN, JsonNodeType.NULL
-	};
-	
+public class SchemaFactory {	
 	@AllArgsConstructor
 	static final class SimpleTester implements Tester {
 		JsonNodeType type;
@@ -36,26 +31,6 @@ public class SchemaFactory {
 		}
 	}
 	
-	@AllArgsConstructor
-	static final class MultiTypedTester implements Tester {
-		JsonNodeType[] types;
-		Predicate<JsonNode> acceptor;
-		
-		public MultiTypedTester(Predicate<JsonNode> acceptor, JsonNodeType...types) {
-			this(types, acceptor);
-		}
-		
-		@Override
-		public JsonNodeType[] acceptedTypes() {
-			return types;
-		}
-		
-		@Override
-		public boolean accepts(JsonNode node) {
-			return acceptor.test(node);
-		}
-	}
-	
 	public final Tester create(final JsonNode object) {
 		switch (object.getNodeType()) {
 		case BOOLEAN:

+ 3 - 2
src/main/lombok/org/leumasjaffe/json/schema/factory/SchemaV6Factory.java

@@ -9,6 +9,7 @@ import org.leumasjaffe.json.schema.tester.AllItemsTester;
 import org.leumasjaffe.json.schema.tester.AllOfTester;
 import org.leumasjaffe.json.schema.tester.AnyOfTester;
 import org.leumasjaffe.json.schema.tester.ContainsTester;
+import org.leumasjaffe.json.schema.tester.EqualsTester;
 import org.leumasjaffe.json.schema.tester.FixedTester;
 import org.leumasjaffe.json.schema.tester.FormatTester;
 import org.leumasjaffe.json.schema.tester.ItemsTester;
@@ -68,8 +69,8 @@ class SchemaV6Factory extends SchemaFactory {
 				(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 new MultiTypedTester(ANY, value::equals);
-		case "enum": return new AnyOfTester(JsonHelper.toArray(value, v -> new MultiTypedTester(ANY, v::equals)));
+		case "const": return new EqualsTester(value);
+		case "enum": return new EqualsTester(JsonHelper.toArray(value));
 		case "type": return TypeTester.fromType(value.asText());
 		case "format": return FormatTester.forCode(value.asText());
 		case "allOf": return new AllOfTester(createArray(value));

+ 26 - 0
src/main/lombok/org/leumasjaffe/json/schema/tester/EqualsTester.java

@@ -0,0 +1,26 @@
+package org.leumasjaffe.json.schema.tester;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.leumasjaffe.json.schema.Tester;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+import lombok.AccessLevel;
+import lombok.RequiredArgsConstructor;
+import lombok.experimental.FieldDefaults;
+
+@RequiredArgsConstructor
+@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
+public class EqualsTester implements Tester {
+	List<JsonNode> values;
+	
+	public EqualsTester(JsonNode...values) {
+		this(Arrays.asList(values));
+	}
+
+	public boolean accepts(JsonNode node) {
+		return values.parallelStream().anyMatch(node::equals);
+	}
+}