Skip to content

Commit a70175e

Browse files
FINERACT-2491: Refactor SavingsEnumerations to use switch expression
1 parent 8a61e30 commit a70175e

File tree

3 files changed

+179
-28
lines changed

3 files changed

+179
-28
lines changed

fineract-core/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsEnumerations.java

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -59,33 +59,22 @@ private SavingsEnumerations() {
5959
public static final String INTEREST_CALCULATION_DAYS_IN_YEAR = "interestCalculationDaysInYearType";
6060
public static final String RECURRING_FREQUENCY_TYPE = "recurringFrequencyType";
6161

62-
public static EnumOptionData savingEnumueration(final String typeName, final int id) {
63-
if (typeName.equals(INTEREST_COMPOUNDING_PERIOD_TYPE)) {
64-
return compoundingInterestPeriodType(id);
65-
} else if (typeName.equals(INTEREST_POSTING_PERIOD_TYPE)) {
66-
return interestPostingPeriodType(id);
67-
} else if (typeName.equals(INTEREST_CALCULATION_TYPE)) {
68-
return interestCalculationType(id);
69-
} else if (typeName.equals(MIN_DEPOSIT_TERM_TYPE)) {
70-
return depositTermFrequencyType(id);
71-
} else if (typeName.equals(MAX_DEPOSIT_TERM_TYPE)) {
72-
return depositTermFrequencyType(id);
73-
} else if (typeName.equals(IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE)) {
74-
return inMultiplesOfDepositTermFrequencyType(id);
75-
} else if (typeName.equals(DEPOSIT_PERIOD_FREQUNCY_TYPE)) {
76-
return depositPeriodFrequency(id);
77-
} else if (typeName.equals(LOCKIN_PERIOD_FREQUNCY_TYPE)) {
78-
return lockinPeriodFrequencyType(id);
79-
} else if (typeName.equals(ACCOUNTING_RULE_TYPE)) {
80-
return AccountingEnumerations.accountingRuleType(id);
81-
} else if (typeName.equals(PRE_CLOSURE_PENAL_INTEREST_TYPE)) {
82-
return preClosurePenaltyInterestOnType(id);
83-
} else if (typeName.equals(INTEREST_CALCULATION_DAYS_IN_YEAR)) {
84-
return interestCalculationDaysInYearType(id);
85-
} else if (typeName.equals(RECURRING_FREQUENCY_TYPE)) {
86-
return depositPeriodFrequency(id);
87-
}
88-
return null;
62+
public static EnumOptionData savingEnumeration(final String typeName, final int id) {
63+
return switch (typeName) {
64+
case INTEREST_COMPOUNDING_PERIOD_TYPE -> compoundingInterestPeriodType(id);
65+
case INTEREST_POSTING_PERIOD_TYPE -> interestPostingPeriodType(id);
66+
case INTEREST_CALCULATION_TYPE -> interestCalculationType(id);
67+
case MIN_DEPOSIT_TERM_TYPE -> depositTermFrequencyType(id);
68+
case MAX_DEPOSIT_TERM_TYPE -> depositTermFrequencyType(id);
69+
case IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE -> inMultiplesOfDepositTermFrequencyType(id);
70+
case DEPOSIT_PERIOD_FREQUNCY_TYPE -> depositPeriodFrequency(id);
71+
case LOCKIN_PERIOD_FREQUNCY_TYPE -> lockinPeriodFrequencyType(id);
72+
case ACCOUNTING_RULE_TYPE -> AccountingEnumerations.accountingRuleType(id);
73+
case PRE_CLOSURE_PENAL_INTEREST_TYPE -> preClosurePenaltyInterestOnType(id);
74+
case INTEREST_CALCULATION_DAYS_IN_YEAR -> interestCalculationDaysInYearType(id);
75+
case RECURRING_FREQUENCY_TYPE -> depositPeriodFrequency(id);
76+
default -> null;
77+
};
8978
}
9079

9180
public static EnumOptionData lockinPeriodFrequencyType(final int id) {
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
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.savings.service;
20+
21+
import org.apache.fineract.accounting.common.AccountingEnumerations;
22+
import org.apache.fineract.accounting.common.AccountingRuleType;
23+
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
24+
import org.apache.fineract.portfolio.savings.PreClosurePenalInterestOnType;
25+
import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodType;
26+
import org.apache.fineract.portfolio.savings.SavingsInterestCalculationDaysInYearType;
27+
import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType;
28+
import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType;
29+
import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType;
30+
import org.junit.jupiter.api.Assertions;
31+
import org.junit.jupiter.api.Test;
32+
33+
public class SavingsEnumerationsTest {
34+
35+
@Test
36+
void savingEnumerationMapsCompoundingInterestPeriodType() {
37+
int id = SavingsCompoundingInterestPeriodType.MONTHLY.getValue();
38+
39+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_COMPOUNDING_PERIOD_TYPE, id);
40+
EnumOptionData expected = SavingsEnumerations.compoundingInterestPeriodType(id);
41+
42+
Assertions.assertEquals(data, expected);
43+
}
44+
45+
@Test
46+
void savingEnumerationMapsPostingInterestPeriodType() {
47+
int id = SavingsPostingInterestPeriodType.BIANNUAL.getValue();
48+
49+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_POSTING_PERIOD_TYPE, id);
50+
EnumOptionData expected = SavingsEnumerations.interestPostingPeriodType(id);
51+
52+
Assertions.assertEquals(data, expected);
53+
}
54+
55+
@Test
56+
void savingEnumerationMapsInterestCalculationType() {
57+
int id = SavingsInterestCalculationType.DAILY_BALANCE.getValue();
58+
59+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_CALCULATION_TYPE, id);
60+
EnumOptionData expected = SavingsEnumerations.interestCalculationType(id);
61+
62+
Assertions.assertEquals(data, expected);
63+
}
64+
65+
@Test
66+
void savingEnumerationMapsMinDepositTermType() {
67+
int id = SavingsPeriodFrequencyType.WEEKS.getValue();
68+
69+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.MIN_DEPOSIT_TERM_TYPE, id);
70+
EnumOptionData expected = SavingsEnumerations.depositTermFrequencyType(id);
71+
72+
Assertions.assertEquals(data, expected);
73+
}
74+
75+
@Test
76+
void savingEnumerationMapsMaxDepositTermType() {
77+
int id = SavingsPeriodFrequencyType.YEARS.getValue();
78+
79+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.MAX_DEPOSIT_TERM_TYPE, id);
80+
EnumOptionData expected = SavingsEnumerations.depositTermFrequencyType(id);
81+
82+
Assertions.assertEquals(data, expected);
83+
}
84+
85+
@Test
86+
void savingEnumerationMapsInMultiplesOfDepositTermType() {
87+
int id = SavingsPeriodFrequencyType.DAYS.getValue();
88+
89+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE, id);
90+
EnumOptionData expected = SavingsEnumerations.inMultiplesOfDepositTermFrequencyType(id);
91+
92+
Assertions.assertEquals(data, expected);
93+
}
94+
95+
@Test
96+
void savingEnumerationMapsDepositPeriodFrequencyType() {
97+
int id = SavingsPeriodFrequencyType.MONTHS.getValue();
98+
99+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.DEPOSIT_PERIOD_FREQUNCY_TYPE, id);
100+
EnumOptionData expected = SavingsEnumerations.depositPeriodFrequency(id);
101+
102+
Assertions.assertEquals(data, expected);
103+
}
104+
105+
@Test
106+
void savingEnumerationMapsLockinPeriodFrequencyType() {
107+
int id = SavingsPeriodFrequencyType.MONTHS.getValue();
108+
109+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.LOCKIN_PERIOD_FREQUNCY_TYPE, id);
110+
EnumOptionData expected = SavingsEnumerations.lockinPeriodFrequencyType(id);
111+
112+
Assertions.assertEquals(data, expected);
113+
}
114+
115+
@Test
116+
void savingEnumerationMapsAccountingRuleType() {
117+
int id = AccountingRuleType.CASH_BASED.getValue();
118+
119+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.ACCOUNTING_RULE_TYPE, id);
120+
EnumOptionData expected = AccountingEnumerations.accountingRuleType(id);
121+
122+
Assertions.assertEquals(data, expected);
123+
}
124+
125+
@Test
126+
void savingEnumerationMapsPreClosurePenaltyInterestType() {
127+
int id = PreClosurePenalInterestOnType.WHOLE_TERM.getValue();
128+
129+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.PRE_CLOSURE_PENAL_INTEREST_TYPE, id);
130+
EnumOptionData expected = SavingsEnumerations.preClosurePenaltyInterestOnType(id);
131+
132+
Assertions.assertEquals(data, expected);
133+
}
134+
135+
@Test
136+
void savingEnumerationMapsInterestCalculationDaysInYearType() {
137+
int id = SavingsInterestCalculationDaysInYearType.DAYS_365.getValue();
138+
139+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_CALCULATION_DAYS_IN_YEAR, id);
140+
EnumOptionData expected = SavingsEnumerations.interestCalculationDaysInYearType(id);
141+
142+
Assertions.assertEquals(data, expected);
143+
}
144+
145+
@Test
146+
void savingEnumerationMapsRecurringFrequencyType() {
147+
int id = SavingsPeriodFrequencyType.WEEKS.getValue();
148+
149+
EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.RECURRING_FREQUENCY_TYPE, id);
150+
EnumOptionData expected = SavingsEnumerations.depositPeriodFrequency(id);
151+
152+
Assertions.assertEquals(data, expected);
153+
}
154+
155+
@Test
156+
void savingEnumerationReturnsNullForUnknownType() {
157+
EnumOptionData data = SavingsEnumerations.savingEnumeration("unknownType", 1);
158+
159+
Assertions.assertNull(data);
160+
}
161+
162+
}

fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ private void updateEnumerations(Map<String, Object> commandAsJsonMap, JsonObject
393393
commandAsJsonMap.remove(typeName);
394394

395395
final Integer enumTypeId = auditObject.get(typeName).getAsInt();
396-
final String code = SavingsEnumerations.savingEnumueration(typeName, enumTypeId).getValue();
396+
final String code = SavingsEnumerations.savingEnumeration(typeName, enumTypeId).getValue();
397397
if (code != null) {
398398
commandAsJsonMap.put(typeName, code);
399399
}

0 commit comments

Comments
 (0)