diff --git a/src/main/java/ninja/javafx/smartcsv/validation/Validator.java b/src/main/java/ninja/javafx/smartcsv/validation/Validator.java index 94dc53b..51e5b55 100644 --- a/src/main/java/ninja/javafx/smartcsv/validation/Validator.java +++ b/src/main/java/ninja/javafx/smartcsv/validation/Validator.java @@ -36,6 +36,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import static java.util.stream.Collectors.joining; import static org.apache.commons.validator.GenericValidator.*; /** @@ -94,6 +95,7 @@ public class Validator { checkMinLength(columnConfig, value, error); checkInteger(columnConfig, value, error); checkGroovy(column, columnConfig, value, error); + checkValueOf(columnConfig, value, error); } if (!error.isEmpty()) { @@ -146,6 +148,16 @@ public class Validator { return groovyResult.equals(true) || groovyResult.toString().trim().toLowerCase().equals("true"); } + private void checkValueOf(Config columnConfig, String value, ValidationError error) { + List stringList = getStringList(columnConfig, "value of"); + if (stringList != null) { + if (!stringList.contains(value)) { + String commaSeparated = stringList.stream().collect(joining(", ")); + error.add("validation.message.value.of", value, commaSeparated); + } + } + } + private void checkBlankOrNull(Config columnConfig, String value, ValidationError error) { if (getBoolean(columnConfig, "not empty")) { if (isBlankOrNull(value)) { @@ -223,41 +235,42 @@ public class Validator { return columnConfig.hasPath(path) ? columnConfig.getInt(path) : null; } - private boolean getBoolean(Config columnConfig, String path) { return columnConfig.hasPath(path) && columnConfig.getBoolean(path); } + private List getStringList(Config columnConfig, String path) { + return columnConfig.hasPath(path) ? columnConfig.getStringList(path) : null; + } + public ValidationError isHeaderValid(String[] headerNames) { ValidationError result = null; if (validationConfig != null) { if (validationConfig.hasPath("headers")) { Config headerSectionConfig = validationConfig.getConfig("headers"); - if (headerSectionConfig.hasPath("list")) { - List headerConfig = headerSectionConfig.getStringList("list"); - if (headerConfig != null) { - if (headerNames.length != headerConfig.size()) { - result = ValidationError.withoutLineNumber().add("validation.message.header.length", - Integer.toString(headerNames.length), - Integer.toString(headerConfig.size())); - return result; - } + List headerConfig = getStringList(headerSectionConfig, "list"); + if (headerConfig != null) { + if (headerNames.length != headerConfig.size()) { + result = ValidationError.withoutLineNumber().add("validation.message.header.length", + Integer.toString(headerNames.length), + Integer.toString(headerConfig.size())); + return result; + } - ValidationError error = ValidationError.withoutLineNumber(); + ValidationError error = ValidationError.withoutLineNumber(); - for(int i=0; i) value); } return columnSectionConfig; diff --git a/src/test/java/ninja/javafx/smartcsv/validation/ValidatorTest.java b/src/test/java/ninja/javafx/smartcsv/validation/ValidatorTest.java index 29bd918..354c80b 100644 --- a/src/test/java/ninja/javafx/smartcsv/validation/ValidatorTest.java +++ b/src/test/java/ninja/javafx/smartcsv/validation/ValidatorTest.java @@ -101,6 +101,8 @@ public class ValidatorTest { { "column", "regexp", "[a-z]*", "column", "abcA", false, new ValidationMessage("validation.message.regexp", "[a-z]*") }, { "column", "groovy", "value.contains('a')? 'true' : 'no a inside'", "column", "abcdef", true, null }, { "column", "groovy", "value.contains('a')? 'true' : 'no a inside'", "column", "bcdefg", false, new ValidationMessage("no a inside") }, + { "column", "value of", asList("a","b","c","d","e"), "column", "c", true, null }, + { "column", "value of", asList("a","b","c","d","e"), "column", "f", false, new ValidationMessage("validation.message.value.of", "f", "a, b, c, d, e") }, }); }