package org.marketcetera.photon.internal.marketdata; import org.marketcetera.marketdata.AssetClass; import org.marketcetera.marketdata.MarketDataRequestBuilder; import org.marketcetera.trade.Instrument; import org.marketcetera.trade.Option; import org.marketcetera.util.misc.ClassVersion; /* $License$ */ /** * Implementation of {@link IMarketDataRequestSupport}. * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: MarketDataRequestSupport.java 16862 2014-03-19 12:28:49Z colin $ * @since 2.0.0 */ @ClassVersion("$Id: MarketDataRequestSupport.java 16862 2014-03-19 12:28:49Z colin $") public class MarketDataRequestSupport implements IMarketDataRequestSupport { /** * Constructor. * * @param useFineGrainedMarketDataForOptions * controls whether fine grained market data can be obtained for * options */ public MarketDataRequestSupport(boolean useFineGrainedMarketDataForOptions) { mUseFineGrainedMarketDataForOptions = useFineGrainedMarketDataForOptions; } @Override public MarketDataRequestBuilder initializeRequest(Instrument instrument) { if (!mUseFineGrainedMarketDataForOptions && (instrument instanceof Option)) { return MarketDataRequestBuilder.newRequest().withAssetClass( AssetClass.OPTION).withUnderlyingSymbols( instrument.getSymbol()); } return getAdapter(instrument).initializeRequest(instrument); } @Override public boolean useFineGrainedMarketDataForOptions() { return mUseFineGrainedMarketDataForOptions; } @SuppressWarnings("unchecked") private <I extends Instrument> InstrumentRequestAdapter<I> getAdapter(I instrument) { return InstrumentRequestAdapter.SELECTOR.forInstrument(instrument); } private final boolean mUseFineGrainedMarketDataForOptions; }