package org.springframework.issues;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.PropertyAccessorFactory;
import org.springframework.util.ObjectUtils;
public class MatchingFieldsValidator implements
ConstraintValidator<MatchingFields, Object> {
private String field;
private String confirmField;
public MatchingFieldsValidator() {
super();
}
public void initialize(final MatchingFields annotation) {
this.field = annotation.field();
this.confirmField = annotation.confirmField();
}
public boolean isValid(final Object object, final ConstraintValidatorContext context) {
BeanWrapper bean = PropertyAccessorFactory.forBeanPropertyAccess(object);
boolean valid = ObjectUtils.nullSafeEquals(bean.getPropertyValue(this.field),
bean.getPropertyValue(this.confirmField));
if (!valid) {
context.buildConstraintViolationWithTemplate(
context.getDefaultConstraintMessageTemplate()
).addNode(this.field).addConstraintViolation().disableDefaultConstraintViolation();
}
return valid;
}
}