private void validateSavingsCharges( final Set<SavingsAccountCharge> charges, final String productCurrencyCode) { final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>(); final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource(SAVINGS_ACCOUNT_RESOURCE_NAME); boolean isOneWithdrawalPresent = false; boolean isOneAnnualPresent = false; for (SavingsAccountCharge charge : charges) { if (!charge.hasCurrencyCodeOf(productCurrencyCode)) { baseDataValidator .reset() .parameter("currency") .value(charge.getCharge().getId()) .failWithCodeNoParameterAddedToErrorCode("currency.and.charge.currency.not.same"); } if (charge.isWithdrawalFee()) { if (isOneWithdrawalPresent) { baseDataValidator .reset() .failWithCodeNoParameterAddedToErrorCode( "multiple.withdrawal.fee.per.account.not.supported"); } isOneWithdrawalPresent = true; } if (charge.isAnnualFee()) { if (isOneAnnualPresent) { baseDataValidator .reset() .failWithCodeNoParameterAddedToErrorCode( "multiple.annual.fee.per.account.not.supported"); } isOneAnnualPresent = true; } } if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); } }