package ru.hflabs.rcd.service.document; import org.springframework.validation.Errors; import org.springframework.validation.Validator; /** * Класс <class>ValidatorService</class> реализует базовый сервис валидации сущностей * * @author Nazin Alexander */ public class ChangeValidatorService<T> extends ValidatorService<T> implements Validator { /** Делегат валидатора по JSR-303 */ private Validator delegate; public ChangeValidatorService(Class<T> targetClass) { super(targetClass); } public void setDelegate(Validator delegate) { this.delegate = delegate; } /** * Выполняет форматирование документа * * @param target целевой документ * @return Возвращает модифицированный документ */ protected T formatValue(T target) { return target; } /** * Выполняет валидацию документа по аннотациям * * @param errors контейнер ошибок * @param target проверяемый документ * @return Возвращает флаг наличия ошибок */ protected boolean doValidateAnnotations(Errors errors, Object target) { delegate.validate(target, errors); return errors.hasErrors(); } @Override protected void doValidate(Errors errors, T target) { T targetDocument = formatValue(target); doValidateAnnotations(errors, targetDocument); } @Override public final boolean supports(Class<?> clazz) { return retrieveTargetClass().isAssignableFrom(clazz); } @Override public final void validate(Object target, Errors errors) { doValidate(errors, retrieveTargetClass().cast(target)); } }