FINERACT-2491: Refactor SavingsEnumerations to use switch expression

This commit is contained in:
Abdelrahman Mostafa
2026-02-17 14:11:32 +00:00
committed by Adam Saghy
parent e4e0082872
commit 92f8b3d0d4
3 changed files with 179 additions and 28 deletions
@@ -59,33 +59,22 @@ public final class SavingsEnumerations {
public static final String INTEREST_CALCULATION_DAYS_IN_YEAR = "interestCalculationDaysInYearType";
public static final String RECURRING_FREQUENCY_TYPE = "recurringFrequencyType";
public static EnumOptionData savingEnumueration(final String typeName, final int id) {
if (typeName.equals(INTEREST_COMPOUNDING_PERIOD_TYPE)) {
return compoundingInterestPeriodType(id);
} else if (typeName.equals(INTEREST_POSTING_PERIOD_TYPE)) {
return interestPostingPeriodType(id);
} else if (typeName.equals(INTEREST_CALCULATION_TYPE)) {
return interestCalculationType(id);
} else if (typeName.equals(MIN_DEPOSIT_TERM_TYPE)) {
return depositTermFrequencyType(id);
} else if (typeName.equals(MAX_DEPOSIT_TERM_TYPE)) {
return depositTermFrequencyType(id);
} else if (typeName.equals(IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE)) {
return inMultiplesOfDepositTermFrequencyType(id);
} else if (typeName.equals(DEPOSIT_PERIOD_FREQUNCY_TYPE)) {
return depositPeriodFrequency(id);
} else if (typeName.equals(LOCKIN_PERIOD_FREQUNCY_TYPE)) {
return lockinPeriodFrequencyType(id);
} else if (typeName.equals(ACCOUNTING_RULE_TYPE)) {
return AccountingEnumerations.accountingRuleType(id);
} else if (typeName.equals(PRE_CLOSURE_PENAL_INTEREST_TYPE)) {
return preClosurePenaltyInterestOnType(id);
} else if (typeName.equals(INTEREST_CALCULATION_DAYS_IN_YEAR)) {
return interestCalculationDaysInYearType(id);
} else if (typeName.equals(RECURRING_FREQUENCY_TYPE)) {
return depositPeriodFrequency(id);
}
return null;
public static EnumOptionData savingEnumeration(final String typeName, final int id) {
return switch (typeName) {
case INTEREST_COMPOUNDING_PERIOD_TYPE -> compoundingInterestPeriodType(id);
case INTEREST_POSTING_PERIOD_TYPE -> interestPostingPeriodType(id);
case INTEREST_CALCULATION_TYPE -> interestCalculationType(id);
case MIN_DEPOSIT_TERM_TYPE -> depositTermFrequencyType(id);
case MAX_DEPOSIT_TERM_TYPE -> depositTermFrequencyType(id);
case IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE -> inMultiplesOfDepositTermFrequencyType(id);
case DEPOSIT_PERIOD_FREQUNCY_TYPE -> depositPeriodFrequency(id);
case LOCKIN_PERIOD_FREQUNCY_TYPE -> lockinPeriodFrequencyType(id);
case ACCOUNTING_RULE_TYPE -> AccountingEnumerations.accountingRuleType(id);
case PRE_CLOSURE_PENAL_INTEREST_TYPE -> preClosurePenaltyInterestOnType(id);
case INTEREST_CALCULATION_DAYS_IN_YEAR -> interestCalculationDaysInYearType(id);
case RECURRING_FREQUENCY_TYPE -> depositPeriodFrequency(id);
default -> null;
};
}
public static EnumOptionData lockinPeriodFrequencyType(final int id) {
@@ -0,0 +1,162 @@
/**
* 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.portfolio.savings.service;
import org.apache.fineract.accounting.common.AccountingEnumerations;
import org.apache.fineract.accounting.common.AccountingRuleType;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.portfolio.savings.PreClosurePenalInterestOnType;
import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodType;
import org.apache.fineract.portfolio.savings.SavingsInterestCalculationDaysInYearType;
import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType;
import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType;
import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class SavingsEnumerationsTest {
@Test
void savingEnumerationMapsCompoundingInterestPeriodType() {
int id = SavingsCompoundingInterestPeriodType.MONTHLY.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_COMPOUNDING_PERIOD_TYPE, id);
EnumOptionData expected = SavingsEnumerations.compoundingInterestPeriodType(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationMapsPostingInterestPeriodType() {
int id = SavingsPostingInterestPeriodType.BIANNUAL.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_POSTING_PERIOD_TYPE, id);
EnumOptionData expected = SavingsEnumerations.interestPostingPeriodType(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationMapsInterestCalculationType() {
int id = SavingsInterestCalculationType.DAILY_BALANCE.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_CALCULATION_TYPE, id);
EnumOptionData expected = SavingsEnumerations.interestCalculationType(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationMapsMinDepositTermType() {
int id = SavingsPeriodFrequencyType.WEEKS.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.MIN_DEPOSIT_TERM_TYPE, id);
EnumOptionData expected = SavingsEnumerations.depositTermFrequencyType(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationMapsMaxDepositTermType() {
int id = SavingsPeriodFrequencyType.YEARS.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.MAX_DEPOSIT_TERM_TYPE, id);
EnumOptionData expected = SavingsEnumerations.depositTermFrequencyType(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationMapsInMultiplesOfDepositTermType() {
int id = SavingsPeriodFrequencyType.DAYS.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE, id);
EnumOptionData expected = SavingsEnumerations.inMultiplesOfDepositTermFrequencyType(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationMapsDepositPeriodFrequencyType() {
int id = SavingsPeriodFrequencyType.MONTHS.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.DEPOSIT_PERIOD_FREQUNCY_TYPE, id);
EnumOptionData expected = SavingsEnumerations.depositPeriodFrequency(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationMapsLockinPeriodFrequencyType() {
int id = SavingsPeriodFrequencyType.MONTHS.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.LOCKIN_PERIOD_FREQUNCY_TYPE, id);
EnumOptionData expected = SavingsEnumerations.lockinPeriodFrequencyType(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationMapsAccountingRuleType() {
int id = AccountingRuleType.CASH_BASED.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.ACCOUNTING_RULE_TYPE, id);
EnumOptionData expected = AccountingEnumerations.accountingRuleType(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationMapsPreClosurePenaltyInterestType() {
int id = PreClosurePenalInterestOnType.WHOLE_TERM.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.PRE_CLOSURE_PENAL_INTEREST_TYPE, id);
EnumOptionData expected = SavingsEnumerations.preClosurePenaltyInterestOnType(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationMapsInterestCalculationDaysInYearType() {
int id = SavingsInterestCalculationDaysInYearType.DAYS_365.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_CALCULATION_DAYS_IN_YEAR, id);
EnumOptionData expected = SavingsEnumerations.interestCalculationDaysInYearType(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationMapsRecurringFrequencyType() {
int id = SavingsPeriodFrequencyType.WEEKS.getValue();
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.RECURRING_FREQUENCY_TYPE, id);
EnumOptionData expected = SavingsEnumerations.depositPeriodFrequency(id);
Assertions.assertEquals(data, expected);
}
@Test
void savingEnumerationReturnsNullForUnknownType() {
EnumOptionData data = SavingsEnumerations.savingEnumeration("unknownType", 1);
Assertions.assertNull(data);
}
}
@@ -393,7 +393,7 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
commandAsJsonMap.remove(typeName);
final Integer enumTypeId = auditObject.get(typeName).getAsInt();
final String code = SavingsEnumerations.savingEnumueration(typeName, enumTypeId).getValue();
final String code = SavingsEnumerations.savingEnumeration(typeName, enumTypeId).getValue();
if (code != null) {
commandAsJsonMap.put(typeName, code);
}