task4/solution04/src/org/apidesign/apifest08/currency/DatedConvertorImpl.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 25 Oct 2008 20:53:00 +0200
changeset 84 2ae6e4aa7aef
permissions -rw-r--r--
Solutions by Petr Smid
     1 package org.apidesign.apifest08.currency;
     2 
     3 import java.math.BigDecimal;
     4 import java.util.Currency;
     5 import java.util.Date;
     6 
     7 
     8 final class DatedConvertorImpl
     9     extends    ConvertorImpl
    10     implements DatedConvertor
    11 {
    12     private final DateRange range;
    13     
    14     DatedConvertorImpl(final DateRange rng,
    15                        final ExchangeRate r)
    16     {
    17         super(r);
    18         
    19         if(rng == null)
    20         {
    21             throw new IllegalArgumentException("rng cannot be null");
    22         }
    23 
    24         range = rng;
    25     }
    26     
    27     public DateRange getDateRange()
    28     {
    29         return (range);
    30     }
    31 
    32     @Override
    33     public BigDecimal convert(final Currency   from,
    34                               final Currency   to,
    35                               final BigDecimal amount)
    36         throws InvalidConversionException
    37     {
    38         final BigDecimal total;
    39         
    40         total = convert(from, to, amount, new Date(System.currentTimeMillis()));
    41         
    42         return (total);
    43     }
    44 
    45     public BigDecimal convert(final Currency   from,
    46                               final Currency   to,
    47                               final BigDecimal amount,
    48                               final Date       date)
    49         throws InvalidConversionException
    50     {
    51         final BigDecimal total;
    52 
    53         if(range.isInRange(date))
    54         {
    55             total = super.convert(from, to, amount);
    56         }
    57         else
    58         {
    59             throw new InvalidConversionException("cannot convert for date", from);
    60         }
    61 
    62         return (total);
    63     }
    64 
    65     public boolean canConvert(final Currency from,
    66                               final Currency to,
    67                               final Date     date)
    68     {
    69         final boolean retVal;
    70 
    71         if(canConvert(from, to))
    72         {
    73             retVal = range.isInRange(date);
    74         }
    75         else
    76         {
    77             retVal = false;
    78         }
    79 
    80         return (retVal);
    81     }
    82 }