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