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