1.1 --- a/task2/solution01/src/org/apidesign/apifest08/currency/ConversionProperties.java Tue Oct 07 01:18:23 2008 +0200
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,101 +0,0 @@
1.4 -package org.apidesign.apifest08.currency;
1.5 -
1.6 -import java.math.BigDecimal;
1.7 -import java.math.RoundingMode;
1.8 -
1.9 -/**
1.10 - * This class encapsulates settings for currency conversion
1.11 - * We can use it eg. for uptime options etc. in future versions
1.12 - *
1.13 - * @author Ladislav Vitasek
1.14 - */
1.15 -final public class ConversionProperties {
1.16 -
1.17 - private final ConversionRatioProvider conversionRatioProvider;
1.18 - private final RoundingMode roundingMode;
1.19 -
1.20 - /**
1.21 - * Returns conversion constants - conversion operation is invertable
1.22 - * Default
1.23 - */
1.24 - private final static class FixedBidirectionalRatioConversion implements ConversionRatioProvider {
1.25 - private final BigDecimal currency1ToCurrency2Constant;
1.26 - private final BigDecimal currency2ToCurrency1Constant;
1.27 - private static final int SCALE_MAX_DEFAULT = 20;
1.28 -
1.29 - /**
1.30 - * Constructor
1.31 - * @param ratioConstant fixed ratio constant
1.32 - * @param mode math rounding mode
1.33 - * @throws IllegalArgumentException if conversion value is <= 0
1.34 - */
1.35 - private FixedBidirectionalRatioConversion(BigDecimal ratioConstant, RoundingMode mode) {
1.36 - if (ratioConstant.compareTo(BigDecimal.ZERO) <= 0)
1.37 - throw new IllegalArgumentException("Conversion value cannot be <= 0");
1.38 - this.currency1ToCurrency2Constant = ratioConstant;
1.39 - this.currency2ToCurrency1Constant = BigDecimal.ONE.setScale(SCALE_MAX_DEFAULT).divide(ratioConstant, mode);
1.40 - }
1.41 -
1.42 - public BigDecimal getCurrency1ToCurrency2Constant() {
1.43 - return currency1ToCurrency2Constant;
1.44 - }
1.45 -
1.46 - public BigDecimal getCurrency2ToCurrency1Constant() {
1.47 - return currency2ToCurrency1Constant;
1.48 - }
1.49 - }
1.50 -
1.51 -
1.52 - /**
1.53 - * Returns new instance Conversion properties - fixed conversion ratio - both directions
1.54 - * Default max scale is set to 20
1.55 - *
1.56 - * @param conversionConstant value of constant for conversion
1.57 - * @param roundingMode math rounding mode
1.58 - * @return new instance of ConversionProperties class
1.59 - * @throws IllegalArgumentException if conversion constant is <= 0
1.60 - * @see org.apidesign.apifest08.currency.ConversionProperties.FixedBidirectionalRatioConversion
1.61 - */
1.62 - public static ConversionProperties create(BigDecimal conversionConstant, RoundingMode roundingMode) {
1.63 - return create(new FixedBidirectionalRatioConversion(conversionConstant, roundingMode), roundingMode);
1.64 - }
1.65 -
1.66 - /**
1.67 - * Returns new instance Conversion properties
1.68 - *
1.69 - * @param conversionRatioProvider provider for conversion constants
1.70 - * @param roundingMode math rounding mode
1.71 - * @return new instance of ConversionProperties class
1.72 - */
1.73 - public static ConversionProperties create(ConversionRatioProvider conversionRatioProvider, RoundingMode roundingMode) {
1.74 - if (conversionRatioProvider == null || roundingMode == null)
1.75 - throw new NullPointerException();
1.76 - return new ConversionProperties(conversionRatioProvider, roundingMode);
1.77 - }
1.78 -
1.79 - /**
1.80 - * Returns new instance Conversion properties with values set to conversionConstant=BigDecimal.ONE
1.81 - * and roundingMode=RoundingMode.HALF_EVEN
1.82 - *
1.83 - * Conversion is bidirectional.
1.84 - *
1.85 - * @return
1.86 - */
1.87 - public static ConversionProperties createDefault() {
1.88 - return create(BigDecimal.ONE, RoundingMode.HALF_EVEN);
1.89 - }
1.90 -
1.91 - private ConversionProperties(ConversionRatioProvider conversionRatioProvider, RoundingMode roundingMode) {
1.92 - this.conversionRatioProvider = conversionRatioProvider;
1.93 - this.roundingMode = roundingMode;
1.94 - }
1.95 -
1.96 -
1.97 - public RoundingMode getRoundingMode() {
1.98 - return roundingMode;
1.99 - }
1.100 -
1.101 - public ConversionRatioProvider getConversionRatioProvider() {
1.102 - return conversionRatioProvider;
1.103 - }
1.104 -}