/** * Access an instance of {@link CurrencyConversion} using the given * providers as a provider chain. Use {@link #getConversionProviderNames()}s * to check, which are available. * * @return the exchange rate provider. * @throws IllegalArgumentException if no such {@link ExchangeRateProvider} is available. */ public static ExchangeRateProvider getExchangeRateProvider(String... providers){ if(providers.length == 0){ List<String> defaultProviderChain = getDefaultConversionProviderChain(); return getMonetaryConversionsSpi().getExchangeRateProvider(ConversionQueryBuilder.of().setProviderNames( defaultProviderChain.toArray(new String[defaultProviderChain.size()])).build()); } ExchangeRateProvider provider = getMonetaryConversionsSpi() .getExchangeRateProvider(ConversionQueryBuilder.of().setProviderNames(providers).build()); return Optional.ofNullable(provider) .orElseThrow(() -> new MonetaryException("No such rate provider: " + Arrays.toString(providers))); }
/** * Access a compound instance of an {@link ExchangeRateProvider} based on the given provider chain. * * @param providers the {@link javax.money.convert.ConversionQuery} provider names defines a corresponding * provider chain that must be * encapsulated by the resulting {@link javax.money.convert.ExchangeRateProvider}. By default * the default * provider changes as defined in #getDefaultCurrencyProviderChain will be used. * @return an {@link ExchangeRateProvider} built up with the given sub * providers, never {@code null}. * @throws MonetaryException if a provider listed could not be found. * @see #getProviderNames() * @see #isExchangeRateProviderAvailable(javax.money.convert.ConversionQuery) */ default ExchangeRateProvider getExchangeRateProvider(String... providers) { return getExchangeRateProvider(ConversionQueryBuilder.of().setProviderNames(providers).build()); }
/** * Access an instance of {@link CurrencyConversion}. * * @param termCurrency the terminating/target currency unit, not null. * @param providers the {@link javax.money.convert.ConversionQuery} provider names defines a corresponding * provider chain that must be encapsulated by the resulting {@link javax * .money.convert.CurrencyConversion}. By default the default * provider chain as defined by #getDefaultCurrencyProviderChain will be used. * @return the corresponding conversion, not null. * @throws javax.money.MonetaryException if no matching conversion could be found. * @see #isConversionAvailable(javax.money.convert.ConversionQuery) */ default CurrencyConversion getConversion(CurrencyUnit termCurrency, String... providers) { return getConversion(ConversionQueryBuilder.of().setTermCurrency(termCurrency).setProviderNames(providers).build()); }
/** * Access an instance of {@link CurrencyConversion} for the given providers. * Use {@link #getConversionProviderNames()} to check, which are available. * * @param termCurrency the terminating or target currency, not {@code null} * @param providers Additional providers, for building a provider chain * @return the exchange rate type if this instance. * @throws IllegalArgumentException if no such {@link ExchangeRateProvider} is available. */ public static CurrencyConversion getConversion(CurrencyUnit termCurrency, String... providers){ Objects.requireNonNull(providers); Objects.requireNonNull(termCurrency); if(providers.length == 0){ return getMonetaryConversionsSpi().getConversion( ConversionQueryBuilder.of().setTermCurrency(termCurrency).setProviderNames(getDefaultConversionProviderChain()) .build()); } return getMonetaryConversionsSpi().getConversion( ConversionQueryBuilder.of().setTermCurrency(termCurrency).setProviderNames(providers).build()); }
/** * Allows to quickly check, if a {@link javax.money.convert.CurrencyConversion} is accessible for the given * {@link javax.money.convert.ConversionQuery}. * * @param termCurrency the terminating/target currency unit, not null. * @param providers the provider names defines a corresponding * provider chain that must be encapsulated by the resulting {@link javax * .money.convert.CurrencyConversion}. By default the provider * chain as defined by #getDefaultCurrencyProviderChain will be used. * @return {@code true}, if such a conversion is supported, meaning an according * {@link CurrencyConversion} can be * accessed. * @see #getConversion(javax.money.convert.ConversionQuery) * @see #getConversion(CurrencyUnit, String...)} */ default boolean isConversionAvailable(CurrencyUnit termCurrency, String... providers) { return isConversionAvailable( ConversionQueryBuilder.of().setTermCurrency(termCurrency).setProviderNames(providers).build()); }
/** * Test if all providers returns valid meta data. * * @see javax.money.convert.ProviderContext */ @Test(description = "4.3.1 Test if all CurrencyConversion instances returns valid ConversionContext, accessed by " + "ConversionQuery/currency code.") @SpecAssertion(id = "431-A3", section = "4.3.1") public void testProviderMetadata2WithContext() { for (String providerName : MonetaryConversions.getConversionProviderNames()) { ConversionQuery query = ConversionQueryBuilder.of(). setTermCurrency("XXX").setProviderNames(providerName).build(); if (MonetaryConversions.isConversionAvailable(query)) { CurrencyConversion conv = MonetaryConversions.getConversion(query); ConversionContext ctx = conv.getContext(); AssertJUnit.assertNotNull( "ExchangeProvider must return a valid ProviderContext, but returned null: " + providerName, ctx); AssertJUnit.assertEquals("ExchangeProvider's ProviderContext returns invalid name: " + providerName, providerName, ctx.getProviderName()); AssertJUnit.assertNotNull( "ExchangeProvider's ProviderContext declares invalid RateTypes to be returned (null): " + providerName, ctx.getRateType()); } } }
for (String providerName : MonetaryConversions.getConversionProviderNames()) { ConversionQuery query = ConversionQueryBuilder.of().setTermCurrency("XXX").setProviderNames(providerName).build(); try { if (MonetaryConversions.isConversionAvailable(query)) {