private void setGroupsValidation ( final RolloutGroupsValidation validation ) { final int runningValidation = runningValidationsCounter . getAndSet ( 0 ) ; if ( runningValidation > 1 ) { validateRemainingTargets ( ) ; return ; } groupsValidation = validation ; final int lastIdx = groupRows . size ( ) - 1 ; final GroupRow lastRow = groupRows . get ( lastIdx ) ; if ( groupsValidation != null && groupsValidation . isValid ( ) && validationStatus != ValidationStatus . INVALID ) { lastRow . resetError ( ) ; setValidationStatus ( ValidationStatus . VALID ) ; } else { lastRow . setError ( i18n . getMessage ( "message.rollout.remaining.targets.error" ) ) ; setValidationStatus ( ValidationStatus . INVALID ) ; } // validate the single groups final int maxTargets = quotaManagement . getMaxTargetsPerRolloutGroup ( ) ; final boolean hasRemainingTargetsError = validationStatus == ValidationStatus . INVALID ; for ( int i = 0 ; i < groupRows . size ( ) ; ++ i ) { final GroupRow row = groupRows . get ( i ) ; // do not mask the 'remaining targets' error if ( hasRemainingTargetsError && row . equals ( lastRow ) ) { continue ; } row . resetError ( ) ; final Long count = groupsValidation . getTargetsPerGroup ( ) . get ( i ) ; if ( count != null && count > maxTargets ) { row . setError ( i18n . getMessage ( MESSAGE_ROLLOUT_MAX_GROUP_SIZE_EXCEEDED , maxTargets ) ) ; setValidationStatus ( ValidationStatus . INVALID ) ; } } }
YOU SHOULD NOT CALL THIS METHOD MANUALLY . It s only for the callback . Only 1 runningValidation should be executed . If this runningValidation is done then this method is called . Maybe then a new runningValidation is executed .