task1/solution02/src/org/apidesign/apifest08/currency/DefaultConvertorFactory.java
1 package org.apidesign.apifest08.currency;
4 import java.math.BigDecimal;
5 import java.util.Currency;
6 import java.util.HashMap;
10 * Default factory for convertors. Basically it just keeps exchange rates for given currency combinations.
14 class DefaultConvertorFactory {
15 private static final Currency SKK = Currency.getInstance("SKK");
16 private static final Currency USD = Currency.getInstance("USD");
17 private static final Currency CZK = Currency.getInstance("CZK");
18 private Map<String, Convertor> convertorMap = new HashMap<String, Convertor>();
20 public DefaultConvertorFactory()
22 addConvertor(CZK,USD,BigDecimal.valueOf(17),BigDecimal.valueOf(1));
23 addConvertor(CZK,SKK,BigDecimal.valueOf(80),BigDecimal.valueOf(100));
26 private void addConvertor(Currency sourceCurrency, Currency destinationCurrency, BigDecimal sourceEquivalent, BigDecimal destinationEquivalent) {
27 DefaultConvertor convertor = new DefaultConvertor(sourceEquivalent, destinationEquivalent, sourceCurrency, destinationCurrency);
28 convertorMap.put(getConvertorKey(sourceCurrency, destinationCurrency), convertor);
29 convertorMap.put(getConvertorKey(destinationCurrency, sourceCurrency), convertor.revert());
32 public Convertor getConvertor(Currency sourceCurrency, Currency destinationCurrency) throws UnsupportedConversionException
34 String convertorKey = getConvertorKey(sourceCurrency, destinationCurrency);
35 Convertor result = convertorMap.get(convertorKey);
42 throw new UnsupportedConversionException("Conversion from "+sourceCurrency+" to "+destinationCurrency+" is not supported");
46 private String getConvertorKey(Currency sourceCurrency, Currency destinationCurrency) {
47 return sourceCurrency.getCurrencyCode()+destinationCurrency.getCurrencyCode();