/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.marketdata.historical; import java.util.Objects; import com.opengamma.engine.marketdata.MarketDataProvider; import com.opengamma.engine.marketdata.MarketDataProviderFactory; import com.opengamma.engine.marketdata.resolver.MarketDataProviderResolver; import com.opengamma.engine.marketdata.spec.HistoricalShockMarketDataSpecification; import com.opengamma.engine.marketdata.spec.MarketDataSpecification; import com.opengamma.livedata.UserPrincipal; import com.opengamma.util.ArgumentChecker; /** * Factory for creating instances of {@link HistoricalShockMarketDataProvider}. */ public class HistoricalShockMarketDataProviderFactory implements MarketDataProviderFactory { private final MarketDataProviderResolver _resolver; public HistoricalShockMarketDataProviderFactory(MarketDataProviderResolver resolver) { ArgumentChecker.notNull(resolver, "resolver"); _resolver = resolver; } @Override public HistoricalShockMarketDataProvider create(UserPrincipal user, MarketDataSpecification marketDataSpec) { if (!(marketDataSpec instanceof HistoricalShockMarketDataSpecification)) { throw new IllegalArgumentException("Market data spec must be a HistoricalShockMarketDataSpecification: " + marketDataSpec); } HistoricalShockMarketDataSpecification shockSpec = (HistoricalShockMarketDataSpecification) marketDataSpec; MarketDataProvider provider1 = resolve(user, shockSpec.getHistoricalSpecification1()); MarketDataProvider provider2 = resolve(user, shockSpec.getHistoricalSpecification2()); MarketDataProvider baseProvider = resolve(user, shockSpec.getBaseSpecification()); return new HistoricalShockMarketDataProvider(provider1, provider2, baseProvider); } private MarketDataProvider resolve(UserPrincipal user, MarketDataSpecification spec) { return Objects.requireNonNull(_resolver.resolve(user, spec)); } }