@Override public boolean isAvailable(ConversionQuery conversionQuery) { Objects.requireNonNull(conversionQuery); Objects.requireNonNull(conversionQuery.getBaseCurrency()); Objects.requireNonNull(conversionQuery.getCurrency()); return "EUR".equals(conversionQuery.getBaseCurrency().getCurrencyCode()); }
@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 boolean isAvailable(ConversionQuery query) { Objects.requireNonNull(query); Objects.requireNonNull(query.getBaseCurrency()); Objects.requireNonNull(query.getCurrency()); return "USD".equals(query.getBaseCurrency().getCurrencyCode()); }
private boolean areBothBaseCurrencies(ConversionQuery query) { return BASE_CURRENCY_CODE.equals(query.getBaseCurrency().getCurrencyCode()) && BASE_CURRENCY_CODE.equals(query.getCurrency().getCurrencyCode()); }
@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 ExchangeRate getExchangeRate(ConversionQuery conversionQuery) { for (ExchangeRateProvider prov : this.providers) { try { if (prov.isAvailable(conversionQuery)) { ExchangeRate rate = prov.getExchangeRate(conversionQuery); if (Objects.nonNull(rate)) { return rate; } } } catch (Exception e) { Logger.getLogger(getClass().getName()).log(Level.WARNING, "Rate Provider did not return data though at check before data was flagged as available," + " provider=" + prov.getContext().getProviderName() + ", query=" + conversionQuery); } } throw new CurrencyConversionException(conversionQuery.getBaseCurrency(), conversionQuery.getCurrency(), null, "All delegate prov iders failed to deliver rate, providers=" + this.providers + ", query=" + conversionQuery); }
@Override public ExchangeRate getExchangeRate(ConversionQuery conversionQuery) { Objects.requireNonNull(conversionQuery.getBaseCurrency()); if (isAvailable(conversionQuery)) { return new TestExchangeRate.Builder(getContext().getProviderName(), RateType.OTHER) .setFactor(new TestNumberValue(FACTOR)).setBase(conversionQuery.getBaseCurrency()) .setTerm(conversionQuery.getCurrency()).build(); } return null; }
@Override public ExchangeRate getExchangeRate(ConversionQuery conversionQuery) { Objects.requireNonNull(conversionQuery); try { if (loadLock.await(30, TimeUnit.SECONDS)) { if (rates.isEmpty()) { return null; } RateResult result = findExchangeRate(conversionQuery); ExchangeRateBuilder builder = getBuilder(conversionQuery, result.date); ExchangeRate sourceRate = result.targets.get(conversionQuery.getBaseCurrency() .getCurrencyCode()); ExchangeRate target = result.targets .get(conversionQuery.getCurrency().getCurrencyCode()); return createExchangeRate(conversionQuery, builder, sourceRate, target); }else{ throw new MonetaryException("Failed to load currency conversion data: " + loadState); } } catch(InterruptedException e){ throw new MonetaryException("Failed to load currency conversion data: Load task has been interrupted.", e); } }
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; }
@Override public ExchangeRate getExchangeRate(ConversionQuery conversionQuery) { CurrencyUnitPair pair = new CurrencyUnitPair(conversionQuery.getBaseCurrency(), conversionQuery.getCurrency()); MonitoredCurrency monitoredCurrency = monitoredCurrencies.get(pair); if (monitoredCurrency == null) { throw new CurrencyConversionException(pair.getBase(), pair.getTarget(), null, "Pair not found."); } ExchangeRate rate = null; try { rate = buildExchangeRate(pair, monitoredCurrency.getTicker()); } catch (TimeoutException e) { throw new MonetaryException("Timeout loading exchange rate", e); } catch (InterruptedException e) { Thread.currentThread().interrupt(); // Restore interruption flag } return rate; }
@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; }
@Override public ExchangeRate getExchangeRate(ConversionQuery query) { if (isAvailable(query)) { return new TestExchangeRate.Builder(PC.getProviderName(), RateType.OTHER).setFactor(new TestNumberValue(FACTOR)) .setBase(query.getBaseCurrency()).setTerm(query.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()); } }
@Override public ExchangeRate getExchangeRate(ConversionQuery conversionQuery) { if (isAvailable(conversionQuery)) { return new TestExchangeRate.Builder( ConversionContextBuilder.create(getContext(), RateType.OTHER).importContext(conversionQuery) .build()).setFactor(new TestNumberValue(2)).setBase(conversionQuery.getBaseCurrency()) .setTerm(conversionQuery.getCurrency()).build(); } return null; }