pl.fhframework.validation.ValidationManager Maven / Gradle / Ivy
package pl.fhframework.validation;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Manager to support validation
*
* Created by Krzysztof Noga on 2016-12-14.
*
* @param
*/
public class ValidationManager {
private final boolean stopOnFirstHandlerException;
private List> validators = new ArrayList<>();
/**
* The default constructor. Validation is to stop on the first violation
*/
public ValidationManager() {
this.stopOnFirstHandlerException = true;
}
/**
* @param stopOnFirstHandlerException - true if validation is to stop on the first violation. default true
*/
public ValidationManager(boolean stopOnFirstHandlerException) {
this.stopOnFirstHandlerException = stopOnFirstHandlerException;
}
private void validate(final T value, final Iterator> iterator, final List> violationsToReturn) {
if (iterator.hasNext()) {
Validator validator = iterator.next();
List> violations = validator.validate(value);
checkViolations(violations, value, iterator, violationsToReturn);
}
}
private void checkViolations(final List> violations, final T value, final Iterator> iterator,
final List> violationsToReturn) {
if (violations != null && violations.size() > 0) {
violationsToReturn.addAll(violations);
/*
* validation error
*/
if (stopOnFirstHandlerException) {
return;
} else {
validate(value, iterator, violationsToReturn);
}
} else {
/*
* validation ok
*/
validate(value, iterator, violationsToReturn);
}
}
/**
* Adds validator to the list
*
* @param validator
* @return return ValidationManager
*/
public ValidationManager addValidator(Validator validator) {
validators.add(validator);
return this;
}
/**
* Validates the specified value.
* The value is checked by all validators,
* or interrupted for the first violation when stopOnFirstHandlerException=true
*
* @param value - value to validation
* @return list of violations. If size > 0, the validation does not successfully
*/
public List> validate(T value) {
final Iterator> iterator = validators.iterator();
List> violationsToReturn = new ArrayList<>();
validate(value, iterator, violationsToReturn);
return violationsToReturn;
}
}