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 ChainedExchangeRateTimeSeries implements ExchangeRateTimeSeries { private ExchangeRateTimeSeries[] series; public ChainedExchangeRateTimeSeries(ExchangeRateTimeSeries... series) { if (series.length == 0) throw new UnsupportedOperationException(); this.series = series; } @Override public String getBaseCurrency() { return series[0].getBaseCurrency(); } @Override public String getTermCurrency() { return series[series.length - 1].getTermCurrency(); } @Override public ExchangeRateProvider getProvider() { throw new UnsupportedOperationException(); } @Override public List<ExchangeRate> getRates() { throw new UnsupportedOperationException(); } @Override public Optional<ExchangeRate> lookupRate(LocalDate requestedTime) { BigDecimal value = BigDecimal.ONE; for (int ii = 0; ii < series.length; ii++) { Optional<ExchangeRate> answer = series[ii].lookupRate(requestedTime); if (!answer.isPresent()) return answer; value = value.multiply(answer.get().getValue()); } return Optional.of(new ExchangeRate(requestedTime, value)); } @Override public int getWeight() { int weight = 1; for (int ii = 0; ii < series.length; ii++) weight += series[ii].getWeight(); return weight; } }