package core.framework.impl.web;
import core.framework.api.util.Maps;
import core.framework.impl.validate.Validator;
import core.framework.impl.validate.ValidatorBuilder;
import javax.xml.bind.annotation.XmlElement;
import java.lang.reflect.Type;
import java.util.Map;
/**
* @author neo
*/
public class BeanValidator {
private final Map<Type, Validator> validators = Maps.newConcurrentHashMap();
public Validator register(Type instanceType) {
return validators.computeIfAbsent(instanceType, type -> {
new BeanTypeValidator(instanceType).validate();
return new ValidatorBuilder(instanceType, field -> field.getDeclaredAnnotation(XmlElement.class).name()).build();
});
}
public <T> T validate(Type instanceType, T bean) {
Validator validator = register(instanceType);
validator.validate(bean);
return bean;
}
}