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
japod@6
     1
package org.apidesign.apifest08.currency;
japod@6
     2
japod@6
     3
japod@6
     4
import java.math.BigDecimal;
japod@6
     5
import java.util.Currency;
japod@6
     6
import java.util.HashMap;
japod@6
     7
import java.util.Map;
japod@6
     8
japod@6
     9
/**
japod@6
    10
 * Default factory for convertors. Basically it just keeps exchange rates for given currency combinations.
japod@6
    11
 * @author lukas
japod@6
    12
 *
japod@6
    13
 */
japod@6
    14
class DefaultConvertorFactory {
japod@6
    15
	private static final Currency SKK = Currency.getInstance("SKK");
japod@6
    16
	private static final Currency USD = Currency.getInstance("USD");
japod@6
    17
	private static final Currency CZK = Currency.getInstance("CZK");
japod@6
    18
	private Map<String, Convertor> convertorMap = new HashMap<String, Convertor>();
japod@6
    19
	
japod@6
    20
	public 	DefaultConvertorFactory()
japod@6
    21
	{
japod@6
    22
		addConvertor(CZK,USD,BigDecimal.valueOf(17),BigDecimal.valueOf(1));
japod@6
    23
		addConvertor(CZK,SKK,BigDecimal.valueOf(80),BigDecimal.valueOf(100));
japod@6
    24
	}
japod@6
    25
japod@6
    26
	private void addConvertor(Currency sourceCurrency, Currency destinationCurrency, BigDecimal sourceEquivalent, BigDecimal destinationEquivalent) {
japod@6
    27
		DefaultConvertor convertor = new DefaultConvertor(sourceEquivalent, destinationEquivalent, sourceCurrency, destinationCurrency);
japod@6
    28
		convertorMap.put(getConvertorKey(sourceCurrency, destinationCurrency), convertor);
japod@6
    29
		convertorMap.put(getConvertorKey(destinationCurrency, sourceCurrency), convertor.revert());
japod@6
    30
	}
japod@6
    31
		
japod@6
    32
	public Convertor getConvertor(Currency sourceCurrency, Currency destinationCurrency) throws UnsupportedConversionException
japod@6
    33
	{
japod@6
    34
		String convertorKey = getConvertorKey(sourceCurrency, destinationCurrency);
japod@6
    35
		Convertor result = convertorMap.get(convertorKey);
japod@6
    36
		if (result!=null)
japod@6
    37
		{
japod@6
    38
			return result;
japod@6
    39
		}
japod@6
    40
		else
japod@6
    41
		{
japod@6
    42
			throw new UnsupportedConversionException("Conversion from "+sourceCurrency+" to "+destinationCurrency+" is not supported");
japod@6
    43
		}
japod@6
    44
	}
japod@6
    45
japod@6
    46
	private String getConvertorKey(Currency sourceCurrency,	Currency destinationCurrency) {
japod@6
    47
		return sourceCurrency.getCurrencyCode()+destinationCurrency.getCurrencyCode();
japod@6
    48
	}
japod@6
    49
}