org.hibernate.validator.internal.xml.ConstrainedTypeBuilder 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.xml;
import static org.hibernate.validator.internal.util.CollectionHelper.newArrayList;
import static org.hibernate.validator.internal.util.CollectionHelper.newHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.validator.internal.metadata.core.AnnotationProcessingOptionsImpl;
import org.hibernate.validator.internal.metadata.core.MetaConstraint;
import org.hibernate.validator.internal.metadata.location.ConstraintLocation;
import org.hibernate.validator.internal.metadata.raw.ConfigurationSource;
import org.hibernate.validator.internal.metadata.raw.ConstrainedType;
import org.hibernate.validator.internal.xml.binding.ClassType;
import org.hibernate.validator.internal.xml.binding.ConstraintType;
import org.hibernate.validator.internal.xml.binding.GroupSequenceType;
/**
* Builder for constraint types.
*
* @author Hardy Ferentschik
*/
class ConstrainedTypeBuilder {
private final ClassLoadingHelper classLoadingHelper;
private final MetaConstraintBuilder metaConstraintBuilder;
private final AnnotationProcessingOptionsImpl annotationProcessingOptions;
private final Map, List>> defaultSequences;
public ConstrainedTypeBuilder(ClassLoadingHelper classLoadingHelper,
MetaConstraintBuilder metaConstraintBuilder,
AnnotationProcessingOptionsImpl annotationProcessingOptions,
Map, List>> defaultSequences) {
this.classLoadingHelper = classLoadingHelper;
this.metaConstraintBuilder = metaConstraintBuilder;
this.annotationProcessingOptions = annotationProcessingOptions;
this.defaultSequences = defaultSequences;
}
ConstrainedType buildConstrainedType(ClassType classType, Class beanClass, String defaultPackage) {
if ( classType == null ) {
return null;
}
// group sequence
List> groupSequence = createGroupSequence( classType.getGroupSequence(), defaultPackage );
if ( !groupSequence.isEmpty() ) {
defaultSequences.put( beanClass, groupSequence );
}
// constraints
ConstraintLocation constraintLocation = ConstraintLocation.forClass( beanClass );
Set> metaConstraints = newHashSet();
for ( ConstraintType constraint : classType.getConstraint() ) {
MetaConstraint metaConstraint = metaConstraintBuilder.buildMetaConstraint(
constraintLocation,
constraint,
java.lang.annotation.ElementType.TYPE,
defaultPackage,
null
);
metaConstraints.add( metaConstraint );
}
// ignore annotation
if ( classType.getIgnoreAnnotations() != null ) {
annotationProcessingOptions.ignoreClassLevelConstraintAnnotations(
beanClass,
classType.getIgnoreAnnotations()
);
}
return new ConstrainedType(
ConfigurationSource.XML,
beanClass,
metaConstraints
);
}
private List> createGroupSequence(GroupSequenceType groupSequenceType, String defaultPackage) {
List> groupSequence = newArrayList();
if ( groupSequenceType != null ) {
for ( String groupName : groupSequenceType.getValue() ) {
Class group = classLoadingHelper.loadClass( groupName, defaultPackage );
groupSequence.add( group );
}
}
return groupSequence;
}
}