001package org.javamoney.moneta.internal;
002
003import org.javamoney.moneta.RoundedMoney;
004import org.javamoney.moneta.spi.AbstractAmountFactory;
005
006import javax.money.CurrencyUnit;
007import javax.money.MonetaryContext;
008import javax.money.MonetaryContext.AmountFlavor;
009import java.math.RoundingMode;
010
011/**
012 * Implementation of {@link javax.money.MonetaryAmountFactory} creating instances of {@link org.javamoney.moneta
013 * .RoundedMoney}.
014 *
015 * @author Anatole Tresch
016 */
017public class RoundedMoneyAmountFactory extends AbstractAmountFactory<RoundedMoney>{
018
019    static final MonetaryContext DEFAULT_CONTEXT =
020            new MonetaryContext.Builder(RoundedMoney.class).setPrecision(0).set(RoundingMode.HALF_EVEN)
021                    .setFlavor(AmountFlavor.UNDEFINED).create();
022    static final MonetaryContext MAX_CONTEXT =
023            new MonetaryContext.Builder(RoundedMoney.class).setPrecision(0).set(RoundingMode.HALF_EVEN)
024                    .setFlavor(AmountFlavor.UNDEFINED).create();
025
026    /*
027     * (non-Javadoc)
028     * @see org.javamoney.moneta.spi.AbstractAmountFactory#create(javax.money.CurrencyUnit,
029     * java.lang.Number, javax.money.MonetaryContext)
030     */
031    @Override
032    protected RoundedMoney create(CurrencyUnit currency, Number number, MonetaryContext monetaryContext){
033        return RoundedMoney.of(currency, number);
034    }
035
036    /*
037     * (non-Javadoc)
038     * @see javax.money.MonetaryAmountFactory#getAmountType()
039     */
040    @Override
041    public Class<RoundedMoney> getAmountType(){
042        return RoundedMoney.class;
043    }
044
045    /*
046     * (non-Javadoc)
047     * @see org.javamoney.moneta.spi.AbstractAmountFactory#loadDefaultMonetaryContext()
048     */
049    @Override
050    protected MonetaryContext loadDefaultMonetaryContext(){
051        return DEFAULT_CONTEXT;
052    }
053
054    /*
055     * (non-Javadoc)
056     * @see org.javamoney.moneta.spi.AbstractAmountFactory#loadMaxMonetaryContext()
057     */
058    @Override
059    protected MonetaryContext loadMaxMonetaryContext(){
060        return MAX_CONTEXT;
061    }
062
063}