package org.marketcetera.marketdata.csv;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.marketcetera.core.CoreException;
import org.marketcetera.event.AskEvent;
import org.marketcetera.event.BidEvent;
import org.marketcetera.event.Event;
import org.marketcetera.event.TradeEvent;
import org.marketcetera.event.impl.QuoteEventBuilder;
import org.marketcetera.event.impl.TradeEventBuilder;
import org.marketcetera.marketdata.Content;
import org.marketcetera.marketdata.DateUtils;
import org.marketcetera.trade.Equity;
/* $License$ */
/**
*
*
* @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a>
* @version $Id: MockCSVFeedEventTranslator.java 16154 2012-07-14 16:34:05Z colin $
* @since 2.1.0
*/
public class MockCSVFeedEventTranslator
extends CSVFeedEventTranslator
{
/* (non-Javadoc)
* @see org.marketcetera.marketdata.csv.CSVFeedEventTranslator#toEvent(java.lang.Object, java.lang.String)
*/
@Override
public List<Event> toEvent(Object inData,
String inHandle)
throws CoreException
{
CSVQuantum q = (CSVQuantum)inData;
List<Event> events = new ArrayList<Event>();
String[] data = q.getLine();
long timeMillis = Long.parseLong(data[0]);
String symbol = data[1];
String exchange = data[2];
BigDecimal price = new BigDecimal(data[3]);
BigDecimal size = new BigDecimal(data[4]);
String type = data[5];
if(type.equals("TRADE")) {
if(q.getRequest().getContent().contains(Content.LATEST_TICK)) {
TradeEventBuilder<? extends TradeEvent> builder = TradeEventBuilder.equityTradeEvent();
builder.withExchange(exchange)
.withInstrument(new Equity(symbol))
.withTimestamp(new Date(timeMillis))
.withPrice(price)
.withSize(size)
.withTradeDate(DateUtils.dateToString(new Date()));
events.add(builder.create());
}
} else if(type.equals("BID")) {
if(q.getRequest().getContent().contains(Content.TOP_OF_BOOK)) {
QuoteEventBuilder<BidEvent> builder = QuoteEventBuilder.bidEvent(new Equity(symbol));
builder.withExchange(exchange)
.withInstrument(new Equity(symbol))
.withTimestamp(new Date(timeMillis))
.withPrice(price)
.withSize(size)
.withQuoteDate(DateUtils.dateToString(new Date()));
events.add(builder.create());
}
} else if(type.equals("ASK")) {
if(q.getRequest().getContent().contains(Content.TOP_OF_BOOK)) {
QuoteEventBuilder<AskEvent> builder = QuoteEventBuilder.askEvent(new Equity(symbol));
builder.withExchange(exchange)
.withInstrument(new Equity(symbol))
.withTimestamp(new Date(timeMillis))
.withPrice(price)
.withSize(size)
.withQuoteDate(DateUtils.dateToString(new Date()));
events.add(builder.create());
}
} else {
throw new UnsupportedOperationException("Unsupported type: " + Arrays.toString(data));
}
return events;
}
}