/** * Loads the SPI backing bean. * * @return the instance of MonetaryFormatsSingletonSpi to be used by this singleton. */ private static MonetaryFormatsSingletonSpi loadMonetaryFormatsSingletonSpi() { try { return Optional.ofNullable(Bootstrap.getService(MonetaryFormatsSingletonSpi.class)) .orElseGet(DefaultMonetaryFormatsSingletonSpi::new); } catch (Exception e) { Logger.getLogger(MonetaryFormats.class.getName()) .log(Level.WARNING, "Failed to load MonetaryFormatsSingletonSpi, using default.", e); return new DefaultMonetaryFormatsSingletonSpi(); } }
/** * This default implementation simply returns all providers defined in arbitrary order. * * @return the default provider chain, never null. */ @Override public List<String> getDefaultProviderChain() { List<String> list = new ArrayList<>(); list.addAll(getProviderNames()); Collections.sort(list); return list; }
private Collection<MonetaryAmountFormatProviderSpi> getSpis(String... providerNames) { List<MonetaryAmountFormatProviderSpi> providers = new ArrayList<>(); Map<String, MonetaryAmountFormatProviderSpi> spis = getSpisAsMap(); if (providerNames.length == 0) { providers.addAll(spis.values()); } else { for (String provName : providerNames) { MonetaryAmountFormatProviderSpi spi = spis.get(provName); if (Objects.isNull(spi)) { throw new IllegalArgumentException("MonetaryAmountFormatProviderSpi not found: " + provName); } providers.add(spi); } } return providers; }
/** * Get all available locales. This equals to {@link javax.money.spi * .MonetaryAmountFormatProviderSpi#getAvailableLocales()}. * * @return all available locales, never {@code null}. */ @Override public Set<Locale> getAvailableLocales(String... providerNames) { Set<Locale> locales = new HashSet<>(); Collection<MonetaryAmountFormatProviderSpi> spis = getSpis(providerNames); for (MonetaryAmountFormatProviderSpi spi : spis) { locales.addAll(spi.getAvailableLocales()); } return locales; }
@Override public Set<String> getProviderNames() { return getSpisAsMap().keySet(); }