import java.math.BigDecimal; import org.marketcetera.event.AskEvent; import org.marketcetera.event.Event; import org.marketcetera.event.TradeEvent; import org.marketcetera.event.impl.TradeEventBuilder; import org.marketcetera.marketdata.DateUtils; import org.marketcetera.module.DataFlowID; import org.marketcetera.module.DataRequest; import org.marketcetera.module.ModuleURN; import org.marketcetera.strategy.OutputType; import org.marketcetera.strategy.java.Strategy; import org.marketcetera.trade.Equity; import java.util.Date; /* $License$ */ /** * Sample strategy which tests the ability to send events to CEP and event subscribers. * * @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a> * @version $Id: SendEvent.java 16154 2012-07-14 16:34:05Z colin $ * @since 1.0.0 */ public class SendEvent extends Strategy { private int askCounter = 0; private DataFlowID dataFlowID; /* (non-Javadoc) * @see org.marketcetera.strategy.java.Strategy#onStart() */ @Override public void onStart() { dataFlowID = createDataFlow(true, new DataRequest(getURN(), OutputType.ALL)); } /* (non-Javadoc) * @see org.marketcetera.strategy.java.Strategy#onStart() */ @Override public void onStop() { TradeEvent trade = TradeEventBuilder.equityTradeEvent().withInstrument(new Equity("METC")) .withExchange("exchange") .withPrice(BigDecimal.ONE) .withSize(BigDecimal.TEN) .withTradeDate(DateUtils.dateToString(new Date())).create(); doSendEvent(trade); cancelDataFlow(dataFlowID); } /* (non-Javadoc) * @see org.marketcetera.strategy.java.Strategy#onAsk(org.marketcetera.event.AskEvent) */ @Override public void onAsk(AskEvent inAsk) { askCounter += 1; setProperty("askCount", Integer.toString(askCounter)); setProperty("ask", inAsk.toString()); } /* (non-Javadoc) * @see org.marketcetera.strategy.java.Strategy#onCallback(java.lang.Object) */ @Override public void onCallback(Object inData) { if(getProperty("shouldRequestCEPData") != null) { doCepRequest(); } else { cancelAllDataRequests(); } } /* (non-Javadoc) * @see org.marketcetera.strategy.java.Strategy#onOther(java.lang.Object) */ @Override public void onOther(Object inEvent) { doSendEvent((Event)inEvent); } /** * Sends the given event. * * @param inEvent an <code>Event</code> value */ private void doSendEvent(Event inEvent) { if(getProperty("eventOnlyTest") != null) { if(getProperty("nilEvent") != null) { sendEvent(null); return; } sendEvent(inEvent); } else { String source = getProperty("source"); if(getProperty("nilSource") != null) { sendEventToCEP(inEvent, null); return; } if(getProperty("nilEvent") != null) { sendEventToCEP(null, source); return; } sendEventToCEP(inEvent, source); } } /** * Sets up a CEP request. */ private void doCepRequest() { String cepDataSource = getProperty("source"); String statementString = null; if(cepDataSource != null) { statementString = getProperty("statements"); } String[] statements; if(statementString != null) { statements = statementString.split("#"); } else { statements = null; } setProperty("requestID", Long.toString(requestCEPData(statements, cepDataSource))); } }