001/*
002 * CREDIT SUISSE IS WILLING TO LICENSE THIS SPECIFICATION TO YOU ONLY UPON THE CONDITION THAT YOU
003 * ACCEPT ALL OF THE TERMS CONTAINED IN THIS AGREEMENT. PLEASE READ THE TERMS AND CONDITIONS OF THIS
004 * AGREEMENT CAREFULLY. BY DOWNLOADING THIS SPECIFICATION, YOU ACCEPT THE TERMS AND CONDITIONS OF
005 * THE AGREEMENT. IF YOU ARE NOT WILLING TO BE BOUND BY IT, SELECT THE "DECLINE" BUTTON AT THE
006 * BOTTOM OF THIS PAGE. Specification: JSR-354 Money and Currency API ("Specification") Copyright
007 * (c) 2012-2013, Credit Suisse All rights reserved.
008 */
009package org.javamoney.moneta.internal;
010
011import java.math.RoundingMode;
012
013import javax.money.CurrencyUnit;
014import javax.money.MonetaryAmountFactory;
015import javax.money.MonetaryContext;
016import javax.money.MonetaryContext.AmountFlavor;
017
018import org.javamoney.moneta.FastMoney;
019import org.javamoney.moneta.spi.AbstractAmountFactory;
020
021/**
022 * Implementation of {@link MonetaryAmountFactory} creating instances of {@link FastMoney}.
023 * 
024 * @author Anatole Tresch
025 */
026public class FastMoneyAmountFactory extends AbstractAmountFactory<FastMoney> {
027
028        static final MonetaryContext DEFAULT_CONTEXT = new MonetaryContext.Builder(
029                        FastMoney.class).setPrecision(18)
030                        .setMaxScale(5).setFixedScale(true)
031                        .set(RoundingMode.HALF_EVEN)
032                        .setFlavor(AmountFlavor.PERFORMANCE).create();
033        static final MonetaryContext MAX_CONTEXT = new MonetaryContext.Builder(
034                        FastMoney.class).setPrecision(18)
035                        .setMaxScale(5).setFixedScale(true)
036                        .set(RoundingMode.HALF_EVEN)
037                        .setFlavor(AmountFlavor.PERFORMANCE).create();
038
039        @Override
040        protected FastMoney create(CurrencyUnit currency, Number number,
041                        MonetaryContext monetaryContext) {
042                return FastMoney.of(currency, number);
043        }
044
045        @Override
046        public Class<FastMoney> getAmountType() {
047                return FastMoney.class;
048        }
049
050        @Override
051        protected MonetaryContext loadDefaultMonetaryContext() {
052                return DEFAULT_CONTEXT;
053        }
054
055        @Override
056        protected MonetaryContext loadMaxMonetaryContext() {
057                return MAX_CONTEXT;
058        }
059
060}