task1/solution02/src/org/apidesign/apifest08/currency/DefaultConvertorFactory.java
author japod@localhost
Sun, 28 Sep 2008 14:12:38 +0200
changeset 6 97662396c0fd
permissions -rw-r--r--
Adding solutions received for task1
     1 package org.apidesign.apifest08.currency;
     2 
     3 
     4 import java.math.BigDecimal;
     5 import java.util.Currency;
     6 import java.util.HashMap;
     7 import java.util.Map;
     8 
     9 /**
    10  * Default factory for convertors. Basically it just keeps exchange rates for given currency combinations.
    11  * @author lukas
    12  *
    13  */
    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>();
    19 	
    20 	public 	DefaultConvertorFactory()
    21 	{
    22 		addConvertor(CZK,USD,BigDecimal.valueOf(17),BigDecimal.valueOf(1));
    23 		addConvertor(CZK,SKK,BigDecimal.valueOf(80),BigDecimal.valueOf(100));
    24 	}
    25 
    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());
    30 	}
    31 		
    32 	public Convertor getConvertor(Currency sourceCurrency, Currency destinationCurrency) throws UnsupportedConversionException
    33 	{
    34 		String convertorKey = getConvertorKey(sourceCurrency, destinationCurrency);
    35 		Convertor result = convertorMap.get(convertorKey);
    36 		if (result!=null)
    37 		{
    38 			return result;
    39 		}
    40 		else
    41 		{
    42 			throw new UnsupportedConversionException("Conversion from "+sourceCurrency+" to "+destinationCurrency+" is not supported");
    43 		}
    44 	}
    45 
    46 	private String getConvertorKey(Currency sourceCurrency,	Currency destinationCurrency) {
    47 		return sourceCurrency.getCurrencyCode()+destinationCurrency.getCurrencyCode();
    48 	}
    49 }