Skip to content

Commit

Permalink
Remove Amount Factory from MonetaModule
Browse files Browse the repository at this point in the history
  • Loading branch information
sri-adarsh-kumar committed Feb 5, 2025
1 parent 90a4850 commit 045a019
Showing 1 changed file with 11 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,24 +33,17 @@ public final class MonetaMoneyModule extends Module {

private final JavaxMoneyModule baseModule;
private final FieldNames names;
private final MonetaryAmountFactory<? extends MonetaryAmount> amountFactory;
private final MonetaryAmountFactory<FastMoney> fastMoneyFactory;
private final MonetaryAmountFactory<Money> moneyFactory;
private final MonetaryAmountFactory<RoundedMoney> roundedMoneyFactory;

public MonetaMoneyModule() {
this(new JavaxMoneyModule(), FieldNames.defaults(),
Money::of, FastMoney::of, Money::of, RoundedMoney::of);
this(new JavaxMoneyModule().withMonetaryAmountFactory(Money::of), FieldNames.defaults(), FastMoney::of, Money::of, RoundedMoney::of);
}

private MonetaMoneyModule(final JavaxMoneyModule baseModule, final FieldNames names,
final MonetaryAmountFactory<? extends MonetaryAmount> amountFactory,
final MonetaryAmountFactory<FastMoney> fastMoneyFactory,
final MonetaryAmountFactory<Money> moneyFactory,
final MonetaryAmountFactory<RoundedMoney> roundedMoneyFactory) {
private MonetaMoneyModule(final JavaxMoneyModule baseModule, final FieldNames names, final MonetaryAmountFactory<FastMoney> fastMoneyFactory, final MonetaryAmountFactory<Money> moneyFactory, final MonetaryAmountFactory<RoundedMoney> roundedMoneyFactory) {
this.baseModule = baseModule;
this.names = names;
this.amountFactory = amountFactory;
this.fastMoneyFactory = fastMoneyFactory;
this.moneyFactory = moneyFactory;
this.roundedMoneyFactory = roundedMoneyFactory;
Expand All @@ -73,9 +66,6 @@ public void setupModule(final SetupContext context) {
final SimpleDeserializers deserializers = new SimpleDeserializers();
deserializers.addDeserializer(CurrencyUnit.class, new CurrencyUnitDeserializer());

//Use provided amountFactory to deserialize a MonetaryAmount
deserializers.addDeserializer(MonetaryAmount.class, new MonetaryAmountDeserializer<>(amountFactory, names));

//Register deserializers for Moneta types
deserializers.addDeserializer(FastMoney.class, new MonetaryAmountDeserializer<>(fastMoneyFactory, names));
deserializers.addDeserializer(Money.class, new MonetaryAmountDeserializer<>(moneyFactory, names));
Expand All @@ -85,16 +75,16 @@ public void setupModule(final SetupContext context) {
}

public MonetaMoneyModule withDecimalNumbers() {
return new MonetaMoneyModule(baseModule.withDecimalNumbers(), names, amountFactory, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
return new MonetaMoneyModule(baseModule.withDecimalNumbers(), names, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
}

public MonetaMoneyModule withQuotedDecimalNumbers() {
return new MonetaMoneyModule(baseModule.withQuotedDecimalNumbers(), names, amountFactory, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
return new MonetaMoneyModule(baseModule.withQuotedDecimalNumbers(), names, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
}

@API(status = EXPERIMENTAL)
public MonetaMoneyModule withNumbers(final AmountWriter<?> writer) {
return new MonetaMoneyModule(baseModule.withNumbers(writer), names, amountFactory, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
return new MonetaMoneyModule(baseModule.withNumbers(writer), names, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
}

/**
Expand Down Expand Up @@ -127,16 +117,14 @@ public MonetaMoneyModule withRoundedMoney() {
* @see RoundedMoney
*/
public MonetaMoneyModule withRoundedMoney(final MonetaryOperator rounding) {
final MonetaryAmountFactory<RoundedMoney> factory = (amount, currency) ->
RoundedMoney.of(amount, currency, rounding);
final MonetaryAmountFactory<RoundedMoney> factory = (amount, currency) -> RoundedMoney.of(amount, currency, rounding);

return withMonetaryAmountFactory(factory);
}


private <T extends MonetaryAmount> MonetaMoneyModule withMonetaryAmountFactory(final MonetaryAmountFactory<T> amountFactory) {
return new MonetaMoneyModule(baseModule, names, amountFactory,
fastMoneyFactory, moneyFactory, roundedMoneyFactory);
return new MonetaMoneyModule(baseModule.withMonetaryAmountFactory(amountFactory), names, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
}

public MonetaMoneyModule withoutFormatting() {
Expand All @@ -148,19 +136,19 @@ public MonetaMoneyModule withDefaultFormatting() {
}

public MonetaMoneyModule withFormatting(final MonetaryAmountFormatFactory formatFactory) {
return new MonetaMoneyModule(baseModule.withFormatting(formatFactory), names, amountFactory, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
return new MonetaMoneyModule(baseModule.withFormatting(formatFactory), names, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
}

public MonetaMoneyModule withAmountFieldName(final String name) {
return new MonetaMoneyModule(baseModule.withAmountFieldName(name), names.withAmount(name), amountFactory, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
return new MonetaMoneyModule(baseModule.withAmountFieldName(name), names.withAmount(name), fastMoneyFactory, moneyFactory, roundedMoneyFactory);
}

public MonetaMoneyModule withCurrencyFieldName(final String name) {
return new MonetaMoneyModule(baseModule.withCurrencyFieldName(name), names.withCurrency(name), amountFactory, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
return new MonetaMoneyModule(baseModule.withCurrencyFieldName(name), names.withCurrency(name), fastMoneyFactory, moneyFactory, roundedMoneyFactory);
}

public MonetaMoneyModule withFormattedFieldName(final String name) {
return new MonetaMoneyModule(baseModule.withFormattedFieldName(name), names.withFormatted(name), amountFactory, fastMoneyFactory, moneyFactory, roundedMoneyFactory);
return new MonetaMoneyModule(baseModule.withFormattedFieldName(name), names.withFormatted(name), fastMoneyFactory, moneyFactory, roundedMoneyFactory);
}


Expand Down

0 comments on commit 045a019

Please sign in to comment.