001package org.javamoney.moneta.internal;
002
003import javax.money.CurrencyUnit;
004import javax.money.MonetaryContext;
005import javax.money.MonetaryOperator;
006import javax.money.spi.RoundingProviderSpi;
007import java.math.RoundingMode;
008import java.util.Collections;
009import java.util.Set;
010
011/**
012 * Defaulr implementation of a {@link javax.money.spi.RoundingProviderSpi} that creates instances of {@link org
013 * .javamoney.moneta.internal.DefaultRounding} that relies on the default fraction units defined by {@link java.util
014 * .Currency#getDefaultFractionDigits()}.
015 */
016public class DefaultRoundingProvider implements RoundingProviderSpi{
017
018    @Override
019    public MonetaryOperator getRounding(CurrencyUnit currency){
020        return new DefaultRounding(currency);
021    }
022
023    @Override
024    public MonetaryOperator getRounding(CurrencyUnit currency, long timestamp){
025        return null;
026    }
027
028    @Override
029    public MonetaryOperator getCashRounding(CurrencyUnit currency){
030        return new DefaultCashRounding(currency);
031    }
032
033    @Override
034    public MonetaryOperator getCashRounding(CurrencyUnit currency, long timestamp){
035        return null;
036    }
037
038    @Override
039    public Set<String> getCustomRoundingIds(){
040        return Collections.emptySet();
041    }
042
043    @Override
044    public MonetaryOperator getCustomRounding(String customRoundingId){
045        throw new IllegalArgumentException("No such custom rounding: " + customRoundingId);
046    }
047
048    @Override
049    public MonetaryOperator getRounding(MonetaryContext monetaryContext){
050        RoundingMode rm = monetaryContext.getAttribute(RoundingMode.class, RoundingMode.HALF_EVEN);
051        return new DefaultRounding(monetaryContext.getMaxScale(), rm);
052    }
053
054}