Java tutorial
/* * Copyrights 2002-2011 Webb Fontaine * Developer: Sargis Harutyunyan * Date: 25 nov. 2011 * This software is the proprietary information of Webb Fontaine. * Its use is subject to License terms. */ package com.webbfontaine.valuewebb.irms.impl.bean; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Iterators; import com.webbfontaine.valuewebb.model.TtInv; import com.webbfontaine.valuewebb.model.util.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.math.BigDecimal; import static com.webbfontaine.valuewebb.model.constants.Constants.FRACTION_DIGITS_NUMBER_2; import static java.util.Arrays.asList; class Calculator { private static final Logger LOGGER = LoggerFactory.getLogger(Calculator.class); private final BigDecimal nationalCurrencyRate; private final BigDecimal usdCurrencyRate; Calculator(TtInv ttInv) { this(ttInv.getInvCurRat(), ttInv.getUsdRat()); } Calculator(BigDecimal nationalCurrencyRate, BigDecimal usdCurrencyRate) { this.nationalCurrencyRate = nationalCurrencyRate; this.usdCurrencyRate = usdCurrencyRate; } public BigDecimal toNationalCurrency(BigDecimal amount) { if (anyNull(amount, nationalCurrencyRate)) { LOGGER.info("Found null for [amount, nationalCurrencyRate]: {}, returning 0", asList(amount, nationalCurrencyRate)); return BigDecimal.ZERO; } return scale(amount.multiply(nationalCurrencyRate)); } public BigDecimal toUSD(BigDecimal amount) { if (anyNullOrZero(amount, nationalCurrencyRate, usdCurrencyRate)) { LOGGER.info("Found null/zero for [amount, nationalCurrencyRate, usdCurrencyRate]: {}, returning 0", asList(amount, nationalCurrencyRate, usdCurrencyRate)); return BigDecimal.ZERO; } return amount.multiply(nationalCurrencyRate).divide(usdCurrencyRate, FRACTION_DIGITS_NUMBER_2, Utils.getRoundingMode()); } private static BigDecimal scale(BigDecimal value) { return value.setScale(FRACTION_DIGITS_NUMBER_2, Utils.getRoundingMode()); } private static boolean anyNull(BigDecimal... values) { return Iterators.any(Iterators.forArray(values), new EqualsNullPredicate()); } private static boolean anyZero(BigDecimal... values) { return Iterators.any(Iterators.forArray(values), new EqualsZeroPredicate()); } private static boolean anyNullOrZero(BigDecimal... values) { Predicate<BigDecimal> composite = Predicates.or(new EqualsNullPredicate(), new EqualsZeroPredicate()); return Iterators.any(Iterators.forArray(values), composite); } private static class EqualsNullPredicate implements Predicate<BigDecimal> { @Override public boolean apply(BigDecimal input) { return input == null; } } private static class EqualsZeroPredicate implements Predicate<BigDecimal> { @Override public boolean apply(BigDecimal value) { return value.compareTo(BigDecimal.ZERO) == 0; } } }