Architecture improvement. Only individual loan code should be dependent on individual loan actions.
diff --git a/service/src/main/java/io/mifos/individuallending/internal/service/IndividualLoanService.java b/service/src/main/java/io/mifos/individuallending/internal/service/IndividualLoanService.java
index 6a253be..a10a100 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/service/IndividualLoanService.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/service/IndividualLoanService.java
@@ -113,10 +113,10 @@
final int minorCurrencyUnitDigits,
final BigDecimal initialBalance,
final @Nonnull List<ScheduledAction> scheduledActions) {
- final Map<Action, List<ChargeDefinition>> chargeDefinitionsMappedByChargeAction
+ final Map<String, List<ChargeDefinition>> chargeDefinitionsMappedByChargeAction
= chargeDefinitionService.getChargeDefinitionsMappedByChargeAction(productIdentifier);
- final Map<Action, List<ChargeDefinition>> chargeDefinitionsMappedByAccrueAction
+ final Map<String, List<ChargeDefinition>> chargeDefinitionsMappedByAccrueAction
= chargeDefinitionService.getChargeDefinitionsMappedByAccrueAction(productIdentifier);
final ChargeDefinition acceptPaymentDefinition = getPaymentChargeDefinition();
@@ -255,8 +255,8 @@
}
private List<ScheduledCharge> getScheduledCharges(final List<ScheduledAction> scheduledActions,
- final Map<Action, List<ChargeDefinition>> chargeDefinitionsMappedByChargeAction,
- final Map<Action, List<ChargeDefinition>> chargeDefinitionsMappedByAccrueAction,
+ final Map<String, List<ChargeDefinition>> chargeDefinitionsMappedByChargeAction,
+ final Map<String, List<ChargeDefinition>> chargeDefinitionsMappedByAccrueAction,
final ChargeDefinition acceptPaymentDefinition) {
return scheduledActions.stream()
.flatMap(scheduledAction -> getChargeDefinitionStream(chargeDefinitionsMappedByChargeAction, chargeDefinitionsMappedByAccrueAction, acceptPaymentDefinition, scheduledAction)
@@ -265,18 +265,18 @@
}
private Stream<ChargeDefinition> getChargeDefinitionStream(
- final Map<Action, List<ChargeDefinition>> chargeDefinitionsMappedByChargeAction,
- final Map<Action, List<ChargeDefinition>> chargeDefinitionsMappedByAccrueAction,
+ final Map<String, List<ChargeDefinition>> chargeDefinitionsMappedByChargeAction,
+ final Map<String, List<ChargeDefinition>> chargeDefinitionsMappedByAccrueAction,
final ChargeDefinition acceptPaymentDefinition,
final ScheduledAction scheduledAction) {
- List<ChargeDefinition> chargeMapping = chargeDefinitionsMappedByChargeAction.get(scheduledAction.action);
+ List<ChargeDefinition> chargeMapping = chargeDefinitionsMappedByChargeAction.get(scheduledAction.action.name());
if ((chargeMapping == null) && (scheduledAction.action == Action.valueOf(acceptPaymentDefinition.getChargeAction())))
chargeMapping = Collections.singletonList(acceptPaymentDefinition);
if (chargeMapping == null)
chargeMapping = Collections.emptyList();
- List<ChargeDefinition> accrueMapping = chargeDefinitionsMappedByAccrueAction.get(scheduledAction.action);
+ List<ChargeDefinition> accrueMapping = chargeDefinitionsMappedByAccrueAction.get(scheduledAction.action.name());
if ((accrueMapping == null) && (scheduledAction.action == Action.valueOf(acceptPaymentDefinition.getChargeAction())))
accrueMapping = Collections.singletonList(acceptPaymentDefinition);
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/service/ChargeDefinitionService.java b/service/src/main/java/io/mifos/portfolio/service/internal/service/ChargeDefinitionService.java
index 6ba6642..0230368 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/service/ChargeDefinitionService.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/service/ChargeDefinitionService.java
@@ -16,7 +16,6 @@
package io.mifos.portfolio.service.internal.service;
import io.mifos.portfolio.api.v1.domain.ChargeDefinition;
-import io.mifos.individuallending.api.v1.domain.workflow.Action;
import io.mifos.portfolio.service.internal.mapper.ChargeDefinitionMapper;
import io.mifos.portfolio.service.internal.repository.ChargeDefinitionRepository;
import org.springframework.beans.factory.annotation.Autowired;
@@ -46,25 +45,26 @@
.collect(Collectors.toList());
}
- @Nonnull public Map<Action, List<ChargeDefinition>> getChargeDefinitionsMappedByChargeAction(
+ @Nonnull
+ public Map<String, List<ChargeDefinition>> getChargeDefinitionsMappedByChargeAction(
final String productIdentifier)
{
final List<ChargeDefinition> chargeDefinitions = findAllEntities(productIdentifier);
return chargeDefinitions.stream()
- .collect(Collectors.groupingBy(x -> Action.valueOf(x.getChargeAction()),
+ .collect(Collectors.groupingBy(ChargeDefinition::getChargeAction,
Collectors.mapping(x -> x, Collectors.toList())));
}
@Nonnull
- public Map<Action, List<ChargeDefinition>> getChargeDefinitionsMappedByAccrueAction(
+ public Map<String, List<ChargeDefinition>> getChargeDefinitionsMappedByAccrueAction(
final String productIdentifier)
{
final List<ChargeDefinition> chargeDefinitions = findAllEntities(productIdentifier);
return chargeDefinitions.stream()
.filter(x -> x.getAccrueAction() != null)
- .collect(Collectors.groupingBy(x -> Action.valueOf(x.getAccrueAction()),
+ .collect(Collectors.groupingBy(ChargeDefinition::getAccrueAction,
Collectors.mapping(x -> x, Collectors.toList())));
}
diff --git a/service/src/test/java/io/mifos/individuallending/internal/service/IndividualLoanServiceTest.java b/service/src/test/java/io/mifos/individuallending/internal/service/IndividualLoanServiceTest.java
index 500e594..59032e6 100644
--- a/service/src/test/java/io/mifos/individuallending/internal/service/IndividualLoanServiceTest.java
+++ b/service/src/test/java/io/mifos/individuallending/internal/service/IndividualLoanServiceTest.java
@@ -50,7 +50,7 @@
private int minorCurrencyUnitDigits = 2;
private CaseParameters caseParameters;
private LocalDate initialDisbursementDate;
- private Map<Action, List<ChargeDefinition>> chargeDefinitionsMappedByAction;
+ private Map<String, List<ChargeDefinition>> chargeDefinitionsMappedByAction;
private Set<String> expectedChargeIdentifiers = new HashSet<>(Arrays.asList(ChargeIdentifiers.INTEREST_ID, ChargeIdentifiers.PAYMENT_ID));
TestCase(final String description) {
@@ -72,7 +72,7 @@
return this;
}
- TestCase chargeDefinitionsMappedByAction(final Map<Action, List<ChargeDefinition>> newVal) {
+ TestCase chargeDefinitionsMappedByAction(final Map<String, List<ChargeDefinition>> newVal) {
this.chargeDefinitionsMappedByAction = newVal;
return this;
}
@@ -111,8 +111,8 @@
//I know: this is cheating in a unit test. But I really didn't want to put this data together by hand.
- final Map<Action, List<ChargeDefinition>> chargeDefinitionsMappedByAction = new HashMap<>();
- chargeDefinitionsMappedByAction.put(Action.APPLY_INTEREST, getInterestChargeDefinition(0.01, ChronoUnit.YEARS));
+ final Map<String, List<ChargeDefinition>> chargeDefinitionsMappedByAction = new HashMap<>();
+ chargeDefinitionsMappedByAction.put(Action.APPLY_INTEREST.name(), getInterestChargeDefinition(0.01, ChronoUnit.YEARS));
return new TestCase("simpleCase")
.minorCurrencyUnitDigits(2)
@@ -130,8 +130,8 @@
caseParameters.setPaymentCycle(new PaymentCycle(ChronoUnit.MONTHS, 1, 0, null, null));
caseParameters.setMaximumBalance(BigDecimal.valueOf(200000));
- final Map<Action, List<ChargeDefinition>> chargeDefinitionsMappedByAction = new HashMap<>();
- chargeDefinitionsMappedByAction.put(Action.APPLY_INTEREST, getInterestChargeDefinition(0.10, ChronoUnit.YEARS));
+ final Map<String, List<ChargeDefinition>> chargeDefinitionsMappedByAction = new HashMap<>();
+ chargeDefinitionsMappedByAction.put(Action.APPLY_INTEREST.name(), getInterestChargeDefinition(0.10, ChronoUnit.YEARS));
return new TestCase("yearLoanTestCase")
.minorCurrencyUnitDigits(2)
@@ -148,11 +148,11 @@
caseParameters.setPaymentCycle(new PaymentCycle(ChronoUnit.WEEKS, 1, 1, 0, 0));
caseParameters.setMaximumBalance(BigDecimal.valueOf(2000));
- final Map<Action, List<ChargeDefinition>> chargeDefinitionsMappedByAction = new HashMap<>();
- chargeDefinitionsMappedByAction.put(Action.APPLY_INTEREST, getInterestChargeDefinition(0.05, ChronoUnit.YEARS));
+ final Map<String, List<ChargeDefinition>> chargeDefinitionsMappedByAction = new HashMap<>();
+ chargeDefinitionsMappedByAction.put(Action.APPLY_INTEREST.name(), getInterestChargeDefinition(0.05, ChronoUnit.YEARS));
final List<ChargeDefinition> defaultLoanCharges = IndividualLendingPatternFactory.defaultIndividualLoanCharges();
- defaultLoanCharges.forEach(x -> chargeDefinitionsMappedByAction.put(Action.valueOf(x.getChargeAction()), Collections.singletonList(x)));
+ defaultLoanCharges.forEach(x -> chargeDefinitionsMappedByAction.put(x.getChargeAction(), Collections.singletonList(x)));
return new TestCase("chargeDefaultsCase")
.minorCurrencyUnitDigits(2)