@Override public boolean isAvailable(ConversionQuery conversionQuery) { Objects.requireNonNull(conversionQuery); Objects.requireNonNull(conversionQuery.getBaseCurrency()); Objects.requireNonNull(conversionQuery.getCurrency()); return "EUR".equals(conversionQuery.getBaseCurrency().getCurrencyCode()); }
/** * Get the terminating currency. This attribute is required, when a {@link javax.money.convert.CurrencyConversion} * is accessed. It is optional if accessing instances of {@link javax.money.convert.ExchangeRateProvider}. * * @return the terminating CurrencyUnit, or null. */ public CurrencyUnit getCurrency() { return get(KEY_TERM_CURRENCY, CurrencyUnit.class); }
/** * Creates a new instance of {@link ConversionQuery}. * * @return a new {@link ConversionQuery} instance. */ @Override public ConversionQuery build() { return new ConversionQuery(this); }
public LazyBoundCurrencyConversion(ConversionQuery conversionQuery, ExchangeRateProvider rateProvider, ConversionContext conversionContext) { super(conversionQuery.getCurrency(), conversionContext); this.conversionQuery = conversionQuery; this.rateProvider = rateProvider; }
@Override public ExchangeRate getExchangeRate(ConversionQuery conversionQuery) { if (isAvailable(conversionQuery)) { if (conversionQuery.get(Calendar.class) != null) { return new TestExchangeRate.Builder("TestRateProvider2", RateType.OTHER) .setFactor(new TestNumberValue(FACTOR * 100)).setBase(conversionQuery.getBaseCurrency()) .setTerm(conversionQuery.getCurrency()).build(); } return new TestExchangeRate.Builder("TestRateProvider2", RateType.OTHER) .setFactor(new TestNumberValue(FACTOR)).setBase(conversionQuery.getBaseCurrency()) .setTerm(conversionQuery.getCurrency()).build(); } return null; }
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()); } }
/** * Checks if an {@link ExchangeRate} between two {@link CurrencyUnit} is * available from this provider. This method should check, if a given rate * is <i>currently</i> defined. * * @param conversionQuery the required {@link ConversionQuery}, not {@code null} * @return {@code true}, if such an {@link ExchangeRate} is currently * defined. */ default boolean isAvailable(ConversionQuery conversionQuery){ Objects.requireNonNull(conversionQuery); try{ return conversionQuery.getProviderNames().isEmpty() || conversionQuery.getProviderNames().contains(getContext().getProviderName()); } catch(Exception e){ return false; } }
@Override public boolean isAvailable(ConversionQuery conversionQuery) { Objects.requireNonNull(conversionQuery); Objects.requireNonNull(conversionQuery.getCurrency()); return true; }
@Override public boolean isAvailable(ConversionQuery conversionQuery) { Objects.requireNonNull(conversionQuery); Objects.requireNonNull(conversionQuery.getBaseCurrency()); Objects.requireNonNull(conversionQuery.getCurrency()); return "CHF".equals(conversionQuery.getBaseCurrency().getCurrencyCode()); }
@Override public CurrencyConversion getCurrencyConversion(ConversionQuery query) { Objects.requireNonNull(query); Objects.requireNonNull(query.getCurrency()); return new Conversion(query.getCurrency()); }
/** * Get the base currency. This attribute is optional, when a {@link javax.money.convert.CurrencyConversion} * is accessed. It is optional if accessing instances of {@link javax.money.convert.ExchangeRateProvider}. If set * it can constraint * a {@link javax.money.convert.CurrencyConversion} or {@link javax.money.convert.ExchangeRateProvider} to * only support one type of base currency. By default it is not set, hereby determining the base currency by the * amount onto which the conversion is applied. * * @return the base CurrencyUnit, or null. */ public CurrencyUnit getBaseCurrency() { return get(KEY_BASE_CURRENCY, CurrencyUnit.class); }
@Override public boolean isAvailable(ConversionQuery query) { Objects.requireNonNull(query); Objects.requireNonNull(query.getBaseCurrency()); Objects.requireNonNull(query.getCurrency()); return "USD".equals(query.getBaseCurrency().getCurrencyCode()); }
@Override public CurrencyConversion getCurrencyConversion(ConversionQuery conversionContext) { Objects.requireNonNull(conversionContext); Objects.requireNonNull(conversionContext.getCurrency()); return new Conversion(conversionContext.getCurrency()); }
protected LocalDate[] getQueryDates(ConversionQuery query) { if (Objects.nonNull(query.get(LocalDate.class)) || Objects.nonNull(query.get(LocalDateTime.class))) { LocalDate localDate = Optional.ofNullable(query.get(LocalDate.class)).orElseGet(() -> query.get(LocalDateTime.class).toLocalDate()); return new LocalDate[]{localDate}; } else if(Objects.nonNull(query.get(LocalDate[].class))) { return query.get(LocalDate[].class); } return null; } }
private boolean areBothBaseCurrencies(ConversionQuery query) { return BASE_CURRENCY_CODE.equals(query.getBaseCurrency().getCurrencyCode()) && BASE_CURRENCY_CODE.equals(query.getCurrency().getCurrencyCode()); }
@Override public CurrencyConversion getCurrencyConversion(ConversionQuery conversionQuery) { Objects.requireNonNull(conversionQuery); Objects.requireNonNull(conversionQuery.getCurrency()); return new Conversion(conversionQuery.getCurrency()); }
/** * Get the rate types set. * * @return the rate types set, or an empty array, but never null. */ @SuppressWarnings("unchecked") public Set<RateType> getRateTypes() { Set<RateType> result = get(KEY_RATE_TYPES, Set.class); if (result == null) { return Collections.emptySet(); } return result; }
@Override public ExchangeRate getExchangeRate(ConversionQuery conversionQuery) { Objects.requireNonNull(conversionQuery); Objects.requireNonNull(conversionQuery.getBaseCurrency()); Objects.requireNonNull(conversionQuery.getCurrency()); if (isAvailable(conversionQuery)) { return new TestExchangeRate.Builder(getClass().getSimpleName(), RateType.OTHER) .setFactor(new TestNumberValue(FACTOR)).setBase(conversionQuery.getBaseCurrency()) .setTerm(conversionQuery.getCurrency()).build(); } return null; }
@Override public CurrencyConversion getCurrencyConversion(ConversionQuery conversionQuery) { Objects.requireNonNull(conversionQuery); Objects.requireNonNull(conversionQuery.getCurrency()); return new Conversion(conversionQuery.getCurrency()); }
private ExchangeRateBuilder getBuilder(ConversionQuery query, LocalDate localDate) { ExchangeRateBuilder builder = new ExchangeRateBuilder(getExchangeContext("ecb.digit.fraction")); builder.setBase(query.getBaseCurrency()); builder.setTerm(query.getCurrency()); return builder; }