001package org.javamoney.moneta.internal; 002 003import java.math.RoundingMode; 004 005import javax.money.CurrencyUnit; 006import javax.money.MonetaryContext; 007import javax.money.MonetaryContext.AmountFlavor; 008 009import org.javamoney.moneta.Money; 010import org.javamoney.moneta.spi.AbstractAmountFactory; 011 012/** 013 * Implementation of {@link javax.money.MonetaryAmountFactory} creating instances of {@link Money}. 014 * 015 * @author Anatole Tresch 016 */ 017public class MoneyAmountFactory extends AbstractAmountFactory<Money> { 018 019 static final MonetaryContext DEFAULT_CONTEXT = new MonetaryContext.Builder( 020 Money.class).setPrecision(64) 021 .setMaxScale(63).set(RoundingMode.HALF_EVEN) 022 .setFlavor(AmountFlavor.PRECISION).create(); 023 static final MonetaryContext MAX_CONTEXT = new MonetaryContext.Builder( 024 Money.class).setPrecision(0) 025 .setMaxScale(-1).set(RoundingMode.HALF_EVEN) 026 .setFlavor(AmountFlavor.PRECISION).create(); 027 028 @Override 029 protected Money create(CurrencyUnit currency, Number number, 030 MonetaryContext monetaryContext) { 031 return Money.of(currency, number, 032 MonetaryContext.from(monetaryContext, Money.class)); 033 } 034 035 @Override 036 public Class<Money> getAmountType() { 037 return Money.class; 038 } 039 040 @Override 041 protected MonetaryContext loadDefaultMonetaryContext() { 042 return DEFAULT_CONTEXT; 043 } 044 045 @Override 046 protected MonetaryContext loadMaxMonetaryContext() { 047 return MAX_CONTEXT; 048 } 049 050}