From cb8cbd2043fe2d3074594d5331eb81bfa8c3809a Mon Sep 17 00:00:00 2001 From: "adam.magyari" Date: Mon, 14 Apr 2025 12:14:13 +0200 Subject: [PATCH] FINERACT-2232: Generalization of StringEnumOptionData enums --- .../core/api/ApiFacingEnum.java | 43 +++++++++++++++++++ .../domain/DaysInYearCustomStrategyType.java | 17 +------- .../LoanCapitalizedIncomeCalculationType.java | 18 +------- .../domain/LoanCapitalizedIncomeStrategy.java | 17 +------- .../domain/LoanChargeOffBehaviour.java | 13 +----- .../loanproduct/data/LoanProductData.java | 8 ++-- .../LoanSupportedInterestRefundTypes.java | 13 +----- .../loanaccount/api/LoansApiResource.java | 7 +-- .../service/LoanReadPlatformServiceImpl.java | 13 +++--- .../api/LoanProductsApiResource.java | 20 +++++---- .../LoanProductReadPlatformServiceImpl.java | 13 +++--- 11 files changed, 87 insertions(+), 95 deletions(-) create mode 100644 fineract-core/src/main/java/org/apache/fineract/infrastructure/core/api/ApiFacingEnum.java diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/api/ApiFacingEnum.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/api/ApiFacingEnum.java new file mode 100644 index 000000000..9b73a7f90 --- /dev/null +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/api/ApiFacingEnum.java @@ -0,0 +1,43 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.core.api; + +import java.util.Arrays; +import java.util.List; +import org.apache.fineract.infrastructure.core.data.StringEnumOptionData; + +public interface ApiFacingEnum & ApiFacingEnum> { + + static & ApiFacingEnum> List getValuesAsStringEnumOptionDataList(Class clazz) { + return Arrays.stream(clazz.getEnumConstants()).map(v -> new StringEnumOptionData(v.name(), v.getCode(), v.getHumanReadableName())) + .toList(); + } + + static & ApiFacingEnum> StringEnumOptionData getStringEnumOptionData(Class clazz, String name) { + return name == null || name.trim().isEmpty() ? null : Enum.valueOf(clazz, name).getValueAsStringEnumOptionData(); + } + + default StringEnumOptionData getValueAsStringEnumOptionData() { + return new StringEnumOptionData(((Enum) this).name(), getCode(), getHumanReadableName()); + } + + String getCode(); + + String getHumanReadableName(); +} diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInYearCustomStrategyType.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInYearCustomStrategyType.java index 97bdf8c99..80d62d90f 100644 --- a/fineract-core/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInYearCustomStrategyType.java +++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/common/domain/DaysInYearCustomStrategyType.java @@ -18,11 +18,9 @@ */ package org.apache.fineract.portfolio.common.domain; -import java.util.Arrays; -import java.util.List; import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.apache.fineract.infrastructure.core.data.StringEnumOptionData; +import org.apache.fineract.infrastructure.core.api.ApiFacingEnum; /** * Defines the method of leap year calculation for determining the number of days in a year. @@ -53,7 +51,7 @@ import org.apache.fineract.infrastructure.core.data.StringEnumOptionData; */ @Getter @RequiredArgsConstructor -public enum DaysInYearCustomStrategyType { +public enum DaysInYearCustomStrategyType implements ApiFacingEnum { /** Always considers 366 days in a leap year. */ FULL_LEAP_YEAR("DaysInYearCustomStrategyType.fullLeapYear", "Full Leap Year"), @@ -64,15 +62,4 @@ public enum DaysInYearCustomStrategyType { private final String code; private final String humanReadableName; - public static List getValuesAsStringEnumOptionDataList() { - return Arrays.stream(values()).map(v -> new StringEnumOptionData(v.name(), v.getCode(), v.getHumanReadableName())).toList(); - } - - public StringEnumOptionData getValueAsStringEnumOptionData() { - return new StringEnumOptionData(name(), getCode(), getHumanReadableName()); - } - - public static StringEnumOptionData getStringEnumOptionData(String name) { - return name == null || name.trim().isEmpty() ? null : DaysInYearCustomStrategyType.valueOf(name).getValueAsStringEnumOptionData(); - } } diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCapitalizedIncomeCalculationType.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCapitalizedIncomeCalculationType.java index 5916b0074..8b30a9459 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCapitalizedIncomeCalculationType.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCapitalizedIncomeCalculationType.java @@ -18,31 +18,17 @@ */ package org.apache.fineract.portfolio.loanaccount.domain; -import java.util.Arrays; -import java.util.List; import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.apache.fineract.infrastructure.core.data.StringEnumOptionData; +import org.apache.fineract.infrastructure.core.api.ApiFacingEnum; @Getter @RequiredArgsConstructor -public enum LoanCapitalizedIncomeCalculationType { +public enum LoanCapitalizedIncomeCalculationType implements ApiFacingEnum { FLAT("loanCapitalizedIncomeCalculationType.flat", "Flat"); private final String code; private final String humanReadableName; - public static List getValuesAsStringEnumOptionDataList() { - return Arrays.stream(values()).map(v -> new StringEnumOptionData(v.name(), v.getCode(), v.getHumanReadableName())).toList(); - } - - public StringEnumOptionData getValueAsStringEnumOptionData() { - return new StringEnumOptionData(name(), getCode(), getHumanReadableName()); - } - - public static StringEnumOptionData getStringEnumOptionData(String name) { - return name == null || name.trim().isEmpty() ? null - : LoanCapitalizedIncomeCalculationType.valueOf(name).getValueAsStringEnumOptionData(); - } } diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCapitalizedIncomeStrategy.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCapitalizedIncomeStrategy.java index b0d489ce6..16df54bae 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCapitalizedIncomeStrategy.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCapitalizedIncomeStrategy.java @@ -18,30 +18,17 @@ */ package org.apache.fineract.portfolio.loanaccount.domain; -import java.util.Arrays; -import java.util.List; import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.apache.fineract.infrastructure.core.data.StringEnumOptionData; +import org.apache.fineract.infrastructure.core.api.ApiFacingEnum; @Getter @RequiredArgsConstructor -public enum LoanCapitalizedIncomeStrategy { +public enum LoanCapitalizedIncomeStrategy implements ApiFacingEnum { EQUAL_AMORTIZATION("capitalizedIncome.strategy.equalAmortization", "Equal amortization"); private final String code; private final String humanReadableName; - public static List getValuesAsStringEnumOptionDataList() { - return Arrays.stream(values()).map(v -> new StringEnumOptionData(v.name(), v.getCode(), v.getHumanReadableName())).toList(); - } - - public StringEnumOptionData getValueAsStringEnumOptionData() { - return new StringEnumOptionData(name(), getCode(), getHumanReadableName()); - } - - public static StringEnumOptionData getStringEnumOptionData(String name) { - return name == null || name.trim().isEmpty() ? null : LoanCapitalizedIncomeStrategy.valueOf(name).getValueAsStringEnumOptionData(); - } } diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanChargeOffBehaviour.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanChargeOffBehaviour.java index 7d7ee2a38..0441e9fec 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanChargeOffBehaviour.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanChargeOffBehaviour.java @@ -18,15 +18,13 @@ */ package org.apache.fineract.portfolio.loanaccount.domain; -import java.util.Arrays; -import java.util.List; import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.apache.fineract.infrastructure.core.data.StringEnumOptionData; +import org.apache.fineract.infrastructure.core.api.ApiFacingEnum; @Getter @RequiredArgsConstructor -public enum LoanChargeOffBehaviour { +public enum LoanChargeOffBehaviour implements ApiFacingEnum { REGULAR("chargeOffBehaviour.regular", "Regular"), // ZERO_INTEREST("chargeOffBehaviour.zeroInterest", "Zero interest after charge-off"), // @@ -36,11 +34,4 @@ public enum LoanChargeOffBehaviour { private final String code; private final String humanReadableName; - public static List getValuesAsStringEnumOptionDataList() { - return Arrays.stream(values()).map(v -> new StringEnumOptionData(v.name(), v.getCode(), v.getHumanReadableName())).toList(); - } - - public StringEnumOptionData getValueAsStringEnumOptionData() { - return new StringEnumOptionData(name(), getCode(), getHumanReadableName()); - } } diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java index 4ed7c2382..bcece9c7a 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java @@ -34,6 +34,7 @@ import org.apache.fineract.accounting.producttoaccountmapping.data.ChargeOffReas import org.apache.fineract.accounting.producttoaccountmapping.data.ChargeToGLAccountMapper; import org.apache.fineract.accounting.producttoaccountmapping.data.PaymentTypeToGLAccountMapper; import org.apache.fineract.infrastructure.codes.data.CodeValueData; +import org.apache.fineract.infrastructure.core.api.ApiFacingEnum; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.data.StringEnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; @@ -976,9 +977,10 @@ public class LoanProductData implements Serializable { this.chargeOffBehaviourOptions = null; this.chargeOffReasonOptions = null; this.interestRecognitionOnDisbursementDate = interestRecognitionOnDisbursementDate; - this.daysInYearCustomStrategyOptions = DaysInYearCustomStrategyType.getValuesAsStringEnumOptionDataList(); - this.capitalizedIncomeCalculationTypeOptions = LoanCapitalizedIncomeCalculationType.getValuesAsStringEnumOptionDataList(); - this.capitalizedIncomeStrategyOptions = LoanCapitalizedIncomeStrategy.getValuesAsStringEnumOptionDataList(); + this.daysInYearCustomStrategyOptions = ApiFacingEnum.getValuesAsStringEnumOptionDataList(DaysInYearCustomStrategyType.class); + this.capitalizedIncomeCalculationTypeOptions = ApiFacingEnum + .getValuesAsStringEnumOptionDataList(LoanCapitalizedIncomeCalculationType.class); + this.capitalizedIncomeStrategyOptions = ApiFacingEnum.getValuesAsStringEnumOptionDataList(LoanCapitalizedIncomeStrategy.class); } public LoanProductData(final LoanProductData productData, final Collection chargeOptions, diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanSupportedInterestRefundTypes.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanSupportedInterestRefundTypes.java index 565c862ee..9e8990800 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanSupportedInterestRefundTypes.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanSupportedInterestRefundTypes.java @@ -18,16 +18,14 @@ */ package org.apache.fineract.portfolio.loanproduct.domain; -import java.util.Arrays; -import java.util.List; import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.apache.fineract.infrastructure.core.data.StringEnumOptionData; +import org.apache.fineract.infrastructure.core.api.ApiFacingEnum; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType; @Getter @RequiredArgsConstructor -public enum LoanSupportedInterestRefundTypes { +public enum LoanSupportedInterestRefundTypes implements ApiFacingEnum { MERCHANT_ISSUED_REFUND(LoanTransactionType.MERCHANT_ISSUED_REFUND, "loanRefundType.merchant_issued_refund", "Merchant issued refund"), // PAYOUT_REFUND(LoanTransactionType.PAYOUT_REFUND, "loanRefundType.payout_refund", "Payout refund"), // @@ -37,11 +35,4 @@ public enum LoanSupportedInterestRefundTypes { private final String code; private final String humanReadableName; - public static List getValuesAsStringEnumOptionDataList() { - return Arrays.stream(values()).map(v -> new StringEnumOptionData(v.name(), v.getCode(), v.getHumanReadableName())).toList(); - } - - public StringEnumOptionData getValueAsStringEnumOptionData() { - return new StringEnumOptionData(name(), getCode(), getHumanReadableName()); - } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java index b57888bc0..b3485d178 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java @@ -67,6 +67,7 @@ import org.apache.fineract.infrastructure.bulkimport.service.BulkImportWorkbookS import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.codes.service.CodeValueReadPlatformService; import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; +import org.apache.fineract.infrastructure.core.api.ApiFacingEnum; import org.apache.fineract.infrastructure.core.api.ApiParameterHelper; import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper; import org.apache.fineract.infrastructure.core.api.JsonQuery; @@ -1137,9 +1138,9 @@ public class LoansApiResource { loanCollateralOptions, calendarOptions, notes, accountLinkingOptions, linkedAccount, disbursementData, emiAmountVariations, overdueCharges, paidInAdvanceTemplate, interestRatesPeriods, clientActiveLoanOptions, rates, isRatesEnabled, collectionData, LoanScheduleType.getValuesAsEnumOptionDataList(), LoanScheduleProcessingType.getValuesAsEnumOptionDataList(), - loanTermVariations, DaysInYearCustomStrategyType.getValuesAsStringEnumOptionDataList(), - LoanCapitalizedIncomeCalculationType.getValuesAsStringEnumOptionDataList(), - LoanCapitalizedIncomeStrategy.getValuesAsStringEnumOptionDataList()); + loanTermVariations, ApiFacingEnum.getValuesAsStringEnumOptionDataList(DaysInYearCustomStrategyType.class), + ApiFacingEnum.getValuesAsStringEnumOptionDataList(LoanCapitalizedIncomeCalculationType.class), + ApiFacingEnum.getValuesAsStringEnumOptionDataList(LoanCapitalizedIncomeStrategy.class)); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters(), mandatoryResponseParameters); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index e2399aeea..6cdd34930 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -43,6 +43,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.codes.service.CodeValueReadPlatformService; import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; +import org.apache.fineract.infrastructure.core.api.ApiFacingEnum; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.data.StringEnumOptionData; import org.apache.fineract.infrastructure.core.domain.ExternalId; @@ -1101,13 +1102,13 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa final Integer fixedLength = JdbcSupport.getInteger(rs, "fixedLength"); final LoanChargeOffBehaviour chargeOffBehaviour = LoanChargeOffBehaviour.valueOf(rs.getString("chargeOffBehaviour")); final boolean interestRecognitionOnDisbursementDate = rs.getBoolean("interestRecognitionOnDisbursementDate"); - final StringEnumOptionData daysInYearCustomStrategy = DaysInYearCustomStrategyType - .getStringEnumOptionData(rs.getString("daysInYearCustomStrategy")); + final StringEnumOptionData daysInYearCustomStrategy = ApiFacingEnum.getStringEnumOptionData(DaysInYearCustomStrategyType.class, + rs.getString("daysInYearCustomStrategy")); final boolean enableIncomeCapitalization = rs.getBoolean("enableIncomeCapitalization"); - final StringEnumOptionData capitalizedIncomeCalculationType = LoanCapitalizedIncomeCalculationType - .getStringEnumOptionData(rs.getString("capitalizedIncomeCalculationType")); - final StringEnumOptionData capitalizedIncomeStrategy = LoanCapitalizedIncomeStrategy - .getStringEnumOptionData(rs.getString("capitalizedIncomeStrategy")); + final StringEnumOptionData capitalizedIncomeCalculationType = ApiFacingEnum + .getStringEnumOptionData(LoanCapitalizedIncomeCalculationType.class, rs.getString("capitalizedIncomeCalculationType")); + final StringEnumOptionData capitalizedIncomeStrategy = ApiFacingEnum + .getStringEnumOptionData(LoanCapitalizedIncomeStrategy.class, rs.getString("capitalizedIncomeStrategy")); return LoanAccountData.basicLoanDetails(id, accountNo, status, externalId, clientId, clientAccountNo, clientName, clientOfficeId, clientExternalId, groupData, loanType, loanProductId, loanProductName, loanProductDescription, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java index 271b1f710..eb41c4228 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java @@ -58,6 +58,7 @@ import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformS import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.codes.service.CodeValueReadPlatformService; import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; +import org.apache.fineract.infrastructure.core.api.ApiFacingEnum; import org.apache.fineract.infrastructure.core.api.ApiParameterHelper; import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; @@ -437,17 +438,18 @@ public class LoanProductsApiResource { final List advancedPaymentAllocationTypes = PaymentAllocationType.getValuesAsEnumOptionDataList(); final List creditAllocationTransactionTypes = CreditAllocationTransactionType.getValuesAsEnumOptionDataList(); final List creditAllocationAllocationTypes = AllocationType.getValuesAsEnumOptionDataList(); - final List supportedInterestRefundTypesOptions = LoanSupportedInterestRefundTypes - .getValuesAsStringEnumOptionDataList(); - final List chargeOffBehaviourOptions = LoanChargeOffBehaviour.getValuesAsStringEnumOptionDataList(); + final List supportedInterestRefundTypesOptions = ApiFacingEnum + .getValuesAsStringEnumOptionDataList(LoanSupportedInterestRefundTypes.class); + final List chargeOffBehaviourOptions = ApiFacingEnum + .getValuesAsStringEnumOptionDataList(LoanChargeOffBehaviour.class); final List chargeOffReasonOptions = codeValueReadPlatformService .retrieveCodeValuesByCode(LoanApiConstants.CHARGE_OFF_REASONS); - final List daysInYearCustomStrategyOptions = DaysInYearCustomStrategyType - .getValuesAsStringEnumOptionDataList(); - final List capitalizedIncomeCalculationTypeOptions = LoanCapitalizedIncomeCalculationType - .getValuesAsStringEnumOptionDataList(); - final List capitalizedIncomeStrategyOptions = LoanCapitalizedIncomeStrategy - .getValuesAsStringEnumOptionDataList(); + final List daysInYearCustomStrategyOptions = ApiFacingEnum + .getValuesAsStringEnumOptionDataList(DaysInYearCustomStrategyType.class); + final List capitalizedIncomeCalculationTypeOptions = ApiFacingEnum + .getValuesAsStringEnumOptionDataList(LoanCapitalizedIncomeCalculationType.class); + final List capitalizedIncomeStrategyOptions = ApiFacingEnum + .getValuesAsStringEnumOptionDataList(LoanCapitalizedIncomeStrategy.class); return new LoanProductData(productData, chargeOptions, penaltyOptions, paymentTypeOptions, currencyOptions, amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, repaymentFrequencyTypeOptions, interestRateFrequencyTypeOptions, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java index 4c436216c..7c316aa18 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import lombok.RequiredArgsConstructor; import org.apache.fineract.accounting.common.AccountingEnumerations; +import org.apache.fineract.infrastructure.core.api.ApiFacingEnum; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.data.StringEnumOptionData; import org.apache.fineract.infrastructure.core.domain.ExternalId; @@ -435,8 +436,8 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo final int daysInMonth = JdbcSupport.getInteger(rs, "daysInMonth"); final EnumOptionData daysInMonthType = CommonEnumerations.daysInMonthType(daysInMonth); final int daysInYear = JdbcSupport.getInteger(rs, "daysInYear"); - final StringEnumOptionData daysInYearCustomStrategy = DaysInYearCustomStrategyType - .getStringEnumOptionData(rs.getString("daysInYearCustomStrategy")); + final StringEnumOptionData daysInYearCustomStrategy = ApiFacingEnum.getStringEnumOptionData(DaysInYearCustomStrategyType.class, + rs.getString("daysInYearCustomStrategy")); final EnumOptionData daysInYearType = CommonEnumerations.daysInYearType(daysInYear); final Integer installmentAmountInMultiplesOf = JdbcSupport.getInteger(rs, "installmentAmountInMultiplesOf"); final boolean canDefineInstallmentAmount = rs.getBoolean("canDefineInstallmentAmount"); @@ -558,10 +559,10 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo final LoanChargeOffBehaviour loanChargeOffBehaviour = LoanChargeOffBehaviour.valueOf(chargeOffBehaviourStr); final boolean interestRecognitionOnDisbursementDate = rs.getBoolean("interestRecognitionOnDisbursementDate"); final boolean enableIncomeCapitalization = rs.getBoolean("enableIncomeCapitalization"); - final StringEnumOptionData capitalizedIncomeCalculationType = LoanCapitalizedIncomeCalculationType - .getStringEnumOptionData(rs.getString("capitalizedIncomeCalculationType")); - final StringEnumOptionData capitalizedIncomeStrategy = LoanCapitalizedIncomeStrategy - .getStringEnumOptionData(rs.getString("capitalizedIncomeStrategy")); + final StringEnumOptionData capitalizedIncomeCalculationType = ApiFacingEnum + .getStringEnumOptionData(LoanCapitalizedIncomeCalculationType.class, rs.getString("capitalizedIncomeCalculationType")); + final StringEnumOptionData capitalizedIncomeStrategy = ApiFacingEnum + .getStringEnumOptionData(LoanCapitalizedIncomeStrategy.class, rs.getString("capitalizedIncomeStrategy")); return new LoanProductData(id, name, shortName, description, currency, principal, minPrincipal, maxPrincipal, tolerance, numberOfRepayments, minNumberOfRepayments, maxNumberOfRepayments, repaymentEvery, interestRatePerPeriod,