All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.deephacks.tools4j.config.internal.core.admin.Jsr303Validator Maven / Gradle / Ivy

There is a newer version: 0.15.0
Show newest version
package org.deephacks.tools4j.config.internal.core.admin;

import org.deephacks.tools4j.config.model.AbortRuntimeException;
import org.deephacks.tools4j.config.model.Bean;
import org.deephacks.tools4j.config.model.Events;
import org.deephacks.tools4j.config.spi.Conversion;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Collection;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 

* When beans are created or updated, it is the responsibility of the * validator to maintain data integrity by enforcing validation * constraints and reject operations that violate these rules. *

* This validator does JSR 303, Bean Validation and will not try to do schema * validation, ie check data types or referential integrity etc. *

* Validation will only be peformed if JSR 303 1.0 Bean Validation API * and compliant implementation are available on classpath. *

* * @author Kristoffer Sjogren */ final class Jsr303Validator { private Validator validator; private Conversion conversion = Conversion.get(); private ConcurrentHashMap> classCache = new ConcurrentHashMap<>(); /** * Validate a collection of bean instances. This method is called * when beans are provisioned from an administrative context. *

* Beans can correlate their respective validation constraints using * the schema name. *

* * @param beans to be validated. * @throws AbortRuntimeException */ @SuppressWarnings({ "rawtypes", "unchecked" }) public void validate(Collection beans) throws AbortRuntimeException { if (validator == null) { validator = Validation.buildDefaultValidatorFactory().getValidator(); } for (Bean bean : beans) { Class genclazz = loadClass(bean.getSchema().getType()); Object beanToValidate = conversion.convert(bean, genclazz); Set> violations = validator.validate(beanToValidate); String msg = ""; for (ConstraintViolation v : violations) { msg = msg + v.getPropertyPath() + " " + v.getMessage(); } if (msg != null && !"".equals(msg.trim())) { throw Events.CFG309_VALIDATION_ERROR(msg); } } } private Class loadClass(String className) { Class clazz = classCache.get(className); if (clazz != null) { return clazz; } clazz = forName(className); classCache.put(className, clazz); return clazz; } public static Class forName(String className) { try { return Thread.currentThread().getContextClassLoader().loadClass(className); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } }