001 package org.otfeed.protocol.request;
002
003 import org.otfeed.IConnection;
004 import org.otfeed.IRequest;
005 import org.otfeed.command.MonthAndYear;
006 import org.otfeed.command.OptionChainCommand;
007 import org.otfeed.command.OptionChainSnapshotCommand;
008 import org.otfeed.command.PriceRange;
009 import org.otfeed.command.VolumeStyleEnum;
010 import org.otfeed.event.ICompletionDelegate;
011 import org.otfeed.event.IDataDelegate;
012 import org.otfeed.event.OTBBO;
013 import org.otfeed.event.OTMMQuote;
014 import org.otfeed.event.OTQuote;
015 import org.otfeed.event.OTTrade;
016
017 /**
018 * Synthetic request: issues {@link OptionChainSnapshotRequest}, followed by {@link OptionChainRequest}.
019 */
020 public class OptionChainWithSnapshotRequest extends AbstractStreamWithSnapshotRequest implements IRequest {
021
022 private final OptionChainSnapshotCommand snapshotCommand;
023 private final OptionChainCommand streamCommand;
024
025 public OptionChainWithSnapshotRequest(IConnection connection,
026 String exchangeCode,
027 String symbolCode,
028 MonthAndYear monthAndYear,
029 PriceRange priceRange,
030 VolumeStyleEnum volumeStyle,
031 IDataDelegate<OTQuote> quoteDelegate,
032 IDataDelegate<OTTrade> tradeDelegate,
033 IDataDelegate<OTMMQuote> mmQuoteDelegate,
034 IDataDelegate<OTBBO> bboDelegate,
035 ICompletionDelegate completionDelegate
036 ) {
037 super(connection, completionDelegate);
038
039 snapshotCommand = new OptionChainSnapshotCommand(exchangeCode, symbolCode, monthAndYear, priceRange, volumeStyle);
040 snapshotCommand.setQuoteDelegate(quoteDelegate);
041 snapshotCommand.setTradeDelegate(tradeDelegate);
042 snapshotCommand.setMmQuoteDelegate(mmQuoteDelegate);
043 snapshotCommand.setBboDelegate(bboDelegate);
044
045 streamCommand = new OptionChainCommand(exchangeCode, symbolCode, monthAndYear, priceRange, volumeStyle);
046 streamCommand.setQuoteDelegate(quoteDelegate);
047 streamCommand.setTradeDelegate(tradeDelegate);
048 streamCommand.setMmQuoteDelegate(mmQuoteDelegate);
049 streamCommand.setBboDelegate(bboDelegate);
050 }
051
052 @Override
053 IRequest prepareSnapshotRequest(IConnection connection, ICompletionDelegate d) {
054 snapshotCommand.setCompletionDelegate(d);
055 return connection.prepareRequest(snapshotCommand);
056 }
057
058 @Override
059 IRequest prepareStreamRequest(IConnection connection, ICompletionDelegate d) {
060 snapshotCommand.setCompletionDelegate(d);
061 return connection.prepareRequest(streamCommand);
062 }
063 }