task1/solution02/src/org/apidesign/apifest08/currency/MoneyImpl.java
author japod@localhost
Sun, 28 Sep 2008 14:12:38 +0200
changeset 6 97662396c0fd
child 16 2864c6d744c0
permissions -rw-r--r--
Adding solutions received for task1
japod@6
     1
package org.apidesign.apifest08.currency;
japod@6
     2
japod@6
     3
import java.io.Serializable;
japod@6
     4
import java.math.BigDecimal;
japod@6
     5
import java.util.Currency;
japod@6
     6
japod@6
     7
/**
japod@6
     8
 * Default implementation of {@link Money} interface. This class is immutable.
japod@6
     9
 * @author lukas
japod@6
    10
 *
japod@6
    11
 */
japod@6
    12
public final class MoneyImpl implements Serializable, Money{
japod@6
    13
	private static final long serialVersionUID = -6091808475616516136L;
japod@6
    14
japod@6
    15
	private final BigDecimal amount;
japod@6
    16
	
japod@6
    17
	private final Currency currency;
japod@6
    18
japod@6
    19
	public MoneyImpl(BigDecimal amount, Currency currency) {
japod@6
    20
		if (amount==null) throw new NullPointerException("Amount is null");
japod@6
    21
		if (currency==null) throw new NullPointerException("Currency is null"+currency);
japod@6
    22
		this.amount = amount.setScale(2);
japod@6
    23
		this.currency = currency;
japod@6
    24
	}
japod@6
    25
	
japod@6
    26
	public MoneyImpl(long amount, Currency currency) {
japod@6
    27
		this(BigDecimal.valueOf(amount), currency);
japod@6
    28
	}
japod@6
    29
	
japod@6
    30
	public MoneyImpl(double amount, Currency currency) {
japod@6
    31
		this(BigDecimal.valueOf(amount), currency);
japod@6
    32
	}
japod@6
    33
japod@6
    34
	/* (non-Javadoc)
japod@6
    35
	 * @see org.apidesign.apifest08.currency.Money#getAmount()
japod@6
    36
	 */
japod@6
    37
	public BigDecimal getAmount() {
japod@6
    38
		return amount;
japod@6
    39
	}
japod@6
    40
	
japod@6
    41
	/* (non-Javadoc)
japod@6
    42
	 * @see org.apidesign.apifest08.currency.Money#getCurrency()
japod@6
    43
	 */
japod@6
    44
	public Currency getCurrency() {
japod@6
    45
		return currency;
japod@6
    46
	}
japod@6
    47
japod@6
    48
	@Override
japod@6
    49
	public int hashCode() {
japod@6
    50
		final int prime = 31;
japod@6
    51
		int result = 1;
japod@6
    52
		result = prime * result + ((amount == null) ? 0 : amount.hashCode());
japod@6
    53
		result = prime * result
japod@6
    54
				+ ((currency == null) ? 0 : currency.hashCode());
japod@6
    55
		return result;
japod@6
    56
	}
japod@6
    57
japod@6
    58
	@Override
japod@6
    59
	public boolean equals(Object obj) {
japod@6
    60
		if (this == obj)
japod@6
    61
			return true;
japod@6
    62
		if (obj == null)
japod@6
    63
			return false;
japod@6
    64
		if (!(obj instanceof MoneyImpl))
japod@6
    65
			return false;
japod@6
    66
		MoneyImpl other = (MoneyImpl) obj;
japod@6
    67
		if (amount == null) {
japod@6
    68
			if (other.amount != null)
japod@6
    69
				return false;
japod@6
    70
		} else if (!amount.equals(other.amount))
japod@6
    71
			return false;
japod@6
    72
		if (currency == null) {
japod@6
    73
			if (other.currency != null)
japod@6
    74
				return false;
japod@6
    75
		} else if (!currency.equals(other.currency))
japod@6
    76
			return false;
japod@6
    77
		return true;
japod@6
    78
	}
japod@6
    79
	
japod@6
    80
	@Override
japod@6
    81
	public String toString() {
japod@6
    82
		return getClass().getName()+"["+currency+amount+"]";
japod@6
    83
	}
japod@6
    84
japod@6
    85
	
japod@6
    86
	
japod@6
    87
}