task1/solution06/src/org/apidesign/apifest08/currency/Amount.java
author japod@localhost
Sun, 28 Sep 2008 14:12:38 +0200
changeset 6 97662396c0fd
child 21 61e4c4c120fd
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.math.BigDecimal;
japod@6
     4
import java.math.RoundingMode;
japod@6
     5
import java.util.Currency;
japod@6
     6
import static org.apidesign.apifest08.currency.Assert.*;
japod@6
     7
japod@6
     8
/**
japod@6
     9
 * An amount representation. Amount is represented as composition of a value and 
japod@6
    10
 * a currency.
japod@6
    11
 */
japod@6
    12
public final class Amount {
japod@6
    13
	
japod@6
    14
	private final BigDecimal value;
japod@6
    15
	private final Currency currency;
japod@6
    16
	private final int scale;
japod@6
    17
	private final RoundingMode roundingMode;
japod@6
    18
	
japod@6
    19
	public static final RoundingMode DEFAULT_ROUNDING = RoundingMode.HALF_EVEN; 
japod@6
    20
	
japod@6
    21
	public Amount(final BigDecimal value, final Currency currency) {
japod@6
    22
		notNull(value, "value");
japod@6
    23
		notNull(currency, "currency");
japod@6
    24
		this.value = value;
japod@6
    25
		this.currency = currency;
japod@6
    26
		this.scale = currency.getDefaultFractionDigits();
japod@6
    27
		this.roundingMode = DEFAULT_ROUNDING;
japod@6
    28
	}
japod@6
    29
	
japod@6
    30
	public Amount(final BigDecimal value, final Currency currency, final RoundingMode roundingMode) {
japod@6
    31
		notNull(value, "value");
japod@6
    32
		notNull(currency, "currency");
japod@6
    33
		notNull(roundingMode, "roundingMode");
japod@6
    34
		
japod@6
    35
		this.value = value;
japod@6
    36
		this.currency = currency;
japod@6
    37
		this.scale = currency.getDefaultFractionDigits();
japod@6
    38
		this.roundingMode = roundingMode;
japod@6
    39
	}
japod@6
    40
	
japod@6
    41
	public Amount(final long value, final Currency currency) {
japod@6
    42
		this(BigDecimal.valueOf(value), currency);
japod@6
    43
	}
japod@6
    44
	
japod@6
    45
	public Amount(final String value, final Currency currency) {
japod@6
    46
		this(new BigDecimal(value), currency);
japod@6
    47
	}
japod@6
    48
	
japod@6
    49
	/**
japod@6
    50
	 * @return the value with scale of the associated currency and rounded by 
japod@6
    51
	 * the rounding mode. 
japod@6
    52
	 */
japod@6
    53
	public BigDecimal getValue() {
japod@6
    54
		return value.setScale(scale, roundingMode);
japod@6
    55
	}
japod@6
    56
	
japod@6
    57
	/**
japod@6
    58
	 * @return the raw (no explicit scale, no explicit rounding) value 
japod@6
    59
	 */
japod@6
    60
	public BigDecimal getRawValue() {
japod@6
    61
		return value;
japod@6
    62
	}
japod@6
    63
	
japod@6
    64
	public Currency getCurrency() {
japod@6
    65
		return currency;
japod@6
    66
	}
japod@6
    67
japod@6
    68
	public int getScale() {
japod@6
    69
		return scale;
japod@6
    70
	}
japod@6
    71
japod@6
    72
	public RoundingMode getRoundingMode() {
japod@6
    73
		return roundingMode;
japod@6
    74
	}
japod@6
    75
japod@6
    76
	@Override
japod@6
    77
	public String toString() {
japod@6
    78
		return value + ",- " + currency.toString();
japod@6
    79
	}	
japod@6
    80
}