package org.deephacks.confit.internal.core.validation; import org.deephacks.confit.model.Events; import org.deephacks.confit.spi.ValidationManager; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import java.util.Arrays; import java.util.Collection; import java.util.Set; /** * </p> * This validator does JSR 303, Bean Validation and will not try to do schema * validation, ie check data types or referential integrity etc. * <p> * Validation will only be performed if JSR 303 1.0 Bean Validation API * and compliant implementation are available on classpath. * </p> */ public class DefaultValidationManager extends ValidationManager { private Validator validator; /** API class for JSR 303 1.0 bean validation */ public static final String JSR303_1_0_CLASSNAME = "javax.validation.Validation"; public DefaultValidationManager() { ClassLoader cl = Thread.currentThread().getContextClassLoader(); try { cl.loadClass(JSR303_1_0_CLASSNAME); } catch (Exception e) { // since no JSR303 implementation is available we tell // Lookup that DefaultValidationManager is not present. throw new RuntimeException(e); } } @Override public void validate(Collection<Object> beans) { if (validator == null) { validator = Validation.buildDefaultValidatorFactory().getValidator(); } for (Object bean : beans) { Set<ConstraintViolation<Object>> violations = validator.validate(bean); String msg = ""; for (ConstraintViolation<Object> v : violations) { msg = msg + v.getPropertyPath() + " " + v.getMessage(); } if (!"".equals(msg.trim())) { throw Events.CFG309_VALIDATION_ERROR(msg); } } } @Override public void validate(Object bean) { validate(Arrays.asList(bean)); } }