MIFOSX-311: cherry pick of fix from 0.11.4 branch.

This commit is contained in:
Keith Woodlock
2013-04-30 01:20:02 +01:00
parent bc85e81316
commit f9f55b8b3a
4 changed files with 197 additions and 150 deletions
@@ -36,12 +36,12 @@ public final class CalculateLoanScheduleQueryFromApiJsonHelper {
/** /**
* The parameters supported for this command. * The parameters supported for this command.
*/ */
final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("id", "clientId", "groupId", "loanType", "calendarId", "productId", "accountNo", final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("id", "clientId", "groupId", "loanType", "calendarId",
"externalId", "fundId", "loanOfficerId", "loanPurposeId", "transactionProcessingStrategyId", "principal", "inArrearsTolerance", "productId", "accountNo", "externalId", "fundId", "loanOfficerId", "loanPurposeId", "transactionProcessingStrategyId",
"interestRatePerPeriod", "repaymentEvery", "numberOfRepayments", "loanTermFrequency", "loanTermFrequencyType", "principal", "inArrearsTolerance", "interestRatePerPeriod", "repaymentEvery", "numberOfRepayments", "loanTermFrequency",
"repaymentFrequencyType", "interestRateFrequencyType", "amortizationType", "interestType", "interestCalculationPeriodType", "loanTermFrequencyType", "repaymentFrequencyType", "interestRateFrequencyType", "amortizationType", "interestType",
"expectedDisbursementDate", "repaymentsStartingFromDate", "interestChargedFromDate", "submittedOnDate", "submittedOnNote", "interestCalculationPeriodType", "expectedDisbursementDate", "repaymentsStartingFromDate", "interestChargedFromDate",
"locale", "dateFormat", "charges", "collateral")); "submittedOnDate", "submittedOnNote", "locale", "dateFormat", "charges", "collateral"));
private final FromJsonHelper fromApiJsonHelper; private final FromJsonHelper fromApiJsonHelper;
@@ -98,7 +98,8 @@ public final class CalculateLoanScheduleQueryFromApiJsonHelper {
final String interestRatePerPeriodParameterName = "interestRatePerPeriod"; final String interestRatePerPeriodParameterName = "interestRatePerPeriod";
final BigDecimal interestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(interestRatePerPeriodParameterName, final BigDecimal interestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(interestRatePerPeriodParameterName,
element); element);
baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod).notNull().positiveAmount(); baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod).notNull()
.zeroOrPositiveAmount();
final String interestTypeParameterName = "interestType"; final String interestTypeParameterName = "interestType";
final Integer interestType = fromApiJsonHelper.extractIntegerWithLocaleNamed(interestTypeParameterName, element); final Integer interestType = fromApiJsonHelper.extractIntegerWithLocaleNamed(interestTypeParameterName, element);
@@ -160,7 +160,8 @@ public final class LoanApplicationCommandFromApiJsonHelper {
final String interestRatePerPeriodParameterName = "interestRatePerPeriod"; final String interestRatePerPeriodParameterName = "interestRatePerPeriod";
final BigDecimal interestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(interestRatePerPeriodParameterName, final BigDecimal interestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(interestRatePerPeriodParameterName,
element); element);
baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod).notNull().positiveAmount(); baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod).notNull()
.zeroOrPositiveAmount();
final String interestTypeParameterName = "interestType"; final String interestTypeParameterName = "interestType";
final Integer interestType = fromApiJsonHelper.extractIntegerSansLocaleNamed(interestTypeParameterName, element); final Integer interestType = fromApiJsonHelper.extractIntegerSansLocaleNamed(interestTypeParameterName, element);
@@ -427,7 +428,8 @@ public final class LoanApplicationCommandFromApiJsonHelper {
atLeastOneParameterPassedForUpdate = true; atLeastOneParameterPassedForUpdate = true;
final BigDecimal interestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(interestRatePerPeriodParameterName, final BigDecimal interestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(interestRatePerPeriodParameterName,
element); element);
baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod).notNull().positiveAmount(); baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod).notNull()
.zeroOrPositiveAmount();
} }
final String interestTypeParameterName = "interestType"; final String interestTypeParameterName = "interestType";
@@ -600,11 +602,21 @@ public final class LoanApplicationCommandFromApiJsonHelper {
"Validation errors exist.", dataValidationErrors); } "Validation errors exist.", dataValidationErrors); }
} }
public void validateMinMaxConstraintsForModification(final String json, final LoanProduct loanProduct) { public void validateMinMaxConstraintValues(final JsonElement element, final LoanProduct loanProduct) {
final JsonElement element = fromApiJsonHelper.parse(json);
final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>(); final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("loan"); final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("loan");
this.loanProductCommandFromApiJsonDeserializer.validateMinMaxConstraints(element, baseDataValidator, loanProduct);
final BigDecimal minPrincipal = loanProduct.getMinPrincipalAmount().getAmount();
final BigDecimal maxPrincipal = loanProduct.getMaxPrincipalAmount().getAmount();
final String principalParameterName = "principal";
if (fromApiJsonHelper.parameterExists(principalParameterName, element)) {
final BigDecimal principal = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(principalParameterName, element);
baseDataValidator.reset().parameter(principalParameterName).value(principal).notNull().positiveAmount()
.inMinAndMaxAmountRange(minPrincipal, maxPrincipal);
}
if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist",
"Validation errors exist.", dataValidationErrors); } "Validation errors exist.", dataValidationErrors); }
} }
@@ -232,7 +232,7 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa
} }
// validate min and maximum constraints // validate min and maximum constraints
this.fromApiJsonDeserializer.validateMinMaxConstraintsForModification(command.json(), existingLoanApplication.loanProduct()); this.fromApiJsonDeserializer.validateForModify(command.json());
final String fundIdParamName = "fundId"; final String fundIdParamName = "fundId";
if (changes.containsKey(fundIdParamName)) { if (changes.containsKey(fundIdParamName)) {
@@ -306,9 +306,10 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa
calendarInstance.updateCalendar(calendar); calendarInstance.updateCalendar(calendar);
this.calendarInstanceRepository.saveAndFlush(calendarInstance); this.calendarInstanceRepository.saveAndFlush(calendarInstance);
} }
}else{ } else {
//attaching new calendar // attaching new calendar
CalendarInstance calendarInstance = new CalendarInstance(calendar, existingLoanApplication.getId(), CalendarEntityType.LOANS.getValue()); CalendarInstance calendarInstance = new CalendarInstance(calendar, existingLoanApplication.getId(),
CalendarEntityType.LOANS.getValue());
this.calendarInstanceRepository.save(calendarInstance); this.calendarInstanceRepository.save(calendarInstance);
} }
@@ -88,14 +88,14 @@ public final class LoanProductCommandFromApiJsonDeserializer {
String minPrincipalParameterName = "minPrincipal"; String minPrincipalParameterName = "minPrincipal";
BigDecimal minPrincipalAmount = null; BigDecimal minPrincipalAmount = null;
if(fromApiJsonHelper.parameterExists(minPrincipalParameterName, element)){ if (fromApiJsonHelper.parameterExists(minPrincipalParameterName, element)) {
minPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minPrincipalParameterName, element); minPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minPrincipalParameterName, element);
baseDataValidator.reset().parameter(minPrincipalParameterName).value(minPrincipalAmount).ignoreIfNull().positiveAmount(); baseDataValidator.reset().parameter(minPrincipalParameterName).value(minPrincipalAmount).ignoreIfNull().positiveAmount();
} }
String maxPrincipalParameterName = "maxPrincipal"; String maxPrincipalParameterName = "maxPrincipal";
BigDecimal maxPrincipalAmount = null; BigDecimal maxPrincipalAmount = null;
if(fromApiJsonHelper.parameterExists(maxPrincipalParameterName, element)){ if (fromApiJsonHelper.parameterExists(maxPrincipalParameterName, element)) {
maxPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxPrincipalParameterName, element); maxPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxPrincipalParameterName, element);
baseDataValidator.reset().parameter(maxPrincipalParameterName).value(maxPrincipalAmount).ignoreIfNull().positiveAmount(); baseDataValidator.reset().parameter(maxPrincipalParameterName).value(maxPrincipalAmount).ignoreIfNull().positiveAmount();
} }
@@ -103,13 +103,14 @@ public final class LoanProductCommandFromApiJsonDeserializer {
if (maxPrincipalAmount != null && maxPrincipalAmount.compareTo(BigDecimal.ZERO) != -1) { if (maxPrincipalAmount != null && maxPrincipalAmount.compareTo(BigDecimal.ZERO) != -1) {
if (minPrincipalAmount != null && minPrincipalAmount.compareTo(BigDecimal.ZERO) != -1) { if (minPrincipalAmount != null && minPrincipalAmount.compareTo(BigDecimal.ZERO) != -1) {
baseDataValidator.reset().parameter(maxPrincipalParameterName).value(maxPrincipalAmount).notLessThanMin(minPrincipalAmount); baseDataValidator.reset().parameter(maxPrincipalParameterName).value(maxPrincipalAmount).notLessThanMin(minPrincipalAmount);
if(minPrincipalAmount.compareTo(maxPrincipalAmount) <= 0){ if (minPrincipalAmount.compareTo(maxPrincipalAmount) <= 0) {
baseDataValidator.reset().parameter("principal").value(principal).inMinAndMaxAmountRange(minPrincipalAmount, maxPrincipalAmount); baseDataValidator.reset().parameter("principal").value(principal)
.inMinAndMaxAmountRange(minPrincipalAmount, maxPrincipalAmount);
} }
}else{ } else {
baseDataValidator.reset().parameter("principal").value(principal).notGreaterThanMax(maxPrincipalAmount); baseDataValidator.reset().parameter("principal").value(principal).notGreaterThanMax(maxPrincipalAmount);
} }
}else if (minPrincipalAmount != null && minPrincipalAmount.compareTo(BigDecimal.ZERO) != -1) { } else if (minPrincipalAmount != null && minPrincipalAmount.compareTo(BigDecimal.ZERO) != -1) {
baseDataValidator.reset().parameter("principal").value(principal).notLessThanMin(minPrincipalAmount); baseDataValidator.reset().parameter("principal").value(principal).notLessThanMin(minPrincipalAmount);
} }
@@ -118,28 +119,33 @@ public final class LoanProductCommandFromApiJsonDeserializer {
String minNumberOfRepaymentsParameterName = "minNumberOfRepayments"; String minNumberOfRepaymentsParameterName = "minNumberOfRepayments";
Integer minNumberOfRepayments = null; Integer minNumberOfRepayments = null;
if(fromApiJsonHelper.parameterExists(minNumberOfRepaymentsParameterName, element)){ if (fromApiJsonHelper.parameterExists(minNumberOfRepaymentsParameterName, element)) {
minNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(minNumberOfRepaymentsParameterName, element); minNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(minNumberOfRepaymentsParameterName, element);
baseDataValidator.reset().parameter(minNumberOfRepaymentsParameterName).value(minNumberOfRepayments).ignoreIfNull().integerGreaterThanZero(); baseDataValidator.reset().parameter(minNumberOfRepaymentsParameterName).value(minNumberOfRepayments).ignoreIfNull()
.integerGreaterThanZero();
} }
String maxNumberOfRepaymentsParameterName = "maxNumberOfRepayments"; String maxNumberOfRepaymentsParameterName = "maxNumberOfRepayments";
Integer maxNumberOfRepayments = null; Integer maxNumberOfRepayments = null;
if(fromApiJsonHelper.parameterExists(maxNumberOfRepaymentsParameterName, element)){ if (fromApiJsonHelper.parameterExists(maxNumberOfRepaymentsParameterName, element)) {
maxNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(maxNumberOfRepaymentsParameterName, element); maxNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(maxNumberOfRepaymentsParameterName, element);
baseDataValidator.reset().parameter(maxNumberOfRepaymentsParameterName).value(maxNumberOfRepayments).ignoreIfNull().integerGreaterThanZero(); baseDataValidator.reset().parameter(maxNumberOfRepaymentsParameterName).value(maxNumberOfRepayments).ignoreIfNull()
.integerGreaterThanZero();
} }
if(maxNumberOfRepayments != null && maxNumberOfRepayments.compareTo(0) == 1){ if (maxNumberOfRepayments != null && maxNumberOfRepayments.compareTo(0) == 1) {
if(minNumberOfRepayments != null && minNumberOfRepayments.compareTo(0) == 1){ if (minNumberOfRepayments != null && minNumberOfRepayments.compareTo(0) == 1) {
baseDataValidator.reset().parameter(maxNumberOfRepaymentsParameterName).value(maxNumberOfRepayments).notLessThanMin(minNumberOfRepayments); baseDataValidator.reset().parameter(maxNumberOfRepaymentsParameterName).value(maxNumberOfRepayments)
if(minNumberOfRepayments.compareTo(maxNumberOfRepayments) <= 0){ .notLessThanMin(minNumberOfRepayments);
baseDataValidator.reset().parameter("numberOfRepayments").value(numberOfRepayments).inMinMaxRange(minNumberOfRepayments, maxNumberOfRepayments); if (minNumberOfRepayments.compareTo(maxNumberOfRepayments) <= 0) {
baseDataValidator.reset().parameter("numberOfRepayments").value(numberOfRepayments)
.inMinMaxRange(minNumberOfRepayments, maxNumberOfRepayments);
} }
}else{ } else {
baseDataValidator.reset().parameter("numberOfRepayments").value(numberOfRepayments).notGreaterThanMax(maxNumberOfRepayments); baseDataValidator.reset().parameter("numberOfRepayments").value(numberOfRepayments)
.notGreaterThanMax(maxNumberOfRepayments);
} }
}else if(minNumberOfRepayments != null && minNumberOfRepayments.compareTo(0) == 1){ } else if (minNumberOfRepayments != null && minNumberOfRepayments.compareTo(0) == 1) {
baseDataValidator.reset().parameter("numberOfRepayments").value(numberOfRepayments).notLessThanMin(minNumberOfRepayments); baseDataValidator.reset().parameter("numberOfRepayments").value(numberOfRepayments).notLessThanMin(minNumberOfRepayments);
} }
@@ -155,29 +161,35 @@ public final class LoanProductCommandFromApiJsonDeserializer {
String minInterestRatePerPeriodParameterName = "minInterestRatePerPeriod"; String minInterestRatePerPeriodParameterName = "minInterestRatePerPeriod";
BigDecimal minInterestRatePerPeriod = null; BigDecimal minInterestRatePerPeriod = null;
if(fromApiJsonHelper.parameterExists(minInterestRatePerPeriodParameterName, element)){ if (fromApiJsonHelper.parameterExists(minInterestRatePerPeriodParameterName, element)) {
minInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minInterestRatePerPeriodParameterName, element); minInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minInterestRatePerPeriodParameterName, element);
baseDataValidator.reset().parameter(minInterestRatePerPeriodParameterName).value(minInterestRatePerPeriod).ignoreIfNull().zeroOrPositiveAmount(); baseDataValidator.reset().parameter(minInterestRatePerPeriodParameterName).value(minInterestRatePerPeriod).ignoreIfNull()
.zeroOrPositiveAmount();
} }
String maxInterestRatePerPeriodParameterName = "maxInterestRatePerPeriod"; String maxInterestRatePerPeriodParameterName = "maxInterestRatePerPeriod";
BigDecimal maxInterestRatePerPeriod = null; BigDecimal maxInterestRatePerPeriod = null;
if(fromApiJsonHelper.parameterExists(maxInterestRatePerPeriodParameterName, element)){ if (fromApiJsonHelper.parameterExists(maxInterestRatePerPeriodParameterName, element)) {
maxInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxInterestRatePerPeriodParameterName, element); maxInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxInterestRatePerPeriodParameterName, element);
baseDataValidator.reset().parameter(maxInterestRatePerPeriodParameterName).value(maxInterestRatePerPeriod).ignoreIfNull().zeroOrPositiveAmount(); baseDataValidator.reset().parameter(maxInterestRatePerPeriodParameterName).value(maxInterestRatePerPeriod).ignoreIfNull()
.zeroOrPositiveAmount();
} }
if(maxInterestRatePerPeriod != null && maxInterestRatePerPeriod.compareTo(BigDecimal.ZERO) != -1){ if (maxInterestRatePerPeriod != null && maxInterestRatePerPeriod.compareTo(BigDecimal.ZERO) != -1) {
if(minInterestRatePerPeriod != null && minInterestRatePerPeriod.compareTo(BigDecimal.ZERO) != -1){ if (minInterestRatePerPeriod != null && minInterestRatePerPeriod.compareTo(BigDecimal.ZERO) != -1) {
baseDataValidator.reset().parameter(maxInterestRatePerPeriodParameterName).value(maxInterestRatePerPeriod).notLessThanMin(minInterestRatePerPeriod); baseDataValidator.reset().parameter(maxInterestRatePerPeriodParameterName).value(maxInterestRatePerPeriod)
if(minInterestRatePerPeriod.compareTo(maxInterestRatePerPeriod) <= 0){ .notLessThanMin(minInterestRatePerPeriod);
baseDataValidator.reset().parameter("interestRatePerPeriod").value(interestRatePerPeriod).inMinAndMaxAmountRange(minInterestRatePerPeriod, maxInterestRatePerPeriod); if (minInterestRatePerPeriod.compareTo(maxInterestRatePerPeriod) <= 0) {
baseDataValidator.reset().parameter("interestRatePerPeriod").value(interestRatePerPeriod)
.inMinAndMaxAmountRange(minInterestRatePerPeriod, maxInterestRatePerPeriod);
} }
}else{ } else {
baseDataValidator.reset().parameter("interestRatePerPeriod").value(interestRatePerPeriod).notGreaterThanMax(maxInterestRatePerPeriod); baseDataValidator.reset().parameter("interestRatePerPeriod").value(interestRatePerPeriod)
.notGreaterThanMax(maxInterestRatePerPeriod);
} }
}else if(minInterestRatePerPeriod != null && minInterestRatePerPeriod.compareTo(BigDecimal.ZERO) != -1){ } else if (minInterestRatePerPeriod != null && minInterestRatePerPeriod.compareTo(BigDecimal.ZERO) != -1) {
baseDataValidator.reset().parameter("interestRatePerPeriod").value(interestRatePerPeriod).notLessThanMin(minInterestRatePerPeriod); baseDataValidator.reset().parameter("interestRatePerPeriod").value(interestRatePerPeriod)
.notLessThanMin(minInterestRatePerPeriod);
} }
final Integer interestRateFrequencyType = fromApiJsonHelper.extractIntegerNamed("interestRateFrequencyType", element, final Integer interestRateFrequencyType = fromApiJsonHelper.extractIntegerNamed("interestRateFrequencyType", element,
@@ -298,14 +310,14 @@ public final class LoanProductCommandFromApiJsonDeserializer {
String minPrincipalParameterName = "minPrincipal"; String minPrincipalParameterName = "minPrincipal";
BigDecimal minPrincipalAmount = null; BigDecimal minPrincipalAmount = null;
if(fromApiJsonHelper.parameterExists(minPrincipalParameterName, element)){ if (fromApiJsonHelper.parameterExists(minPrincipalParameterName, element)) {
minPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minPrincipalParameterName, element); minPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minPrincipalParameterName, element);
baseDataValidator.reset().parameter(minPrincipalParameterName).value(minPrincipalAmount).ignoreIfNull().positiveAmount(); baseDataValidator.reset().parameter(minPrincipalParameterName).value(minPrincipalAmount).ignoreIfNull().positiveAmount();
} }
String maxPrincipalParameterName = "maxPrincipal"; String maxPrincipalParameterName = "maxPrincipal";
BigDecimal maxPrincipalAmount = null; BigDecimal maxPrincipalAmount = null;
if(fromApiJsonHelper.parameterExists(maxPrincipalParameterName, element)){ if (fromApiJsonHelper.parameterExists(maxPrincipalParameterName, element)) {
maxPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxPrincipalParameterName, element); maxPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxPrincipalParameterName, element);
baseDataValidator.reset().parameter(maxPrincipalParameterName).value(maxPrincipalAmount).ignoreIfNull().positiveAmount(); baseDataValidator.reset().parameter(maxPrincipalParameterName).value(maxPrincipalAmount).ignoreIfNull().positiveAmount();
} }
@@ -324,33 +336,37 @@ public final class LoanProductCommandFromApiJsonDeserializer {
BigDecimal minInterestRatePerPeriod = null; BigDecimal minInterestRatePerPeriod = null;
if (fromApiJsonHelper.parameterExists(minInterestRatePerPeriodParameterName, element)) { if (fromApiJsonHelper.parameterExists(minInterestRatePerPeriodParameterName, element)) {
minInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minInterestRatePerPeriodParameterName, element); minInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minInterestRatePerPeriodParameterName, element);
baseDataValidator.reset().parameter(minInterestRatePerPeriodParameterName).value(minInterestRatePerPeriod).ignoreIfNull().zeroOrPositiveAmount(); baseDataValidator.reset().parameter(minInterestRatePerPeriodParameterName).value(minInterestRatePerPeriod).ignoreIfNull()
.zeroOrPositiveAmount();
} }
String maxInterestRatePerPeriodParameterName = "maxInterestRatePerPeriod"; String maxInterestRatePerPeriodParameterName = "maxInterestRatePerPeriod";
BigDecimal maxInterestRatePerPeriod = null; BigDecimal maxInterestRatePerPeriod = null;
if (fromApiJsonHelper.parameterExists(maxInterestRatePerPeriodParameterName, element)) { if (fromApiJsonHelper.parameterExists(maxInterestRatePerPeriodParameterName, element)) {
maxInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxInterestRatePerPeriodParameterName, element); maxInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxInterestRatePerPeriodParameterName, element);
baseDataValidator.reset().parameter(maxInterestRatePerPeriodParameterName).value(maxInterestRatePerPeriod).ignoreIfNull().zeroOrPositiveAmount(); baseDataValidator.reset().parameter(maxInterestRatePerPeriodParameterName).value(maxInterestRatePerPeriod).ignoreIfNull()
.zeroOrPositiveAmount();
} }
if (fromApiJsonHelper.parameterExists("interestRatePerPeriod", element)) { if (fromApiJsonHelper.parameterExists("interestRatePerPeriod", element)) {
final BigDecimal interestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed("interestRatePerPeriod", element); final BigDecimal interestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed("interestRatePerPeriod", element);
baseDataValidator.reset().parameter("interestRatePerPeriod").value(interestRatePerPeriod).notNull().positiveAmount(); baseDataValidator.reset().parameter("interestRatePerPeriod").value(interestRatePerPeriod).notNull().zeroOrPositiveAmount();
} }
String minNumberOfRepaymentsParameterName = "minNumberOfRepayments"; String minNumberOfRepaymentsParameterName = "minNumberOfRepayments";
Integer minNumberOfRepayments = null; Integer minNumberOfRepayments = null;
if (fromApiJsonHelper.parameterExists(minNumberOfRepaymentsParameterName, element)) { if (fromApiJsonHelper.parameterExists(minNumberOfRepaymentsParameterName, element)) {
minNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(minNumberOfRepaymentsParameterName, element); minNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(minNumberOfRepaymentsParameterName, element);
baseDataValidator.reset().parameter(minNumberOfRepaymentsParameterName).value(minNumberOfRepayments).ignoreIfNull().integerGreaterThanZero(); baseDataValidator.reset().parameter(minNumberOfRepaymentsParameterName).value(minNumberOfRepayments).ignoreIfNull()
.integerGreaterThanZero();
} }
String maxNumberOfRepaymentsParameterName = "maxNumberOfRepayments"; String maxNumberOfRepaymentsParameterName = "maxNumberOfRepayments";
Integer maxNumberOfRepayments = null; Integer maxNumberOfRepayments = null;
if (fromApiJsonHelper.parameterExists(maxNumberOfRepaymentsParameterName, element)) { if (fromApiJsonHelper.parameterExists(maxNumberOfRepaymentsParameterName, element)) {
maxNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(maxNumberOfRepaymentsParameterName, element); maxNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(maxNumberOfRepaymentsParameterName, element);
baseDataValidator.reset().parameter(maxNumberOfRepaymentsParameterName).value(maxNumberOfRepayments).ignoreIfNull().integerGreaterThanZero(); baseDataValidator.reset().parameter(maxNumberOfRepaymentsParameterName).value(maxNumberOfRepayments).ignoreIfNull()
.integerGreaterThanZero();
} }
if (fromApiJsonHelper.parameterExists("numberOfRepayments", element)) { if (fromApiJsonHelper.parameterExists("numberOfRepayments", element)) {
@@ -450,7 +466,8 @@ public final class LoanProductCommandFromApiJsonDeserializer {
throwExceptionIfValidationWarningsExist(dataValidationErrors); throwExceptionIfValidationWarningsExist(dataValidationErrors);
} }
public void validateMinMaxConstraints(final JsonElement element, final DataValidatorBuilder baseDataValidator, final LoanProduct loanProduct){ public void validateMinMaxConstraints(final JsonElement element, final DataValidatorBuilder baseDataValidator,
final LoanProduct loanProduct) {
validatePrincipalMinMaxConstraint(element, loanProduct, baseDataValidator); validatePrincipalMinMaxConstraint(element, loanProduct, baseDataValidator);
@@ -459,7 +476,8 @@ public final class LoanProductCommandFromApiJsonDeserializer {
validateNominalInterestRatePerPeriodMinMaxConstraint(element, loanProduct, baseDataValidator); validateNominalInterestRatePerPeriodMinMaxConstraint(element, loanProduct, baseDataValidator);
} }
private void validatePrincipalMinMaxConstraint(final JsonElement element, final LoanProduct loanProduct, final DataValidatorBuilder baseDataValidator) { private void validatePrincipalMinMaxConstraint(final JsonElement element, final LoanProduct loanProduct,
final DataValidatorBuilder baseDataValidator) {
boolean principalUpdated = false; boolean principalUpdated = false;
boolean minPrincipalUpdated = false; boolean minPrincipalUpdated = false;
@@ -469,51 +487,55 @@ public final class LoanProductCommandFromApiJsonDeserializer {
if (fromApiJsonHelper.parameterExists(principalParameterName, element)) { if (fromApiJsonHelper.parameterExists(principalParameterName, element)) {
principalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(principalParameterName, element); principalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(principalParameterName, element);
principalUpdated = true; principalUpdated = true;
}else{ } else {
principalAmount = loanProduct.getPrincipalAmount().getAmount(); principalAmount = loanProduct.getPrincipalAmount().getAmount();
} }
String minPrincipalParameterName = "minPrincipal"; String minPrincipalParameterName = "minPrincipal";
BigDecimal minPrincipalAmount = null; BigDecimal minPrincipalAmount = null;
if(fromApiJsonHelper.parameterExists(minPrincipalParameterName, element)){ if (fromApiJsonHelper.parameterExists(minPrincipalParameterName, element)) {
minPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minPrincipalParameterName, element); minPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minPrincipalParameterName, element);
minPrincipalUpdated = true; minPrincipalUpdated = true;
}else{ } else {
minPrincipalAmount = loanProduct.getMinPrincipalAmount().getAmount(); minPrincipalAmount = loanProduct.getMinPrincipalAmount().getAmount();
} }
String maxPrincipalParameterName = "maxPrincipal"; String maxPrincipalParameterName = "maxPrincipal";
BigDecimal maxPrincipalAmount = null; BigDecimal maxPrincipalAmount = null;
if(fromApiJsonHelper.parameterExists(maxPrincipalParameterName, element)){ if (fromApiJsonHelper.parameterExists(maxPrincipalParameterName, element)) {
maxPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxPrincipalParameterName, element); maxPrincipalAmount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxPrincipalParameterName, element);
maxPrincipalUpdated = true; maxPrincipalUpdated = true;
}else{ } else {
maxPrincipalAmount = loanProduct.getMaxPrincipalAmount().getAmount(); maxPrincipalAmount = loanProduct.getMaxPrincipalAmount().getAmount();
} }
if(minPrincipalUpdated){ if (minPrincipalUpdated) {
baseDataValidator.reset().parameter(minPrincipalParameterName).value(minPrincipalAmount).notGreaterThanMax(maxPrincipalAmount); baseDataValidator.reset().parameter(minPrincipalParameterName).value(minPrincipalAmount).notGreaterThanMax(maxPrincipalAmount);
} }
if(maxPrincipalUpdated){ if (maxPrincipalUpdated) {
baseDataValidator.reset().parameter(maxPrincipalParameterName).value(maxPrincipalAmount).notLessThanMin(minPrincipalAmount); baseDataValidator.reset().parameter(maxPrincipalParameterName).value(maxPrincipalAmount).notLessThanMin(minPrincipalAmount);
} }
if((principalUpdated || minPrincipalUpdated || maxPrincipalUpdated)){ if ((principalUpdated || minPrincipalUpdated || maxPrincipalUpdated)) {
if((minPrincipalAmount != null && minPrincipalAmount.compareTo(BigDecimal.ZERO) == 1) && (maxPrincipalAmount != null && maxPrincipalAmount.compareTo(BigDecimal.ZERO) == 1)){ if ((minPrincipalAmount != null && minPrincipalAmount.compareTo(BigDecimal.ZERO) == 1)
baseDataValidator.reset().parameter(principalParameterName).value(principalAmount).inMinAndMaxAmountRange(minPrincipalAmount, maxPrincipalAmount); && (maxPrincipalAmount != null && maxPrincipalAmount.compareTo(BigDecimal.ZERO) == 1)) {
}else{ baseDataValidator.reset().parameter(principalParameterName).value(principalAmount)
if(minPrincipalAmount != null && minPrincipalAmount.compareTo(BigDecimal.ZERO) == 1){ .inMinAndMaxAmountRange(minPrincipalAmount, maxPrincipalAmount);
} else {
if (minPrincipalAmount != null && minPrincipalAmount.compareTo(BigDecimal.ZERO) == 1) {
baseDataValidator.reset().parameter(principalParameterName).value(principalAmount).notLessThanMin(minPrincipalAmount); baseDataValidator.reset().parameter(principalParameterName).value(principalAmount).notLessThanMin(minPrincipalAmount);
}else if(maxPrincipalAmount != null && maxPrincipalAmount.compareTo(BigDecimal.ZERO) == 1){ } else if (maxPrincipalAmount != null && maxPrincipalAmount.compareTo(BigDecimal.ZERO) == 1) {
baseDataValidator.reset().parameter(principalParameterName).value(principalAmount).notGreaterThanMax(maxPrincipalAmount); baseDataValidator.reset().parameter(principalParameterName).value(principalAmount)
.notGreaterThanMax(maxPrincipalAmount);
} }
} }
} }
} }
private void validateNumberOfRepaymentsMinMaxConstraint(final JsonElement element, final LoanProduct loanProduct, final DataValidatorBuilder baseDataValidator) { private void validateNumberOfRepaymentsMinMaxConstraint(final JsonElement element, final LoanProduct loanProduct,
final DataValidatorBuilder baseDataValidator) {
boolean numberOfRepaymentsUpdated = false; boolean numberOfRepaymentsUpdated = false;
boolean minNumberOfRepaymentsUpdated = false; boolean minNumberOfRepaymentsUpdated = false;
boolean maxNumberOfRepaymentsUpdated = false; boolean maxNumberOfRepaymentsUpdated = false;
@@ -523,7 +545,7 @@ public final class LoanProductCommandFromApiJsonDeserializer {
if (fromApiJsonHelper.parameterExists(numberOfRepaymentsParameterName, element)) { if (fromApiJsonHelper.parameterExists(numberOfRepaymentsParameterName, element)) {
numberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(numberOfRepaymentsParameterName, element); numberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(numberOfRepaymentsParameterName, element);
numberOfRepaymentsUpdated = true; numberOfRepaymentsUpdated = true;
}else{ } else {
numberOfRepayments = loanProduct.getNumberOfRepayments(); numberOfRepayments = loanProduct.getNumberOfRepayments();
} }
@@ -532,7 +554,7 @@ public final class LoanProductCommandFromApiJsonDeserializer {
if (fromApiJsonHelper.parameterExists(minNumberOfRepaymentsParameterName, element)) { if (fromApiJsonHelper.parameterExists(minNumberOfRepaymentsParameterName, element)) {
minNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(minNumberOfRepaymentsParameterName, element); minNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(minNumberOfRepaymentsParameterName, element);
minNumberOfRepaymentsUpdated = true; minNumberOfRepaymentsUpdated = true;
}else{ } else {
minNumberOfRepayments = loanProduct.getMinNumberOfRepayments(); minNumberOfRepayments = loanProduct.getMinNumberOfRepayments();
} }
@@ -541,32 +563,38 @@ public final class LoanProductCommandFromApiJsonDeserializer {
if (fromApiJsonHelper.parameterExists(maxNumberOfRepaymentsParameterName, element)) { if (fromApiJsonHelper.parameterExists(maxNumberOfRepaymentsParameterName, element)) {
maxNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(maxNumberOfRepaymentsParameterName, element); maxNumberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed(maxNumberOfRepaymentsParameterName, element);
maxNumberOfRepaymentsUpdated = true; maxNumberOfRepaymentsUpdated = true;
}else{ } else {
maxNumberOfRepayments = loanProduct.getMaxNumberOfRepayments(); maxNumberOfRepayments = loanProduct.getMaxNumberOfRepayments();
} }
if(minNumberOfRepaymentsUpdated){ if (minNumberOfRepaymentsUpdated) {
baseDataValidator.reset().parameter(minNumberOfRepaymentsParameterName).value(minNumberOfRepayments).ignoreIfNull().notGreaterThanMax(maxNumberOfRepayments); baseDataValidator.reset().parameter(minNumberOfRepaymentsParameterName).value(minNumberOfRepayments).ignoreIfNull()
.notGreaterThanMax(maxNumberOfRepayments);
} }
if(maxNumberOfRepaymentsUpdated){ if (maxNumberOfRepaymentsUpdated) {
baseDataValidator.reset().parameter(maxNumberOfRepaymentsParameterName).value(maxNumberOfRepayments).notLessThanMin(minNumberOfRepayments); baseDataValidator.reset().parameter(maxNumberOfRepaymentsParameterName).value(maxNumberOfRepayments)
.notLessThanMin(minNumberOfRepayments);
} }
if(numberOfRepaymentsUpdated || minNumberOfRepaymentsUpdated || maxNumberOfRepaymentsUpdated){ if (numberOfRepaymentsUpdated || minNumberOfRepaymentsUpdated || maxNumberOfRepaymentsUpdated) {
if(maxNumberOfRepayments != null && maxNumberOfRepayments.compareTo(0) == 1){ if (maxNumberOfRepayments != null && maxNumberOfRepayments.compareTo(0) == 1) {
if(minNumberOfRepayments != null && minNumberOfRepayments.compareTo(0) == 1){ if (minNumberOfRepayments != null && minNumberOfRepayments.compareTo(0) == 1) {
baseDataValidator.reset().parameter(numberOfRepaymentsParameterName).value(numberOfRepayments).inMinMaxRange(minNumberOfRepayments, maxNumberOfRepayments); baseDataValidator.reset().parameter(numberOfRepaymentsParameterName).value(numberOfRepayments)
}else{ .inMinMaxRange(minNumberOfRepayments, maxNumberOfRepayments);
baseDataValidator.reset().parameter(numberOfRepaymentsParameterName).value(numberOfRepayments).notGreaterThanMax(maxNumberOfRepayments); } else {
baseDataValidator.reset().parameter(numberOfRepaymentsParameterName).value(numberOfRepayments)
.notGreaterThanMax(maxNumberOfRepayments);
} }
}else if(minNumberOfRepayments != null && minNumberOfRepayments.compareTo(0) == 1){ } else if (minNumberOfRepayments != null && minNumberOfRepayments.compareTo(0) == 1) {
baseDataValidator.reset().parameter(numberOfRepaymentsParameterName).value(numberOfRepayments).notLessThanMin(minNumberOfRepayments); baseDataValidator.reset().parameter(numberOfRepaymentsParameterName).value(numberOfRepayments)
.notLessThanMin(minNumberOfRepayments);
} }
} }
} }
private void validateNominalInterestRatePerPeriodMinMaxConstraint(final JsonElement element, final LoanProduct loanProduct, final DataValidatorBuilder baseDataValidator) { private void validateNominalInterestRatePerPeriodMinMaxConstraint(final JsonElement element, final LoanProduct loanProduct,
final DataValidatorBuilder baseDataValidator) {
boolean iRPUpdated = false; boolean iRPUpdated = false;
boolean minIRPUpdated = false; boolean minIRPUpdated = false;
@@ -577,7 +605,7 @@ public final class LoanProductCommandFromApiJsonDeserializer {
if (fromApiJsonHelper.parameterExists(interestRatePerPeriodParameterName, element)) { if (fromApiJsonHelper.parameterExists(interestRatePerPeriodParameterName, element)) {
interestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(interestRatePerPeriodParameterName, element); interestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(interestRatePerPeriodParameterName, element);
iRPUpdated = true; iRPUpdated = true;
}else{ } else {
interestRatePerPeriod = loanProduct.getNominalInterestRatePerPeriod(); interestRatePerPeriod = loanProduct.getNominalInterestRatePerPeriod();
} }
@@ -586,7 +614,7 @@ public final class LoanProductCommandFromApiJsonDeserializer {
if (fromApiJsonHelper.parameterExists(minInterestRatePerPeriodParameterName, element)) { if (fromApiJsonHelper.parameterExists(minInterestRatePerPeriodParameterName, element)) {
minInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minInterestRatePerPeriodParameterName, element); minInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(minInterestRatePerPeriodParameterName, element);
minIRPUpdated = true; minIRPUpdated = true;
}else{ } else {
minInterestRatePerPeriod = loanProduct.getMinNominalInterestRatePerPeriod(); minInterestRatePerPeriod = loanProduct.getMinNominalInterestRatePerPeriod();
} }
@@ -595,27 +623,32 @@ public final class LoanProductCommandFromApiJsonDeserializer {
if (fromApiJsonHelper.parameterExists(maxInterestRatePerPeriodParameterName, element)) { if (fromApiJsonHelper.parameterExists(maxInterestRatePerPeriodParameterName, element)) {
maxInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxInterestRatePerPeriodParameterName, element); maxInterestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed(maxInterestRatePerPeriodParameterName, element);
maxIRPUpdated = true; maxIRPUpdated = true;
}else{ } else {
maxInterestRatePerPeriod = loanProduct.getMaxNominalInterestRatePerPeriod(); maxInterestRatePerPeriod = loanProduct.getMaxNominalInterestRatePerPeriod();
} }
if(minIRPUpdated){ if (minIRPUpdated) {
baseDataValidator.reset().parameter(minInterestRatePerPeriodParameterName).value(minInterestRatePerPeriod).ignoreIfNull().notGreaterThanMax(maxInterestRatePerPeriod); baseDataValidator.reset().parameter(minInterestRatePerPeriodParameterName).value(minInterestRatePerPeriod).ignoreIfNull()
.notGreaterThanMax(maxInterestRatePerPeriod);
} }
if(maxIRPUpdated){ if (maxIRPUpdated) {
baseDataValidator.reset().parameter(maxInterestRatePerPeriodParameterName).value(maxInterestRatePerPeriod).ignoreIfNull().notLessThanMin(minInterestRatePerPeriod); baseDataValidator.reset().parameter(maxInterestRatePerPeriodParameterName).value(maxInterestRatePerPeriod).ignoreIfNull()
.notLessThanMin(minInterestRatePerPeriod);
} }
if(iRPUpdated || minIRPUpdated || maxIRPUpdated){ if (iRPUpdated || minIRPUpdated || maxIRPUpdated) {
if(maxInterestRatePerPeriod != null){ if (maxInterestRatePerPeriod != null) {
if(minInterestRatePerPeriod != null){ if (minInterestRatePerPeriod != null) {
baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod).inMinAndMaxAmountRange(minInterestRatePerPeriod, maxInterestRatePerPeriod); baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod)
}else{ .inMinAndMaxAmountRange(minInterestRatePerPeriod, maxInterestRatePerPeriod);
baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod).notGreaterThanMax(maxInterestRatePerPeriod); } else {
baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod)
.notGreaterThanMax(maxInterestRatePerPeriod);
} }
}else if(minInterestRatePerPeriod != null){ } else if (minInterestRatePerPeriod != null) {
baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod).notLessThanMin(minInterestRatePerPeriod); baseDataValidator.reset().parameter(interestRatePerPeriodParameterName).value(interestRatePerPeriod)
.notLessThanMin(minInterestRatePerPeriod);
} }
} }
} }