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}