org.hibernate.validator.internal.metadata.provider.XmlMetaDataProvider Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bean-validator Show documentation
Show all versions of bean-validator Show documentation
JSR 380's RI, Hibernate Validator version ${hibernate-validator.version} and its dependencies repackaged as OSGi bundle
/*
* 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.metadata.provider;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.hibernate.validator.internal.engine.valueextraction.ValueExtractorManager;
import org.hibernate.validator.internal.metadata.core.AnnotationProcessingOptions;
import org.hibernate.validator.internal.metadata.core.ConstraintHelper;
import org.hibernate.validator.internal.metadata.raw.BeanConfiguration;
import org.hibernate.validator.internal.metadata.raw.ConfigurationSource;
import org.hibernate.validator.internal.metadata.raw.ConstrainedElement;
import org.hibernate.validator.internal.util.CollectionHelper;
import org.hibernate.validator.internal.util.TypeResolutionHelper;
import org.hibernate.validator.internal.util.stereotypes.Immutable;
import org.hibernate.validator.internal.xml.MappingXmlParser;
/**
* A {@link MetaDataProvider} providing constraint related meta data based on
* XML descriptors as defined by the Bean Validation API.
*
* @author Gunnar Morling
* @author Hardy Ferentschik
*/
public class XmlMetaDataProvider implements MetaDataProvider {
// cached against the fqcn of a class. not a class instance itself (HV-479)
@Immutable
private final Map> configuredBeans;
private final AnnotationProcessingOptions annotationProcessingOptions;
public XmlMetaDataProvider(ConstraintHelper constraintHelper,
TypeResolutionHelper typeResolutionHelper,
ValueExtractorManager valueExtractorManager,
Set mappingStreams,
ClassLoader externalClassLoader) {
MappingXmlParser mappingParser = new MappingXmlParser( constraintHelper, typeResolutionHelper, valueExtractorManager,
externalClassLoader );
mappingParser.parse( mappingStreams );
configuredBeans = CollectionHelper.toImmutableMap( createBeanConfigurations( mappingParser ) );
annotationProcessingOptions = mappingParser.getAnnotationProcessingOptions();
}
private static Map> createBeanConfigurations(MappingXmlParser mappingParser) {
final Map> configuredBeans = new HashMap<>();
for ( Class clazz : mappingParser.getXmlConfiguredClasses() ) {
Set constrainedElements = mappingParser.getConstrainedElementsForClass( clazz );
BeanConfiguration beanConfiguration = new BeanConfiguration<>(
ConfigurationSource.XML,
clazz,
constrainedElements,
mappingParser.getDefaultSequenceForClass( clazz ),
null
);
configuredBeans.put( clazz.getName(), beanConfiguration );
}
return configuredBeans;
}
@Override
@SuppressWarnings("unchecked")
public BeanConfiguration getBeanConfiguration(Class beanClass) {
return (BeanConfiguration) configuredBeans.get( beanClass.getName() );
}
@Override
public AnnotationProcessingOptions getAnnotationProcessingOptions() {
return annotationProcessingOptions;
}
}