package org.marketcetera.marketdata.core.rpc;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.marketcetera.event.Event;
import org.marketcetera.marketdata.Capability;
import org.marketcetera.marketdata.Content;
import org.marketcetera.marketdata.MarketDataRequest;
import org.marketcetera.marketdata.core.webservice.PageRequest;
import org.marketcetera.trade.Instrument;
import org.marketcetera.util.misc.ClassVersion;
/* $License$ */
/**
* Provides an adapter interface between a market data client and the market data service provider.
*
* @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a>
* @version $Id: MarketDataServiceAdapter.java 16901 2014-05-11 16:14:11Z colin $
* @since 2.4.0
*/
@ClassVersion("$Id: MarketDataServiceAdapter.java 16901 2014-05-11 16:14:11Z colin $")
public interface MarketDataServiceAdapter
{
/**
* Requests the given market data.
*
* @param inRequest a <code>MarketDataRequest</code> value
* @param inStreamEvents a <code>boolean</code> value
* @return a <code>long</code> value
*/
long request(MarketDataRequest inRequest,
boolean inStreamEvents);
/**
* Gets the timestamp of the most recent update for the given request.
*
* @param inId a <code>long</code> value
* @return a <code>long</code> value
*/
long getLastUpdate(long inId);
/**
* Cancels the given market data request.
*
* @param inId a <code>long</code> value
*/
void cancel(long inId);
/**
* Gets the queued events, if any, for the given request id.
*
* @param inId a <code>long</code> value
* @return a <code>Deque<Eventgt;</code> value
*/
Deque<Event> getEvents(long inId);
/**
* Gets the queued events, if any, for each of the given request ids.
*
* @param inRequestIds a <code>List<Long></code> value
* @return a <code>Map<Long,LinkedList<Event>></code> value
*/
Map<Long,LinkedList<Event>> getAllEvents(List<Long> inRequestIds);
/**
* Gets the most recent snapshot for the given attributes.
*
* @param inInstrument an <code>Instrument</code> value
* @param inContent a <code>Content</code> value
* @param inProvider a <code>String</code> value or <code>null</code>
* @return a <code>Deque<Event></code> value
*/
Deque<Event> getSnapshot(Instrument inInstrument,
Content inContent,
String inProvider);
/**
* Gets the most recent snapshot page for the given attributes.
*
* @param inInstrument an <code>Instrument</code> value
* @param inContent a <code>Content</code> value
* @param inProvider a <code>String</code> value or <code>null</code>
* @param inPageRequest a <code>PageRequest</code> value
* @return a <code>Deque<Event></code> value
*/
Deque<Event> getSnapshotPage(Instrument inInstrument,
Content inContent,
String inProvider,
PageRequest inPageRequest);
/**
* Gets the available capabilities.
*
* @return a <code>Set<Capability></code> value
*/
Set<Capability> getAvailableCapability();
}