/** * Create a new Builder, hereby using the given {@link ProviderContext} * 's values as defaults. This allows changing an existing * {@link ProviderContext} easily. * * @param context the context, not {@code null} */ private ProviderContextBuilder(ProviderContext context) { importContext(context); Set<RateType> rts = new HashSet<>(); rts.addAll(context.getRateTypes()); set(ProviderContext.KEY_RATE_TYPES, rts); }
private static ProviderContext createContext(Iterable<ExchangeRateProvider> providers) { Set<RateType> rateTypeSet = new HashSet<>(); StringBuilder providerName = new StringBuilder("Compound: "); List<ProviderContext> childContextList = new ArrayList<>(); for (ExchangeRateProvider exchangeRateProvider : providers) { childContextList.add(exchangeRateProvider.getContext()); providerName.append(exchangeRateProvider.getContext().getProviderName()); providerName.append(',' ); rateTypeSet.addAll(exchangeRateProvider.getContext().getRateTypes()); } providerName.setLength(providerName.length() - 1); ProviderContextBuilder builder = ProviderContextBuilder.of(providerName.toString(), rateTypeSet); builder.set(CHILD_PROVIDER_CONTEXTS_KEY, childContextList); return builder.build(); }
@Override public CurrencyConversion getCurrencyConversion(ConversionQuery conversionQuery) { return new LazyBoundCurrencyConversion(conversionQuery, this, ConversionContext .of(getContext().getProviderName(), getContext().getRateTypes().iterator().next())); }
@Override public CurrencyConversion getCurrencyConversion(ConversionQuery conversionQuery) { if (getContext().getRateTypes().size() == 1) { return new LazyBoundCurrencyConversion(conversionQuery, this, ConversionContext .of(getContext().getProviderName(), getContext().getRateTypes().iterator().next())); } return new LazyBoundCurrencyConversion(conversionQuery, this, ConversionContext.of(getContext().getProviderName(), RateType.ANY)); }
/** * Test if all providers returns valid meta data. * * @see javax.money.convert.ProviderContext */ @Test(description = "4.3.1 Test if all ExchangeRateProvider instances returns valid ProviderContext.") @SpecAssertion(id = "431-A3", section = "4.3.1") public void testProviderMetadata() { for (String providerName : MonetaryConversions.getConversionProviderNames()) { ExchangeRateProvider prov = MonetaryConversions.getExchangeRateProvider(providerName); AssertJUnit.assertNotNull("Provider mot accessible: " + providerName, prov); ProviderContext ctx = prov.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.getRateTypes()); AssertJUnit.assertFalse( "ExchangeProvider's ProviderContext declares empty RateTypes to be returned: " + providerName, ctx.getRateTypes().isEmpty()); } }