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

org.hibernate.validator.internal.engine.validationcontext.ValidationContextBuilder Maven / Gradle / Ivy

There is a newer version: 8.0.1.Final
Show newest version
/*
 * Hibernate Validator, declare and validate application constraints
 *
 * License: Apache License, Version 2.0
 * See the license.txt file in the root directory or .
 */
package org.hibernate.validator.internal.engine.validationcontext;

import java.lang.reflect.Executable;

import javax.validation.ConstraintValidatorFactory;
import javax.validation.TraversableResolver;

import org.hibernate.validator.constraintvalidation.HibernateConstraintValidatorInitializationContext;
import org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager;
import org.hibernate.validator.internal.engine.path.PathImpl;
import org.hibernate.validator.internal.metadata.BeanMetaDataManager;
import org.hibernate.validator.internal.metadata.aggregated.BeanMetaData;

/**
 * Builder for creating {@link AbstractValidationContext}s suited for the different kinds of validation.
 *
 * @author Gunnar Morling
 * @author Marko Bekhta
 */
public class ValidationContextBuilder {

	private final BeanMetaDataManager beanMetaDataManager;
	private final ConstraintValidatorManager constraintValidatorManager;
	private final ConstraintValidatorFactory constraintValidatorFactory;
	private final TraversableResolver traversableResolver;
	private final HibernateConstraintValidatorInitializationContext constraintValidatorInitializationContext;
	private final ValidatorScopedContext validatorScopedContext;

	public ValidationContextBuilder(
			BeanMetaDataManager beanMetaDataManager,
			ConstraintValidatorManager constraintValidatorManager,
			ConstraintValidatorFactory constraintValidatorFactory,
			ValidatorScopedContext validatorScopedContext,
			TraversableResolver traversableResolver,
			HibernateConstraintValidatorInitializationContext constraintValidatorInitializationContext) {
		this.beanMetaDataManager = beanMetaDataManager;
		this.constraintValidatorManager = constraintValidatorManager;
		this.constraintValidatorFactory = constraintValidatorFactory;
		this.traversableResolver = traversableResolver;
		this.constraintValidatorInitializationContext = constraintValidatorInitializationContext;
		this.validatorScopedContext = validatorScopedContext;
	}

	public  BaseBeanValidationContext forValidate(T rootBean) {
		@SuppressWarnings("unchecked")
		Class rootBeanClass = (Class) rootBean.getClass();
		BeanMetaData rootBeanMetaData = beanMetaDataManager.getBeanMetaData( rootBeanClass );

		return new BeanValidationContext<>(
				constraintValidatorManager,
				constraintValidatorFactory,
				validatorScopedContext,
				traversableResolver,
				constraintValidatorInitializationContext,
				rootBean,
				rootBeanClass,
				rootBeanMetaData
		);
	}

	public  BaseBeanValidationContext forValidateProperty(T rootBean, PathImpl propertyPath) {
		@SuppressWarnings("unchecked")
		Class rootBeanClass = (Class) rootBean.getClass();
		BeanMetaData rootBeanMetaData = beanMetaDataManager.getBeanMetaData( rootBeanClass );

		return new PropertyValidationContext<>(
				constraintValidatorManager,
				constraintValidatorFactory,
				validatorScopedContext,
				traversableResolver,
				constraintValidatorInitializationContext,
				rootBean,
				rootBeanClass,
				rootBeanMetaData,
				propertyPath.getLeafNode().getName()
		);
	}

	public  BaseBeanValidationContext forValidateValue(Class rootBeanClass, PathImpl propertyPath) {
		BeanMetaData rootBeanMetaData = beanMetaDataManager.getBeanMetaData( rootBeanClass );

		return new PropertyValidationContext<>(
				constraintValidatorManager,
				constraintValidatorFactory,
				validatorScopedContext,
				traversableResolver,
				constraintValidatorInitializationContext,
				null, //root bean
				rootBeanClass,
				rootBeanMetaData,
				propertyPath.getLeafNode().getName()
		);
	}

	public  ExecutableValidationContext forValidateParameters(
			T rootBean,
			Executable executable,
			Object[] executableParameters) {
		@SuppressWarnings("unchecked")
		Class rootBeanClass = rootBean != null ? (Class) rootBean.getClass() : (Class) executable.getDeclaringClass();
		BeanMetaData rootBeanMetaData = beanMetaDataManager.getBeanMetaData( rootBeanClass );

		return new ParameterExecutableValidationContext<>(
				constraintValidatorManager,
				constraintValidatorFactory,
				validatorScopedContext,
				traversableResolver,
				constraintValidatorInitializationContext,
				rootBean,
				rootBeanClass,
				rootBeanMetaData,
				executable,
				rootBeanMetaData.getMetaDataFor( executable ),
				executableParameters
		);
	}

	public  ExecutableValidationContext forValidateReturnValue(
			T rootBean,
			Executable executable,
			Object executableReturnValue) {
		@SuppressWarnings("unchecked")
		Class rootBeanClass = rootBean != null ? (Class) rootBean.getClass() : (Class) executable.getDeclaringClass();
		BeanMetaData rootBeanMetaData = beanMetaDataManager.getBeanMetaData( rootBeanClass );

		return new ReturnValueExecutableValidationContext<>(
				constraintValidatorManager,
				constraintValidatorFactory,
				validatorScopedContext,
				traversableResolver,
				constraintValidatorInitializationContext,
				rootBean,
				rootBeanClass,
				rootBeanMetaData,
				executable,
				rootBeanMetaData.getMetaDataFor( executable ),
				executableReturnValue
		);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy