diff --git a/modules/solr-configset/src/main/scripts/cli/util/model/Field.java b/modules/solr-configset/src/main/scripts/cli/util/model/Field.java index a8308867c8c..9dccd64b55d 100644 --- a/modules/solr-configset/src/main/scripts/cli/util/model/Field.java +++ b/modules/solr-configset/src/main/scripts/cli/util/model/Field.java @@ -103,15 +103,53 @@ public String getErrorMessage() { } } + public enum Types implements Predicate { + NONE("none"), + DATE("date"), + EMAIL("email"), + TEXT("text"), + TEXTBOX("textbox"), + URL("url"), + INT("int"), + FLOAT("float"); + + private final String name; + + Types(final String name) { + this.name = name; + } - public static final class FieldBuilder { - // TODO: extend! - public Field build() { - return new Field(); + private static final Map valueMap; + static { + Map map = new ConcurrentHashMap<>(); + Arrays.stream(Types.values()).forEach(type -> map.put(type.toString(), type)); + valueMap = Collections.unmodifiableMap(map); + } + + @Override + public boolean test(String sut) { + // we demand correct case! + return this.toString().equals(sut); + } + + public static Predicate matchesTypes() { + Predicate test = NONE; + for (Types type : Types.values()) { + test = test.or(type); + } + return test; + } + + public static List getTypesList() { + return valueMap.keySet().stream().collect(Collectors.toUnmodifiableList()); + } + + @Override + public String toString() { + return this.name; } } - private Field() {} Optional> controlledVocabularyValues = Optional.empty(); } diff --git a/modules/solr-configset/src/test/java/cli/util/model/FieldTest.java b/modules/solr-configset/src/test/java/cli/util/model/FieldTest.java new file mode 100644 index 00000000000..651bf71455a --- /dev/null +++ b/modules/solr-configset/src/test/java/cli/util/model/FieldTest.java @@ -0,0 +1,35 @@ +package cli.util.model; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.NullAndEmptySource; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.function.Predicate; +import java.util.logging.Logger; + +import static org.junit.jupiter.api.Assertions.*; + +class FieldTest { + + private static final Logger logger = Logger.getLogger(BlockTest.class.getCanonicalName()); + + @Nested + class TypesTest { + Predicate allowedTypes = Field.Types.matchesTypes(); + + @ParameterizedTest + @NullAndEmptySource + @ValueSource(strings = {"foobar", "hello_hello", "NONE", "DATE"}) + void failing(String subject) { + assertFalse(allowedTypes.test(subject)); + } + + @ParameterizedTest + @ValueSource(strings = {"none", "text", "textbox", "date", "email", "int", "float"}) + void succeeding(String subject) { + assertTrue(allowedTypes.test(subject)); + } + } + +} \ No newline at end of file