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