task2/solution08/src/org/apidesign/apifest08/currency/Convertor.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 01 Oct 2008 10:43:05 +0200
changeset 29 f6073056b9fe
parent 6 task1/solution08/src/org/apidesign/apifest08/currency/Convertor.java@97662396c0fd
permissions -rw-r--r--
Getting ready for task2: copying all solutions to new locations
     1 package org.apidesign.apifest08.currency;
     2 
     3 import java.util.Currency;
     4 import java.util.Hashtable;
     5 import java.util.Map;
     6 
     7 /** This is the skeleton class for your API. You need to make it public, so
     8  * it is accessible to your client code (currently in Task1Test.java) file.
     9  * <p>
    10  * Feel free to create additional classes or rename this one, just keep all
    11  * the API and its implementation in this package. Do not spread it outside
    12  * to other packages.
    13  */
    14 public class Convertor {
    15     
    16     private static final Map<String, Float> EXCHANGE_RATES = new Hashtable<String, Float>() { {
    17             put("CZKUSD", 1/17F);
    18             put("USDCZK", 17F);
    19             put("SKKCZK", 100/80F);
    20             put("CZKSKK", 80/100F);
    21         }
    22     };
    23     
    24     private Currency currencyFirst;
    25     private Currency currencySecond;
    26     
    27     private Convertor(Currency currencyFirst, Currency currencySecond) {
    28         this.currencyFirst = currencyFirst;
    29         this.currencySecond = currencySecond;
    30     }
    31     
    32     public static Convertor getInstanceFor(Currency currencyFirst, Currency currencySecond) {
    33         return new Convertor(currencyFirst, currencySecond);
    34     }
    35     
    36     public float convert(float value, Currency toCurrency) {
    37         if (!toCurrency.equals(currencyFirst) && !toCurrency.equals(currencySecond)) {
    38             throw new IllegalArgumentException("Unsupported currency for this convertor!: " + toCurrency.getCurrencyCode());
    39         }
    40         
    41         Float rate = null;
    42         if (toCurrency.equals(currencyFirst)) {
    43             rate = EXCHANGE_RATES.get(currencyFirst.getCurrencyCode() + currencySecond.getCurrencyCode());
    44         }
    45         if (toCurrency.equals(currencySecond)) {
    46             rate = EXCHANGE_RATES.get(currencySecond.getCurrencyCode() + currencyFirst.getCurrencyCode());
    47         }
    48 
    49         if (rate == null) {
    50             throw new IllegalStateException("Undefinied conversion!");
    51         }
    52 
    53         return rate*value;
    54     }
    55 }