/** * Get the default provider used. * * @return the default provider, never {@code null}. */ public static List<String> getDefaultConversionProviderChain(){ List<String> defaultChain = getMonetaryConversionsSpi() .getDefaultProviderChain(); Objects.requireNonNull(defaultChain, "No default provider chain provided by SPI: " + getMonetaryConversionsSpi().getClass().getName()); return defaultChain; }
/** * Checks if a {@link javax.money.convert.ExchangeRateProvider} is available for the given parameters. * * @param conversionQuery the {@link javax.money.convert.ConversionQuery}, not null. * @return true, if a rate provider is accessible from {@link #getExchangeRateProvider(ConversionQuery)}}. */ public static boolean isExchangeRateProviderAvailable(ConversionQuery conversionQuery){ return getMonetaryConversionsSpi() .isExchangeRateProviderAvailable(conversionQuery); }
/** * Access an instance of {@link CurrencyConversion} for the given providers. * Use {@link #getConversionProviderNames()}} to check, which are available. * * @param conversionQuery The {@link ConversionQuery} required, not {@code null} * @return the {@link CurrencyConversion} instance matching. * @throws IllegalArgumentException if the query defines {@link ExchangeRateProvider}s that are not available. */ public static CurrencyConversion getConversion(ConversionQuery conversionQuery){ return getMonetaryConversionsSpi().getConversion(conversionQuery); }
/** * Checks if a {@link javax.money.convert.CurrencyConversion} is available for the given parameters. * * @param termCurrency the terminating or target currency, not {@code null} * @param providers Additional providers, for building a provider chain * @return true, if a conversion is accessible from {@link #getConversion(String, String...)}. */ public static boolean isConversionAvailable(CurrencyUnit termCurrency, String... providers){ return getMonetaryConversionsSpi() .isConversionAvailable(termCurrency, providers); }
/** * Checks if a {@link javax.money.convert.CurrencyConversion} is available for the given parameters. * * @param conversionQuery the {@link javax.money.convert.ConversionQuery}, not null. * @return true, if a conversion is accessible from {@link #getConversion(ConversionQuery)}. */ public static boolean isConversionAvailable(ConversionQuery conversionQuery){ return getMonetaryConversionsSpi().isConversionAvailable(conversionQuery); }
/** * Access an instance of {@link CurrencyConversion} using the given * providers as a provider chain. Use {@link #getConversionProviderNames()} * to check, which are available. * * @return the exchange rate provider. * @throws IllegalArgumentException if no such {@link ExchangeRateProvider} is available. */ public static ExchangeRateProvider getExchangeRateProvider(ConversionQuery conversionQuery){ return getMonetaryConversionsSpi() .getExchangeRateProvider(conversionQuery); }
/** * Return the (non localized) names of all providers available in the * current context. Each id can be used to obtain * {@link ExchangeRateProvider} or {@link CurrencyConversion} instances. * * @return all supported provider ids, never {@code null}. */ public static Collection<String> getConversionProviderNames(){ Collection<String> providers = getMonetaryConversionsSpi().getProviderNames(); if(Objects.isNull(providers)){ Logger.getLogger(MonetaryConversions.class.getName()).warning( "No supported rate/conversion providers returned by SPI: " + getMonetaryConversionsSpi().getClass().getName()); return Collections.emptySet(); } return providers; }
/** * Checks if a {@link javax.money.convert.CurrencyConversion} is available for the given parameters. * * @param currencyCode The currencoy code, resolvable by {@link javax.money.Monetary#getCurrency * (String, String...)} * @param providers Additional providers, for building a provider chain * @return true, if a conversion is accessible from {@link #getConversion(String, String...)}. */ public static boolean isConversionAvailable(String currencyCode, String... providers){ return getMonetaryConversionsSpi() .isConversionAvailable(Monetary.getCurrency(currencyCode), providers); }
/** * 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 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()); }