Java cvprof Coverage Report for
MoneyBag.java

    1   package junit.samples.money;
    2   
    3   import java.util.*;
    4   
    5   /**
    6    * A MoneyBag defers exchange rate conversions. For example adding 
    7    * 12 Swiss Francs to 14 US Dollars is represented as a bag 
    8    * containing the two Monies 12 CHF and 14 USD. Adding another
    9    * 10 Swiss francs gives a bag with 22 CHF and 14 USD. Due to 
   10    * the deferred exchange rate conversion we can later value a 
   11    * MoneyBag with different exchange rates.
   12    *
   13    * A MoneyBag is represented as a list of Monies and provides 
   14    * different constructors to create a MoneyBag. 
   15    */ 
   16   class MoneyBag implements IMoney {
   17   	private Vector fMonies= new Vector(5);
   18   
   19   	static IMoney create(IMoney m1, IMoney m2) {
   20   		MoneyBag result= new MoneyBag();
   21   		m1.appendTo(result);
   22   		m2.appendTo(result);
   23   		return result.simplify();
   24   	}
   25   	public IMoney add(IMoney m) {
   26   		return m.addMoneyBag(this);
   27   	}
   28   	public IMoney addMoney(Money m) { 
   29   		return MoneyBag.create(m, this);
   30   	}
   31   	public IMoney addMoneyBag(MoneyBag s) {
   32   		return MoneyBag.create(s, this);
   33   	}
   34   	void appendBag(MoneyBag aBag) {
   35   		for (Enumeration e= aBag.fMonies.elements(); e.hasMoreElements(); )
   36   			appendMoney((Money)e.nextElement());
   37   	}
   38   	void appendMoney(Money aMoney) {
   39   		if (aMoney.isZero()) return;
   40   		IMoney old= findMoney(aMoney.currency());
   41   		if (old == null) {
   42   			fMonies.addElement(aMoney);
   43   			return;
   44   		}
   45   		fMonies.removeElement(old);
   46   		IMoney sum= old.add(aMoney);
   47   		if (sum.isZero()) 
   48   			return;
   49   		fMonies.addElement(sum);
   50   	}
   51   	public boolean equals(Object anObject) {
   52   		if (isZero())
   53 > 			if (anObject instanceof IMoney)
   54 > 				return ((IMoney)anObject).isZero();
   55   
   56   		if (anObject instanceof MoneyBag) {
   57   			MoneyBag aMoneyBag= (MoneyBag)anObject;
   58   			if (aMoneyBag.fMonies.size() != fMonies.size())
   59 > 				return false;
   60   
   61   		    for (Enumeration e= fMonies.elements(); e.hasMoreElements(); ) {
   62   		        Money m= (Money) e.nextElement();
   63   				if (!aMoneyBag.contains(m))
   64   					return false;
   65   			}
   66   			return true;
   67   		}
   68   		return false;
   69   	}
   70   	private Money findMoney(String currency) {
   71   		for (Enumeration e= fMonies.elements(); e.hasMoreElements(); ) {
   72   			Money m= (Money) e.nextElement();
   73   			if (m.currency().equals(currency))
   74   				return m;
   75   		}
   76   		return null;
   77   	}
   78   	private boolean contains(Money m) {
   79   		Money found= findMoney(m.currency());
   80   		if (found == null) return false;
   81   		return found.amount() == m.amount();
   82   	}
   83   	public int hashCode() {
   84   		int hash= 0;
   85   	    for (Enumeration e= fMonies.elements(); e.hasMoreElements(); ) {
   86   	        Object m= e.nextElement();
   87   			hash^= m.hashCode();
   88   		}
   89   	    return hash;
   90   	}
   91   	public boolean isZero() {
   92   		return fMonies.size() == 0;
   93   	}
   94   	public IMoney multiply(int factor) {
   95   		MoneyBag result= new MoneyBag();
   96   		if (factor != 0) {
   97   			for (Enumeration e= fMonies.elements(); e.hasMoreElements(); ) {
   98   				Money m= (Money) e.nextElement();
   99   				result.appendMoney((Money)m.multiply(factor));
  100   			}
  101   		}
  102   		return result;
  103   	}
  104   	public IMoney negate() {
  105   		MoneyBag result= new MoneyBag();
  106   	    for (Enumeration e= fMonies.elements(); e.hasMoreElements(); ) {
  107   	        Money m= (Money) e.nextElement();
  108   	        result.appendMoney((Money)m.negate());
  109   		}
  110   		return result;
  111   	}
  112   	private IMoney simplify() {
  113   		if (fMonies.size() == 1)
  114   			return (IMoney)fMonies.elements().nextElement();
  115   		return this;
  116   	}
  117   	public IMoney subtract(IMoney m) {
  118   		return add(m.negate());
  119   	}
  120   	public String toString() {
  121 > 		StringBuffer buffer = new StringBuffer();
  122 > 		buffer.append("{");
  123 > 		for (Enumeration e= fMonies.elements(); e.hasMoreElements(); )
  124 > 		    buffer.append(e.nextElement());
  125 > 		buffer.append("}");
  126 > 		return buffer.toString();
  127   	}
  128   	public void appendTo(MoneyBag m) {
  129   		m.appendBag(this);
  130   	}
  131   }