package co.smartreceipts.android.model.factory;
import android.support.annotation.NonNull;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import co.smartreceipts.android.model.PriceCurrency;
import co.smartreceipts.android.model.gson.ExchangeRate;
import co.smartreceipts.android.model.utils.ModelUtils;
/**
* A {@link ExchangeRate} {@link BuilderFactory}
* implementation, which will be used to generate instances of {@link ExchangeRate} objects
*/
public final class ExchangeRateBuilderFactory implements BuilderFactory<ExchangeRate> {
private final Map<String, Double> _rates;
private String _baseCurrencyCode;
public ExchangeRateBuilderFactory() {
_rates = new HashMap<>();
}
public ExchangeRateBuilderFactory setBaseCurrency(@NonNull PriceCurrency baseCurrency) {
_baseCurrencyCode = baseCurrency.getCurrencyCode();
return this;
}
public ExchangeRateBuilderFactory setBaseCurrency(@NonNull String baseCurrencyCode) {
_baseCurrencyCode = baseCurrencyCode;
return this;
}
public ExchangeRateBuilderFactory setRate(@NonNull String currencyCode, double rate) {
if (rate > 0) {
_rates.put(currencyCode, rate);
}
return this;
}
public ExchangeRateBuilderFactory setRate(@NonNull String currencyCode, @NonNull BigDecimal rate) {
return setRate(currencyCode, rate.doubleValue());
}
public ExchangeRateBuilderFactory setRate(@NonNull String currencyCode, @NonNull String rateString) {
return setRate(currencyCode, ModelUtils.tryParse(rateString, new BigDecimal(-1)));
}
public ExchangeRateBuilderFactory setRate(@NonNull PriceCurrency currency, double rate) {
return setRate(currency.getCurrencyCode(), rate);
}
public ExchangeRateBuilderFactory setRate(@NonNull PriceCurrency currency, @NonNull BigDecimal rate) {
return setRate(currency.getCurrencyCode(), rate.doubleValue());
}
public ExchangeRateBuilderFactory setRate(@NonNull PriceCurrency currency, @NonNull String rateString) {
return setRate(currency.getCurrencyCode(), ModelUtils.tryParse(rateString, new BigDecimal(-1)));
}
@Override
@NonNull
public ExchangeRate build() {
return new ExchangeRate(_baseCurrencyCode, _rates);
}
}