|
|
@@ -1,7 +1,5 @@
|
|
|
package org.leumasjaffe.json.schema.tester;
|
|
|
|
|
|
-import org.leumasjaffe.json.schema.Tester;
|
|
|
-
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.node.JsonNodeType;
|
|
|
|
|
|
@@ -11,7 +9,7 @@ import lombok.experimental.FieldDefaults;
|
|
|
|
|
|
@RequiredArgsConstructor(access=AccessLevel.PRIVATE)
|
|
|
@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
|
-public class SizeTester implements Tester {
|
|
|
+public class SizeTester extends SimpleValidationTester {
|
|
|
private static enum Rule {
|
|
|
MIN_ELEMS, MAX_ELEMS;
|
|
|
|
|
|
@@ -19,9 +17,26 @@ public class SizeTester implements Tester {
|
|
|
switch(this) {
|
|
|
case MIN_ELEMS: return elems <= size;
|
|
|
case MAX_ELEMS: return elems >= size;
|
|
|
- default: return false;
|
|
|
+ default: throw new IllegalStateException();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public String jsonName() {
|
|
|
+ switch(this) {
|
|
|
+ case MIN_ELEMS: return "min";
|
|
|
+ case MAX_ELEMS: return "max";
|
|
|
+ default: throw new IllegalStateException();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public String compare() {
|
|
|
+ switch(this) {
|
|
|
+ case MIN_ELEMS: return " is less than ";
|
|
|
+ case MAX_ELEMS: return " is greater than ";
|
|
|
+ default: throw new IllegalStateException();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
public static SizeTester minLength(int elems) {
|
|
|
@@ -52,6 +67,20 @@ public class SizeTester implements Tester {
|
|
|
Rule rule;
|
|
|
int elems;
|
|
|
|
|
|
+ @Override
|
|
|
+ String name() {
|
|
|
+ return rule.jsonName() + argumentName();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ String errorMessage(JsonNode node) {
|
|
|
+ final StringBuilder build = new StringBuilder();
|
|
|
+ build.append(type).append(" element count of ").append(getSize(node));
|
|
|
+ build.append(rule.compare()).append(rule.jsonName()).append("imum");
|
|
|
+ build.append(" of ").append(elems);
|
|
|
+ return build.toString();
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public boolean accepts(JsonNode node) {
|
|
|
return node.getNodeType() == type && rule.test(elems, getSize(node));
|
|
|
@@ -60,5 +89,14 @@ public class SizeTester implements Tester {
|
|
|
private int getSize(JsonNode node) {
|
|
|
return node.isTextual() ? node.asText().length() : node.size();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ private String argumentName() {
|
|
|
+ switch (type) {
|
|
|
+ case OBJECT: return "Properties";
|
|
|
+ case ARRAY: return "Items";
|
|
|
+ case STRING: return "Length";
|
|
|
+ default: throw new IllegalStateException();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|