
org.hglteam.validation.MultistepValidationBuilderBase Maven / Gradle / Ivy
package org.hglteam.validation;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
public abstract class MultistepValidationBuilderBase> {
protected final List> validations;
protected MultistepValidationBuilderBase() {
validations = new ArrayList<>();
}
public ValidationStepBuilder when(Predicate predicate) {
return new ValidationStepBuilder(predicate);
}
public B onProperty(Function getter, Consumer> builderConfigurator) {
this.validations.add(this.propertyValidator(getter, builderConfigurator));
return self();
}
protected Validation propertyValidator(Function getter, Consumer> builderConfigurator) {
return t -> {
var value = getter.apply(t);
var builder = Validation.builder();
builderConfigurator.accept(builder);
builder.validate(value);
};
}
protected abstract B self();
public class ValidationStepBuilder {
private Predicate predicate;
private ValidationStepBuilder(Predicate condition) {
this.predicate = condition;
}
public ValidationStepBuilder and(Predicate condition) {
this.predicate = this.predicate.and(condition);
return this;
}
public ValidationStepBuilder or(Predicate condition) {
this.predicate = this.predicate.or(condition);
return this;
}
public B then(Function exceptionFunction) {
MultistepValidationBuilderBase.this
.validations
.add(SimpleValidation.builder()
.predicate(this.predicate)
.exceptionFunction(exceptionFunction)
.build());
return MultistepValidationBuilderBase.this.self();
}
}
}