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 java.util.concurrent.atomic.AtomicInteger; import org.marketcetera.core.Pair; 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 com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; /* $License$ */ /** * Provides an implementation of <code>MarketDataServiceAdapter</code> for testing. * * @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a> * @version $Id: MockMarketDataServiceAdapter.java 16901 2014-05-11 16:14:11Z colin $ * @since 2.4.0 */ public class MockMarketDataServiceAdapter implements MarketDataServiceAdapter { /* (non-Javadoc) * @see org.marketcetera.marketdata.core.rpc.MarketDataServiceAdapter#request(org.marketcetera.marketdata.MarketDataRequest, boolean) */ @Override public long request(MarketDataRequest inRequest, boolean inStreamEvents) { requests.add(Pair.create(inRequest, inStreamEvents)); return System.nanoTime(); } /* (non-Javadoc) * @see org.marketcetera.marketdata.core.rpc.MarketDataServiceAdapter#getLastUpdate(long) */ @Override public long getLastUpdate(long inId) { lastUpdateRequests.add(inId); return inId; } /* (non-Javadoc) * @see org.marketcetera.marketdata.core.rpc.MarketDataServiceAdapter#cancel(long) */ @Override public void cancel(long inId) { canceledIds.add(inId); } /* (non-Javadoc) * @see org.marketcetera.marketdata.core.rpc.MarketDataServiceAdapter#getEvents(long) */ @Override public Deque<Event> getEvents(long inId) { eventsRequests.add(inId); return eventsToReturn; } /* (non-Javadoc) * @see org.marketcetera.marketdata.core.rpc.MarketDataServiceAdapter#getAllEvents(java.util.List) */ @Override public Map<Long,LinkedList<Event>> getAllEvents(List<Long> inRequestIds) { allEventsRequests.add(inRequestIds); return allEventsToReturn; } /* (non-Javadoc) * @see org.marketcetera.marketdata.core.rpc.MarketDataServiceAdapter#getSnapshot(org.marketcetera.trade.Instrument, org.marketcetera.marketdata.Content, java.lang.String) */ @Override public Deque<Event> getSnapshot(Instrument inInstrument, Content inContent, String inProvider) { snapshotRequests.add(new SnapshotRequest(inInstrument, inContent, inProvider)); return snapshotEventsToReturn; } /* (non-Javadoc) * @see org.marketcetera.marketdata.core.rpc.MarketDataServiceAdapter#getSnapshotPage(org.marketcetera.trade.Instrument, org.marketcetera.marketdata.Content, java.lang.String, org.marketcetera.marketdata.core.webservice.PageRequest) */ @Override public Deque<Event> getSnapshotPage(Instrument inInstrument, Content inContent, String inProvider, PageRequest inPageRequest) { snapshotRequests.add(new SnapshotRequest(inInstrument, inContent, inProvider, inPageRequest)); return snapshotEventsToReturn; } /* (non-Javadoc) * @see org.marketcetera.marketdata.core.rpc.MarketDataServiceAdapter#getAvailableCapability() */ @Override public Set<Capability> getAvailableCapability() { capabilityRequests.incrementAndGet(); return capabilitiesToReturn; } /** * Get the requests value. * * @return a <code>List<Pair<MarketDataRequest,Boolean>></code> value */ public List<Pair<MarketDataRequest,Boolean>> getRequests() { return requests; } /** * Get the lastUpdateRequests value. * * @return a <code>List<Long></code> value */ public List<Long> getLastUpdateRequests() { return lastUpdateRequests; } /** * Get the canceledIds value. * * @return a <code>List<Long></code> value */ public List<Long> getCanceledIds() { return canceledIds; } /** * Get the getEventsRequests value. * * @return a <code>List<Long></code> value */ public List<Long> getEventsRequests() { return eventsRequests; } /** * Get the eventsToReturn value. * * @return a <code>Deque<Event></code> value */ public Deque<Event> getEventsToReturn() { return eventsToReturn; } /** * Get the allEventsRequests value. * * @return a <code>List<List<Long>></code> value */ public List<List<Long>> getAllEventsRequests() { return allEventsRequests; } /** * Get the allEventsToReturn value. * * @return a <code>Map<Long,LinkedList<Event>></code> value */ public Map<Long,LinkedList<Event>> getAllEventsToReturn() { return allEventsToReturn; } /** * Get the snapshotEventsToReturn value. * * @return a <code>Deque<Event></code> value */ public Deque<Event> getSnapshotEventsToReturn() { return snapshotEventsToReturn; } /** * Get the snapshotRequests value. * * @return a <code>List<SnapshotRequest></code> value */ public List<SnapshotRequest> getSnapshotRequests() { return snapshotRequests; } /** * Get the capabilityRequests value. * * @return a <code>AtomicInteger</code> value */ public AtomicInteger getCapabilityRequests() { return capabilityRequests; } /** * Get the capabilitiesToReturn value. * * @return a <code>Set<Capability></code> value */ public Set<Capability> getCapabilitiesToReturn() { return capabilitiesToReturn; } /** * * * */ public void reset() { requests.clear(); lastUpdateRequests.clear(); canceledIds.clear(); eventsRequests.clear(); eventsToReturn.clear(); allEventsRequests.clear(); allEventsToReturn.clear(); snapshotEventsToReturn.clear(); snapshotRequests.clear(); capabilitiesToReturn.clear(); capabilityRequests.set(0); } /** * Records requests to {@link MockMarketDataServiceAdapter#getSnapshot(Instrument, Content, String)}. * * @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a> * @version $Id: MockMarketDataServiceAdapter.java 16901 2014-05-11 16:14:11Z colin $ * @since 2.4.0 */ public static class SnapshotRequest { /** * Create a new SnapshotRequest instance. * * @param inInstrument an <code>Instrument</code> value * @param inContent a <code>Content</code> value * @param inProvider a <code>String</code> value */ public SnapshotRequest(Instrument inInstrument, Content inContent, String inProvider) { this(inInstrument, inContent, inProvider, null); } /** * Create a new SnapshotRequest instance. * * @param inInstrument an <code>Instrument</code> value * @param inContent a <code>Content</code> value * @param inProvider a <code>String</code> value * @param inPageRequest a <code>PageRequest</code> value */ public SnapshotRequest(Instrument inInstrument, Content inContent, String inProvider, PageRequest inPageRequest) { instrument = inInstrument; content = inContent; provider = inProvider; pageRequest = inPageRequest; } /** * Get the instrument value. * * @return an <code>Instrument</code> value */ public Instrument getInstrument() { return instrument; } /** * Get the content value. * * @return a <code>Content</code> value */ public Content getContent() { return content; } /** * Get the provider value. * * @return a <code>String</code> value */ public String getProvider() { return provider; } /** * Get the pageRequest value. * * @return a <code>PageRequest</code> value */ public PageRequest getPageRequest() { return pageRequest; } /** * instrument value */ private final Instrument instrument; /** * content value */ private final Content content; /** * provider value */ private final String provider; /** * page request value, may be <code>null</code> */ private final PageRequest pageRequest; } /** * stores calls to {@link #getAllEvents(List)}. */ private final List<List<Long>> allEventsRequests = Lists.newArrayList(); /** * value to return from {@link #getAllEvents(List)}. */ private final Map<Long,LinkedList<Event>> allEventsToReturn = Maps.newHashMap(); /** * events to return from {@link #getEvents(long)} */ private final Deque<Event> eventsToReturn = Lists.newLinkedList(); /** * stores calls to {@link #getEvents(long)} */ private final List<Long> eventsRequests = Lists.newArrayList(); /** * stores calls to {@link #request(MarketDataRequest, boolean)} */ private final List<Pair<MarketDataRequest,Boolean>> requests = Lists.newArrayList(); /** * stores calls to {@link #getLastUpdate(long)} */ private final List<Long> lastUpdateRequests = Lists.newArrayList(); /** * stores calls to {@link #cancel(long)} */ private final List<Long> canceledIds = Lists.newArrayList(); /** * values to return from {@link #getSnapshot(Instrument, Content, String)} */ private final Deque<Event> snapshotEventsToReturn = Lists.newLinkedList(); /** * records calls to {@link #getSnapshot(Instrument, Content, String)} */ private final List<SnapshotRequest> snapshotRequests = Lists.newLinkedList(); /** * counts capability requests */ private final AtomicInteger capabilityRequests = new AtomicInteger(0); /** * capabilities to return */ private final Set<Capability> capabilitiesToReturn = Sets.newHashSet(); }