package name.abuchen.portfolio.money.impl; import java.math.BigDecimal; import java.time.LocalDate; import java.util.List; import java.util.Optional; import name.abuchen.portfolio.money.ExchangeRate; import name.abuchen.portfolio.money.ExchangeRateProvider; import name.abuchen.portfolio.money.ExchangeRateTimeSeries; public class InverseExchangeRateTimeSeries implements ExchangeRateTimeSeries { private ExchangeRateTimeSeries source; public InverseExchangeRateTimeSeries(ExchangeRateTimeSeries source) { this.source = source; } @Override public String getBaseCurrency() { return source.getTermCurrency(); } @Override public String getTermCurrency() { return source.getBaseCurrency(); } @Override public ExchangeRateProvider getProvider() { return source.getProvider(); } @Override public List<ExchangeRate> getRates() { throw new UnsupportedOperationException(); } @Override public Optional<ExchangeRate> lookupRate(LocalDate requestedTime) { Optional<ExchangeRate> answer = source.lookupRate(requestedTime); if (answer.isPresent()) { BigDecimal reverse = BigDecimal.ONE.divide(answer.get().getValue(), 10, BigDecimal.ROUND_HALF_DOWN); return Optional.of(new ExchangeRate(answer.get().getTime(), reverse)); } else { return answer; } } @Override public int getWeight() { return 1 + source.getWeight(); } }