Ver Fonte

Some more refactors

Sam Jaffe há 6 anos atrás
pai
commit
57e5815748

+ 13 - 0
src/main/lombok/org/leumasjaffe/json/JsonHelper.java

@@ -1,5 +1,6 @@
 package org.leumasjaffe.json;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -55,4 +56,16 @@ public class JsonHelper {
 				transform.apply(pair.getKey(), pair.getValue())));
 		return rval;
 	}
+	public <T> List<T> values(final JsonNode object, Function<JsonNode, T> transform) {
+		List<T> rval = new ArrayList<>();
+		object.fields().forEachRemaining(pair -> rval.add(transform.apply(pair.getValue())));
+		return rval;
+	}
+	
+	public <T> List<T> values(final JsonNode object, BiFunction<String, JsonNode, T> transform) {
+		List<T> rval = new ArrayList<>();
+		object.fields().forEachRemaining(pair -> rval.add(
+				transform.apply(pair.getKey(), pair.getValue())));
+		return rval;
+	}
 }

+ 13 - 19
src/main/lombok/org/leumasjaffe/json/schema/factory/SchemaV6Factory.java

@@ -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);
+	}
 }