/* * ************************************************************************************* * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * * ************************************************************************************* */ package com.espertech.esper.regression.dataflow; import com.espertech.esper.client.Configuration; import com.espertech.esper.client.EPServiceProvider; import com.espertech.esper.client.EPServiceProviderManager; import com.espertech.esper.client.EPStatement; import com.espertech.esper.client.dataflow.EPDataFlowInstantiationOptions; import com.espertech.esper.client.scopetest.EPAssertionUtil; import com.espertech.esper.client.soda.EPStatementFormatter; import com.espertech.esper.client.soda.EPStatementObjectModel; import com.espertech.esper.dataflow.util.DefaultSupportCaptureOp; import com.espertech.esper.dataflow.util.DefaultSupportGraphOpProvider; import com.espertech.esper.support.client.SupportConfigFactory; import junit.framework.TestCase; import java.util.Arrays; import java.util.concurrent.TimeUnit; public class TestExampleVwapFilterSelectJoin extends TestCase { private EPServiceProvider epService; public void setUp() { Configuration config = SupportConfigFactory.getConfiguration(); epService = EPServiceProviderManager.getDefaultProvider(config); epService.initialize(); epService.getEPAdministrator().getConfiguration().addImport(DefaultSupportCaptureOp.class.getPackage().getName() + ".*"); epService.getEPAdministrator().getConfiguration().addImport(MyObjectArrayGraphSource.class.getPackage().getName() + ".*"); } public void testEPLGraphOnly() throws Exception { String epl = "create dataflow VWAPSample\r\n" + "create objectarray schema TradeQuoteType as (type string, ticker string, price double, volume long, askprice double, asksize long),\r\n" + "MyObjectArrayGraphSource -> TradeQuoteStream<TradeQuoteType> {}\r\n" + "Filter(TradeQuoteStream) -> TradeStream {\r\n" + "filter: type = \"trade\"\r\n" + "}\r\n" + "Filter(TradeQuoteStream) -> QuoteStream {\r\n" + "filter: type = \"quote\"\r\n" + "}\r\n" + "Select(TradeStream) -> VwapTrades {\r\n" + "select: (select ticker, sum(price * volume) / sum(volume) as vwap, min(price) as minprice from TradeStream.std:groupwin(ticker).win:length(4) group by ticker)\r\n" + "}\r\n" + "Select(VwapTrades as T, QuoteStream as Q) -> BargainIndex {\r\n" + "select: " + "(select case when vwap > askprice then asksize * (Math.exp(vwap - askprice)) else 0.0d end as index " + "from T.std:unique(ticker) as t, Q.std:lastevent() as q " + "where t.ticker = q.ticker)\r\n" + "}\r\n" + "DefaultSupportCaptureOp(BargainIndex) {}\r\n"; EPStatement stmtGraph = epService.getEPAdministrator().createEPL(epl); runAssertion(); stmtGraph.destroy(); EPStatementObjectModel model = epService.getEPAdministrator().compileEPL(epl); String text = model.toEPL(new EPStatementFormatter(true)); assertEquals(epl, text); stmtGraph = epService.getEPAdministrator().create(model); runAssertion(); } private void runAssertion() throws Exception { DefaultSupportCaptureOp<Object> future = new DefaultSupportCaptureOp<Object>(1); MyObjectArrayGraphSource source = new MyObjectArrayGraphSource(Arrays.asList( new Object[] {"trade", "GE", 100d, 1000L, null, null}, // vwap = 100, minPrice=100 new Object[] {"quote", "GE", null, null, 99.5d, 2000L} // ).iterator()); EPDataFlowInstantiationOptions options = new EPDataFlowInstantiationOptions() .operatorProvider(new DefaultSupportGraphOpProvider(future, source)); epService.getEPRuntime().getDataFlowRuntime().instantiate("VWAPSample", options).start(); Object[] received = future.get(5, TimeUnit.SECONDS); assertEquals(1, received.length); EPAssertionUtil.assertProps(received[0], "index".split(","), new Object[] {2000*Math.exp(100-99.5)}); } }