public class Money implements IMoney
1: package junit.samples.money;
2:
3: /**
4: * A simple Money.
5: *
6: */
7: public class Money implements IMoney {
8:
9: private int fAmount;
10: private String fCurrency;
11:
12: /**
13: * Constructs a money from the given amount and currency.
14: */
15: public Money(int amount, String currency) {
16: fAmount= amount;
17: fCurrency= currency;
18: }
19: /**
20: * Adds a money to this money. Forwards the request to the addMoney helper.
21: */
22: public IMoney add(IMoney m) {
23: return m.addMoney(this);
24: }
25: public IMoney addMoney(Money m) {
26: if (m.currency().equals(currency()) )
27: return new Money(amount()+m.amount(), currency());
28: return MoneyBag.create(this, m);
29: }
30: public IMoney addMoneyBag(MoneyBag s) {
31: return s.addMoney(this);
32: }
33: public int amount() {
34: return fAmount;
35: }
36: public String currency() {
37: return fCurrency;
38: }
39: public boolean equals(Object anObject) {
40: if (isZero())
41: if (anObject instanceof IMoney)
42: return ((IMoney)anObject).isZero();
43: if (anObject instanceof Money) {
44: Money aMoney= (Money)anObject;
45: return aMoney.currency().equals(currency())
46: && amount() == aMoney.amount();
47: }
48: return false;
49: }
50: public int hashCode() {
51: return fCurrency.hashCode()+fAmount;
52: }
53: public boolean isZero() {
54: return amount() == 0;
55: }
56: public IMoney multiply(int factor) {
57: return new Money(amount()*factor, currency());
58: }
59: public IMoney negate() {
60: return new Money(-amount(), currency());
61: }
62: public IMoney subtract(IMoney m) {
63: return add(m.negate());
64: }
65: public String toString() {
66: StringBuffer buffer = new StringBuffer();
67: buffer.append("["+amount()+" "+currency()+"]");
68: return buffer.toString();
69: }
70: public /*this makes no sense*/ void appendTo(MoneyBag m) {
71: m.appendMoney(this);
72: }
73: }