private void validateMetaConstraints(ValidationContext<?> validationContext, ValueContext<?, Object> valueContext, Object parent, Iterable<MetaConstraint<?>> constraints) { for ( MetaConstraint<?> metaConstraint : constraints ) { validateMetaConstraint( validationContext, valueContext, parent, metaConstraint ); if ( shouldFailFast( validationContext ) ) { break; } } }
private <U> boolean validateConstraintsForSingleDefaultGroupElement(ValidationContext<?> validationContext, ValueContext<U, Object> valueContext, final Map<Class<?>, Class<?>> validatedInterfaces, Class<? super U> clazz, Set<MetaConstraint<?>> metaConstraints, Group defaultSequenceMember) { boolean validationSuccessful = true; valueContext.setCurrentGroup( defaultSequenceMember.getDefiningClass() ); for ( MetaConstraint<?> metaConstraint : metaConstraints ) { // HV-466, an interface implemented more than one time in the hierarchy has to be validated only one // time. An interface can define more than one constraint, we have to check the class we are validating. final Class<?> declaringClass = metaConstraint.getLocation().getDeclaringClass(); if ( declaringClass.isInterface() ) { Class<?> validatedForClass = validatedInterfaces.get( declaringClass ); if ( validatedForClass != null && !validatedForClass.equals( clazz ) ) { continue; } validatedInterfaces.put( declaringClass, clazz ); } boolean tmp = validateMetaConstraint( validationContext, valueContext, valueContext.getCurrentBean(), metaConstraint ); if ( shouldFailFast( validationContext ) ) { return false; } validationSuccessful = validationSuccessful && tmp; } return validationSuccessful; }
private boolean validatePropertyTypeConstraint(ValidationContext<?> validationContext, ValueContext<?, Object> valueContext, boolean propertyPathComplete, MetaConstraint<?> metaConstraint) { boolean validationSuccessful; PropertyMetaData propertyMetaData = beanMetaDataManager.getBeanMetaData( valueContext.getCurrentBeanType() ) .getMetaDataFor( metaConstraint.getLocation().getPropertyName() ); if ( !propertyPathComplete ) { valueContext.appendNode( propertyMetaData ); } valueContext.setUnwrapMode( UnwrapMode.UNWRAP ); validationSuccessful = validateMetaConstraint( validationContext, valueContext, metaConstraint ); valueContext.setUnwrapMode( UnwrapMode.AUTOMATIC ); return validationSuccessful; }
private boolean validateConstraint(ValidationContext<?> validationContext, ValueContext<?, Object> valueContext, boolean propertyPathComplete, MetaConstraint<?> metaConstraint) { boolean validationSuccessful; if ( metaConstraint.getElementType() != ElementType.TYPE ) { PropertyMetaData propertyMetaData = beanMetaDataManager.getBeanMetaData( valueContext.getCurrentBeanType() ) .getMetaDataFor( metaConstraint.getLocation().getPropertyName() ); if ( !propertyPathComplete ) { valueContext.appendNode( propertyMetaData ); } if ( TYPE_USE.equals( metaConstraint.getElementType().name() ) ) { // TYPE_USE constraints always require UNWRAP valueContext.setUnwrapMode( UnwrapMode.UNWRAP ); } else { // set the unwrapping mode for this validation valueContext.setUnwrapMode( propertyMetaData.unwrapMode() ); } } else { valueContext.appendBeanNode(); } validationSuccessful = validateMetaConstraint( validationContext, valueContext, metaConstraint ); // reset the unwrapping mode valueContext.setUnwrapMode( UnwrapMode.AUTOMATIC ); return validationSuccessful; }