2 package org.apidesign.apifest08.currency;
4 import java.util.ArrayList;
7 public final class ConvertorFactory {
10 private static ConvertorFactory thisFactory = new ConvertorFactory();
11 private ConvertorFactory() {};
12 public static ConvertorFactory newInstance() { //ehm, mistake - it should be named getInstance
16 public Convertor createConvertor(String currency1, String currency2, Rate rate) {
17 return new Convertor(currency1, currency2, rate);
20 public Convertor createConvertor(String currency1, String currency2, int amount1, int amount2) {
21 return new Convertor(currency1, currency2, new Rate(amount1, amount2));
24 public Convertor createConvertor(String currency1, String currency2, double amount1, double amount2) {
25 return new Convertor(currency1, currency2, new Rate(amount1, amount2));
28 public Convertor createConvertor(String currency1, String currency2, double rate) {
29 return new Convertor(currency1, currency2, new Rate(rate));
32 public Convertor createConvertor(CurrencyRate currencyRate) {
33 return new Convertor(currencyRate);
36 public Convertor createConvertor(CurrencyRate ... currencyRates) {
37 return new Convertor(currencyRates);
40 public Convertor mergeConvertors(Convertor ... convertors) {
41 if (convertors == null) {
42 throw new IllegalArgumentException("Parameter cannot be null.");
44 if (convertors.length == 0) {
45 throw new IllegalArgumentException("Convertors cannot be empty.");
47 List<CurrencyRate> currRates = new ArrayList<CurrencyRate>();
48 List<Pair<String,String>> currPairs = new ArrayList<Pair<String,String>>();
49 for (Convertor convertor : convertors) {
50 if (convertor == null) {
51 throw new IllegalArgumentException("Parameter cannot be null.");
53 for (CurrencyRate currRate : convertor.getCurrencyRates()) {
54 Pair<String,String> currPair = new Pair<String,String>(currRate.getCurrency1(), currRate.getCurrency2());
55 if (currPairs.contains(currPair)) {
56 throw new IllegalArgumentException("Cannot merge - convertors contain same currency rates.");
58 currPairs.add(currPair);
59 currRates.add(currRate);
63 return new Convertor(currRates.toArray(new CurrencyRate[0]));