/* This file is part of jTotus. jTotus is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. jTotus is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with jTotus. If not, see <http://www.gnu.org/licenses/>. */ package org.jlucrum.realtime; import org.jlucrum.realtime.eventtypes.*; import com.espertech.esper.client.Configuration; import com.espertech.esper.client.EPAdministrator; import com.espertech.esper.client.EPServiceProvider; import com.espertech.esper.client.EPServiceProviderManager; import com.espertech.esper.client.EPStatement; import com.espertech.esper.client.UpdateListener; import java.util.HashMap; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.jlucrum.realtime.generators.EsperEventGenerator; import org.jlucrum.realtime.generators.HistoryTicksFromFile; import org.jlucrum.realtime.generators.TickGenerator; import org.jtotus.common.MethodResults; import org.jtotus.gui.graph.GraphPacket; import org.jtotus.threads.MethodFuture; /** * * @author Evgeni Kappinen */ public class BrokerWatcher implements Callable, Runnable{ private ExecutorService threadExecutor = null; private MethodFuture<String> futureTask = null; private HashMap<String, EPStatement> statements = null; private EPServiceProvider cep = null; private static final String mainEngineName = "BrokerWatcher"; public BrokerWatcher() { statements = new HashMap<String, EPStatement>(); threadExecutor = Executors.newCachedThreadPool(); cep = initializeEngine(mainEngineName); } public static EPServiceProvider initializeEngine(String mainEngine) { Configuration cepConfig = new Configuration(); cepConfig.addEventType("StockTick", StockTick.class.getName()); cepConfig.addEventType("IndicatorData", IndicatorData.class.getName()); cepConfig.addEventType("EsperEventRsi", EsperEventRsi.class.getName()); cepConfig.addEventType("GraphPacket", GraphPacket.class.getName()); cepConfig.addEventType("MarketData", MarketData.class.getName()); cepConfig.addEventType("MethodResults", MethodResults.class.getName()); cepConfig.addEventType("MarketSignal", MarketSignal.class.getName()); EPServiceProvider provider = EPServiceProviderManager.getProvider(mainEngine, cepConfig); return provider; } public void addStatement(String statement, UpdateListener listener) { EPStatement eps = statements.get(statement); if (eps == null) { EPAdministrator cepAdm = cep.getEPAdministrator(); eps = cepAdm.createEPL(statement); } eps.addListener(listener); } public void addPattern(String statement, UpdateListener listener) { EPStatement eps = statements.get(statement); if (eps == null) { EPAdministrator cepAdm = cep.getEPAdministrator(); eps = cepAdm.createPattern(statement); } eps.addListener(listener); } public void startHistoryGenerator() { startService(new HistoryTicksFromFile(cep.getEPRuntime())); } public void startTicker() { startService(new TickGenerator(cep.getEPRuntime())); } private void startService(EsperEventGenerator tickGenerator) { if (futureTask != null) { if (futureTask.cancel(true)) { futureTask = null; } } if (futureTask == null) { futureTask = new MethodFuture<String>(tickGenerator); threadExecutor.submit(futureTask); } } public Object call() { startTicker(); return null; } public static synchronized EPServiceProvider getMainEngine() { return initializeEngine(mainEngineName); } public static void addPattern(EPServiceProvider provider, String statement, UpdateListener listener) { EPAdministrator cepAdm = provider.getEPAdministrator(); EPStatement stmt = cepAdm.createPattern(statement); stmt.addListener(listener); } public static void addStatement(EPServiceProvider provider, String statement, UpdateListener listener) { EPAdministrator cepAdm = provider.getEPAdministrator(); EPStatement stmt = cepAdm.createEPL(statement); stmt.addListener(listener); } public void run() { this.call(); } }