/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame.marketdata; import org.threeten.bp.LocalDate; import org.threeten.bp.ZonedDateTime; import com.opengamma.timeseries.date.DateTimeSeries; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.result.Result; import com.opengamma.util.time.LocalDateRange; /** * Market data bundle that delegates to two underlying bundles and returns the first available value. */ public class CompositeMarketDataBundle implements MarketDataBundle { private final MarketDataBundle _bundle1; private final MarketDataBundle _bundle2; /** * Creates an bundle that delegates to {@code bundle1} and then {@code bundle2}. * * @param bundle1 the first delegate bundle * @param bundle2 the second delegate bundle, used when no value is available from {@code bundle1} */ public CompositeMarketDataBundle(MarketDataBundle bundle1, MarketDataBundle bundle2) { _bundle1 = ArgumentChecker.notNull(bundle1, "bundle1"); _bundle2 = ArgumentChecker.notNull(bundle2, "bundle2"); } @Override public <T, I extends MarketDataId<T>> Result<T> get(I id, Class<T> dataType) { Result<T> result = _bundle1.get(id, dataType); return result.isSuccess() ? result : _bundle2.get(id, dataType); } @Override public <T, I extends MarketDataId<T>> Result<DateTimeSeries<LocalDate, T>> get( I id, Class<T> dataType, LocalDateRange dateRange) { Result<DateTimeSeries<LocalDate, T>> result = _bundle1.get(id, dataType, dateRange); return result.isSuccess() ? result : _bundle2.get(id, dataType, dateRange); } @Override public MarketDataBundle withTime(ZonedDateTime time) { return new CompositeMarketDataBundle(_bundle1.withTime(time), _bundle2.withTime(time)); } @Override public MarketDataBundle withDate(LocalDate date) { return new CompositeMarketDataBundle(_bundle1.withDate(date), _bundle2.withDate(date)); } }