Skip to content

Commit

Permalink
HV-371: Working directly with AggregatedMethodMetaData in ValidatorIm…
Browse files Browse the repository at this point in the history
…pl, removing obsolete method on AMMD
  • Loading branch information
gunnarmorling committed Mar 4, 2011
1 parent fe2ad01 commit 3067c8e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 47 deletions.
Expand Up @@ -55,7 +55,6 @@
import org.hibernate.validator.metadata.BeanMetaDataImpl;
import org.hibernate.validator.metadata.ConstraintHelper;
import org.hibernate.validator.metadata.MetaConstraint;
import org.hibernate.validator.metadata.MethodMetaData;
import org.hibernate.validator.metadata.ParameterMetaData;
import org.hibernate.validator.method.MethodConstraintViolation;
import org.hibernate.validator.method.MethodValidator;
Expand Down Expand Up @@ -946,7 +945,6 @@ private <T> int validateParametersForGroup(MethodValidationContext<T> validation

BeanMetaData<T> beanMetaData = getBeanMetaData( validationContext.getRootBeanClass() );
AggregatedMethodMetaData methodMetaData = beanMetaData.getMetaDataForMethod( method );
Map<Class<?>, MethodMetaData> methodMetaDataByType = methodMetaData.getMetaDataByDefiningType();

// TODO GM: define behavior with respect to redefined default sequences. Should only the
// sequence from the validated bean be honored or also default sequence definitions up in
Expand All @@ -967,35 +965,29 @@ private <T> int validateParametersForGroup(MethodValidationContext<T> validation

int numberOfViolationsOfCurrentGroup = 0;

for ( Entry<Class<?>, MethodMetaData> constraintsOfOneClass : methodMetaDataByType.entrySet() ) {
for ( int i = 0; i < parameterValues.length; i++ ) {

for ( int i = 0; i < parameterValues.length; i++ ) {

//ignore this parameter if this validation is for a single parameter and this is not the right one
if ( validationContext.getParameterIndex() != null && !validationContext.getParameterIndex()
.equals( i ) ) {
continue;
}

Object value = parameterValues[i];
String parameterName = methodMetaData.getParameterMetaData( i ).getParameterName();
//ignore this parameter if this validation is for a single parameter and this is not the right one
if ( validationContext.getParameterIndex() != null && !validationContext.getParameterIndex()
.equals( i ) ) {
continue;
}

// validate constraints at parameter itself
ValueContext<T, Object> valueContext = ValueContext.getLocalExecutionContext(
object, PathImpl.createPathForMethodParameter( method, parameterName ), i, parameterName
);
valueContext.setCurrentValidatedValue( value );
valueContext.setCurrentGroup( oneGroup );
Object value = parameterValues[i];
String parameterName = methodMetaData.getParameterMetaData( i ).getParameterName();

ParameterMetaData parameterMetaData = constraintsOfOneClass.getValue()
.getParameterMetaData( valueContext.getParameterIndex() );
// validate constraints at parameter itself
ValueContext<T, Object> valueContext = ValueContext.getLocalExecutionContext(
object, PathImpl.createPathForMethodParameter( method, parameterName ), i, parameterName
);
valueContext.setCurrentValidatedValue( value );
valueContext.setCurrentGroup( oneGroup );

numberOfViolationsOfCurrentGroup += validateParameterForGroup(
validationContext, valueContext, parameterMetaData
);
if ( validationContext.shouldFailFast() ) {
return validationContext.getFailingConstraints().size() - numberOfViolationsBefore;
}
numberOfViolationsOfCurrentGroup += validateParameterForGroup(
validationContext, valueContext, methodMetaData.getParameterMetaData( i )
);
if ( validationContext.shouldFailFast() ) {
return validationContext.getFailingConstraints().size() - numberOfViolationsBefore;
}
}

Expand Down Expand Up @@ -1112,7 +1104,6 @@ private <T, V> int validateReturnValueForGroup(MethodValidationContext<T> valida

BeanMetaData<T> beanMetaData = getBeanMetaData( validationContext.getRootBeanClass() );
AggregatedMethodMetaData methodMetaData = beanMetaData.getMetaDataForMethod( method );
Map<Class<?>, MethodMetaData> methodMetaDataByType = methodMetaData.getMetaDataByDefiningType();

// TODO GM: define behavior with respect to redefined default sequences. Should only the
// sequence from the validated bean be honored or also default sequence definitions up in
Expand Down Expand Up @@ -1140,15 +1131,12 @@ private <T, V> int validateReturnValueForGroup(MethodValidationContext<T> valida
valueContext.setCurrentValidatedValue( value );
valueContext.setCurrentGroup( oneGroup );

for ( Entry<Class<?>, MethodMetaData> constraintsOfOneClass : methodMetaDataByType.entrySet() ) {

numberOfViolationsOfCurrentGroup +=
validateReturnValueForGroup(
validationContext, valueContext, constraintsOfOneClass.getValue()
);
if ( validationContext.shouldFailFast() ) {
return validationContext.getFailingConstraints().size() - numberOfViolationsBefore;
}
numberOfViolationsOfCurrentGroup +=
validateReturnValueForGroup(
validationContext, valueContext, methodMetaData
);
if ( validationContext.shouldFailFast() ) {
return validationContext.getFailingConstraints().size() - numberOfViolationsBefore;
}

//stop processing after first group with errors occurred
Expand All @@ -1172,11 +1160,11 @@ private <T, V> int validateReturnValueForGroup(MethodValidationContext<T> valida
}

private <T, V> int validateReturnValueForGroup(MethodValidationContext<T> validationContext,
ValueContext<T, V> valueContext, MethodMetaData constraintsOfOneClass) {
ValueContext<T, V> valueContext, AggregatedMethodMetaData methodMetaData) {

int numberOfViolationsBefore = validationContext.getFailingConstraints().size();

for ( MetaConstraint<?, ? extends Annotation> metaConstraint : constraintsOfOneClass ) {
for ( MetaConstraint<?, ? extends Annotation> metaConstraint : methodMetaData ) {

if ( !metaConstraint.getGroupList().contains( valueContext.getCurrentGroup() ) ) {
continue;
Expand Down
Expand Up @@ -360,14 +360,6 @@ public Iterable<MethodMetaData> getAllMethodMetaData() {
return metaDataByDefiningType.values();
}

/**
* TODO GM: If possible remove; I think, this shouldn't be required by clients.
*/
@Deprecated
public Map<Class<?>, MethodMetaData> getMetaDataByDefiningType() {
return metaDataByDefiningType;
}

/**
* An iterator with the return value constraints of the represented method.
*/
Expand Down

0 comments on commit 3067c8e

Please sign in to comment.