Source of Money.java


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