package com.googlecode.totallylazy.validations;
import com.googlecode.totallylazy.Sequence;
import static com.googlecode.totallylazy.Sequences.sequence;
import static com.googlecode.totallylazy.validations.ValidationResult.functions.merge;
import static com.googlecode.totallylazy.validations.Validator.functions.validateAgainst;
public class AllOfValidator<T> extends LogicalValidator<T>{
private final Sequence<Validator<? super T>> validators;
private AllOfValidator(Sequence<Validator<? super T>> validators) {
this.validators = validators;
}
@Override
public ValidationResult validate(T instance) {
return validators.
map(validateAgainst(instance)).
reduce(merge());
}
public static class constructors {
@SafeVarargs
public static <T> AllOfValidator<T> allOf(Validator<? super T>... validators) {
return allOf(sequence(validators));
}
public static <T> AllOfValidator<T> allOf(Sequence<Validator<? super T>> validators) {
return new AllOfValidator<T>(validators);
}
}
}