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 |
}
|