Search in sources :

Example 1 with CurrencyConversionException

use of javax.money.convert.CurrencyConversionException in project jsr354-ri by JavaMoney.

the class ECBAbstractRateProvider method createExchangeRate.

private ExchangeRate createExchangeRate(ConversionQuery query, ExchangeRateBuilder builder, ExchangeRate sourceRate, ExchangeRate target) {
    if (areBothBaseCurrencies(query)) {
        builder.setFactor(DefaultNumberValue.ONE);
        return builder.build();
    } else if (BASE_CURRENCY_CODE.equals(query.getCurrency().getCurrencyCode())) {
        if (Objects.isNull(sourceRate)) {
            return null;
        }
        return reverse(sourceRate);
    } else if (BASE_CURRENCY_CODE.equals(query.getBaseCurrency().getCurrencyCode())) {
        return target;
    } else {
        ExchangeRate rate1 = getExchangeRate(query.toBuilder().setTermCurrency(Monetary.getCurrency(BASE_CURRENCY_CODE)).build());
        ExchangeRate rate2 = getExchangeRate(query.toBuilder().setBaseCurrency(Monetary.getCurrency(BASE_CURRENCY_CODE)).setTermCurrency(query.getCurrency()).build());
        if (Objects.nonNull(rate1) && Objects.nonNull(rate2)) {
            builder.setFactor(multiply(rate1.getFactor(), rate2.getFactor()));
            builder.setRateChain(rate1, rate2);
            return builder.build();
        }
        throw new CurrencyConversionException(query.getBaseCurrency(), query.getCurrency(), sourceRate.getContext());
    }
}
Also used : ExchangeRate(javax.money.convert.ExchangeRate) CurrencyConversionException(javax.money.convert.CurrencyConversionException)

Example 2 with CurrencyConversionException

use of javax.money.convert.CurrencyConversionException in project jsr354-ri-bp by JavaMoney.

the class AbstractCurrencyConversion method apply.

/**
 * Method that converts the source {@link MonetaryAmount} to an
 * {@link MonetaryAmount} based on the {@link ExchangeRate} of this
 * conversion.
 *
 * @param amount The source amount
 * @return The converted amount, never null.
 * @throws CurrencyConversionException if conversion failed, or the required data is not available.
 * @see #getExchangeRate(MonetaryAmount)
 */
@Override
public MonetaryAmount apply(MonetaryAmount amount) {
    if (termCurrency.equals(Objects.requireNonNull(amount).getCurrency())) {
        return amount;
    }
    ExchangeRate rate = getExchangeRate(amount);
    if (rate == null || !amount.getCurrency().equals(rate.getBaseCurrency())) {
        throw new CurrencyConversionException(amount.getCurrency(), this.termCurrency, this.conversionContext);
    }
    NumberValue factor = rate.getFactor();
    factor = roundFactor(amount, factor);
    Integer scale = rate.getContext().get(KEY_SCALE, Integer.class);
    if (scale == null || scale < 0) {
        return amount.multiply(factor).getFactory().setCurrency(rate.getCurrency()).create();
    } else {
        return amount.multiply(factor).getFactory().setCurrency(rate.getCurrency()).create().with(MonetaryOperators.rounding(scale));
    }
}
Also used : ExchangeRate(javax.money.convert.ExchangeRate) NumberValue(javax.money.NumberValue) CurrencyConversionException(javax.money.convert.CurrencyConversionException)

Example 3 with CurrencyConversionException

use of javax.money.convert.CurrencyConversionException in project jsr354-ri by JavaMoney.

the class AbstractCurrencyConversion method apply.

/**
 * Method that converts the source {@link MonetaryAmount} to an
 * {@link MonetaryAmount} based on the {@link ExchangeRate} of this
 * conversion.
 * @param amount The source amount
 * @return The converted amount, never null.
 * @throws CurrencyConversionException if conversion failed, or the required data is not available.
 * @see #getExchangeRate(MonetaryAmount)
 */
@Override
public MonetaryAmount apply(MonetaryAmount amount) {
    if (termCurrency.equals(Objects.requireNonNull(amount).getCurrency())) {
        return amount;
    }
    ExchangeRate rate = getExchangeRate(amount);
    if (Objects.isNull(rate) || !amount.getCurrency().equals(rate.getBaseCurrency())) {
        throw new CurrencyConversionException(amount.getCurrency(), this.termCurrency, null);
    }
    NumberValue factor = rate.getFactor();
    factor = roundFactor(amount, factor);
    Integer scale = rate.getContext().get(KEY_SCALE, Integer.class);
    if (Objects.isNull(scale) || scale < 0) {
        return amount.multiply(factor).getFactory().setCurrency(rate.getCurrency()).create();
    } else {
        return amount.multiply(factor).getFactory().setCurrency(rate.getCurrency()).create().with(MonetaryOperators.rounding(scale));
    }
}
Also used : ExchangeRate(javax.money.convert.ExchangeRate) NumberValue(javax.money.NumberValue) CurrencyConversionException(javax.money.convert.CurrencyConversionException)

Example 4 with CurrencyConversionException

use of javax.money.convert.CurrencyConversionException in project jsr354-ri-bp by JavaMoney.

the class ECBAbstractRateProvider method createExchangeRate.

private ExchangeRate createExchangeRate(ConversionQuery query, ExchangeRateBuilder builder, ExchangeRate sourceRate, ExchangeRate target) {
    if (areBothBaseCurrencies(query)) {
        builder.setFactor(DefaultNumberValue.ONE);
        return builder.build();
    } else if (BASE_CURRENCY_CODE.equals(query.getCurrency().getCurrencyCode())) {
        if (sourceRate == null) {
            return null;
        }
        return reverse(sourceRate);
    } else if (BASE_CURRENCY_CODE.equals(query.getBaseCurrency().getCurrencyCode())) {
        return target;
    } else {
        // Get Conversion base as derived rate: base -> EUR -> term
        ExchangeRate rate1 = getExchangeRate(query.toBuilder().setTermCurrency(Monetary.getCurrency(BASE_CURRENCY_CODE)).build());
        ExchangeRate rate2 = getExchangeRate(query.toBuilder().setBaseCurrency(Monetary.getCurrency(BASE_CURRENCY_CODE)).setTermCurrency(query.getCurrency()).build());
        if (rate1 != null && rate2 != null) {
            builder.setFactor(multiply(rate1.getFactor(), rate2.getFactor()));
            builder.setRateChain(rate1, rate2);
            return builder.build();
        }
        throw new CurrencyConversionException(query.getBaseCurrency(), query.getCurrency(), sourceRate.getContext());
    }
}
Also used : ExchangeRate(javax.money.convert.ExchangeRate) CurrencyConversionException(javax.money.convert.CurrencyConversionException)

Aggregations

CurrencyConversionException (javax.money.convert.CurrencyConversionException)4 ExchangeRate (javax.money.convert.ExchangeRate)4 NumberValue (javax.money.NumberValue)2