/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationTransitionApiJsonValidator.java

https://gitlab.com/skylabase/incubator-fineract · Java · 139 lines · 87 code · 34 blank · 18 comment · 4 complexity · 6c95c48358bccfa7ee7093c4bdcde911 MD5 · raw file

  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing,
  13. * software distributed under the License is distributed on an
  14. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15. * KIND, either express or implied. See the License for the
  16. * specific language governing permissions and limitations
  17. * under the License.
  18. */
  19. package org.apache.fineract.portfolio.loanaccount.serialization;
  20. import java.lang.reflect.Type;
  21. import java.math.BigDecimal;
  22. import java.util.ArrayList;
  23. import java.util.Arrays;
  24. import java.util.HashSet;
  25. import java.util.List;
  26. import java.util.Map;
  27. import java.util.Set;
  28. import org.apache.commons.lang.StringUtils;
  29. import org.apache.fineract.infrastructure.core.data.ApiParameterError;
  30. import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
  31. import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
  32. import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
  33. import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
  34. import org.apache.fineract.portfolio.loanaccount.api.LoanApiConstants;
  35. import org.joda.time.LocalDate;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.stereotype.Component;
  38. import com.google.gson.JsonElement;
  39. import com.google.gson.reflect.TypeToken;
  40. @Component
  41. public final class LoanApplicationTransitionApiJsonValidator {
  42. private final FromJsonHelper fromApiJsonHelper;
  43. @Autowired
  44. public LoanApplicationTransitionApiJsonValidator(final FromJsonHelper fromApiJsonHelper) {
  45. this.fromApiJsonHelper = fromApiJsonHelper;
  46. }
  47. private void throwExceptionIfValidationWarningsExist(final List<ApiParameterError> dataValidationErrors) {
  48. if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist",
  49. "Validation errors exist.", dataValidationErrors); }
  50. }
  51. public void validateApproval(final String json) {
  52. if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); }
  53. final Set<String> disbursementParameters = new HashSet<>(Arrays.asList(LoanApiConstants.approvedLoanAmountParameterName,
  54. LoanApiConstants.approvedOnDateParameterName, LoanApiConstants.noteParameterName, LoanApiConstants.localeParameterName,
  55. LoanApiConstants.dateFormatParameterName,LoanApiConstants.disbursementDataParameterName,LoanApiConstants.disbursementDateParameterName));
  56. final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
  57. this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, disbursementParameters);
  58. final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
  59. final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("loanapplication");
  60. final JsonElement element = this.fromApiJsonHelper.parse(json);
  61. final BigDecimal principal = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(
  62. LoanApiConstants.approvedLoanAmountParameterName, element);
  63. baseDataValidator.reset().parameter(LoanApiConstants.approvedLoanAmountParameterName).value(principal).ignoreIfNull()
  64. .positiveAmount();
  65. final LocalDate approvedOnDate = this.fromApiJsonHelper
  66. .extractLocalDateNamed(LoanApiConstants.approvedOnDateParameterName, element);
  67. baseDataValidator.reset().parameter(LoanApiConstants.approvedOnDateParameterName).value(approvedOnDate).notNull();
  68. final LocalDate expectedDisbursementDate = this.fromApiJsonHelper
  69. .extractLocalDateNamed(LoanApiConstants.disbursementDateParameterName, element);
  70. baseDataValidator.reset().parameter(LoanApiConstants.disbursementDateParameterName).value(expectedDisbursementDate).ignoreIfNull();
  71. final String note = this.fromApiJsonHelper.extractStringNamed(LoanApiConstants.noteParameterName, element);
  72. baseDataValidator.reset().parameter(LoanApiConstants.noteParameterName).value(note).notExceedingLengthOf(1000);
  73. throwExceptionIfValidationWarningsExist(dataValidationErrors);
  74. }
  75. public void validateRejection(final String json) {
  76. if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); }
  77. final Set<String> disbursementParameters = new HashSet<>(Arrays.asList(LoanApiConstants.rejectedOnDateParameterName,
  78. LoanApiConstants.noteParameterName, LoanApiConstants.localeParameterName, LoanApiConstants.dateFormatParameterName));
  79. final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
  80. this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, disbursementParameters);
  81. final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
  82. final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("loanapplication");
  83. final JsonElement element = this.fromApiJsonHelper.parse(json);
  84. final LocalDate rejectedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.rejectedOnDateParameterName, element);
  85. baseDataValidator.reset().parameter(LoanApiConstants.rejectedOnDateParameterName).value(rejectedOnDate).notNull();
  86. final String note = this.fromApiJsonHelper.extractStringNamed(LoanApiConstants.noteParameterName, element);
  87. baseDataValidator.reset().parameter(LoanApiConstants.noteParameterName).value(note).notExceedingLengthOf(1000);
  88. throwExceptionIfValidationWarningsExist(dataValidationErrors);
  89. }
  90. public void validateApplicantWithdrawal(final String json) {
  91. if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); }
  92. final Set<String> disbursementParameters = new HashSet<>(Arrays.asList(LoanApiConstants.withdrawnOnDateParameterName,
  93. LoanApiConstants.noteParameterName, LoanApiConstants.localeParameterName, LoanApiConstants.dateFormatParameterName));
  94. final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
  95. this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, disbursementParameters);
  96. final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
  97. final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("loanapplication");
  98. final JsonElement element = this.fromApiJsonHelper.parse(json);
  99. final LocalDate withdrawnOnDate = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.withdrawnOnDateParameterName, element);
  100. baseDataValidator.reset().parameter(LoanApiConstants.withdrawnOnDateParameterName).value(withdrawnOnDate).notNull();
  101. final String note = this.fromApiJsonHelper.extractStringNamed(LoanApiConstants.noteParameterName, element);
  102. baseDataValidator.reset().parameter(LoanApiConstants.noteParameterName).value(note).notExceedingLengthOf(1000);
  103. throwExceptionIfValidationWarningsExist(dataValidationErrors);
  104. }
  105. }