package eu.dnetlib.validator2.engine; import java.util.HashSet; import java.util.Objects; import java.util.Set; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; public class Predicates { // The following are not used /* public static Predicate and(final Iterable> predicates) { return t -> { for(Predicate predicate: predicates) { if (!predicate.test(t)) return false; } return true; }; } public static Predicate or(final Iterable> predicates) { return t -> { for(Predicate predicate: predicates) { if (predicate.test(t)) return true; } return false; }; } // horn? public static Predicate conditional(Predicate condition, final Iterable> predicates) { return t -> { if (!condition.test(t)) return true; return and(predicates).test(t); }; } */ public static class SetOfCaseInsensitiveAllowedValues implements Predicate { private final Set allowedValues; public SetOfCaseInsensitiveAllowedValues(String[] allowedValues) { this.allowedValues = Stream.of(allowedValues). filter(Objects::nonNull). map(String::trim). filter(term -> !term.isEmpty()). map(String::toLowerCase). // we want to ignore case for equality collect(Collectors.toCollection(HashSet::new));; } @Override public boolean test(String s) { String textToTest = Helper.canonicalize(s); if (textToTest.isEmpty()) return false; return allowedValues.contains(textToTest.toLowerCase()); // we want to ignore case for equality } public boolean isEmpty() { return allowedValues.isEmpty(); } } public static Predicate all(Iterable> rules) { return t -> { for(Predicate predicate: rules) { if (!predicate.test(t)) return false; } return true; }; } public static Predicate any(final Iterable> rules) { return t -> { for(Predicate predicate: rules) { if (predicate.test(t)) return true; } return false; }; } public static Predicate not(Rule rule) { return t -> !rule.test(t); } }