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    }