package org.jnect.demo.incquery.esper; import static org.jnect.demo.incquery.esper.utils.Logger.log; import java.awt.event.KeyEvent; import org.jnect.demo.incquery.esper.filters.atomic.AtomicPatternFilter; import org.jnect.demo.incquery.esper.filters.atomic.ParameterizedAtomicPatternFilter; import org.jnect.demo.incquery.esper.filters.complex.IQFilterWithWindow; import org.jnect.demo.incquery.esper.filters.complex.IQFilterWithWindowFeedback; import org.jnect.demo.incquery.esper.filters.complex.YMCAFilterWithWindow; import org.jnect.demo.incquery.esper.filters.complex.YMCAFilterWithWindowFeedback; import org.jnect.demo.incquery.esper.robot.RobotPatternListener; import org.jnect.demo.incquery.esper.robot.StartEndEventPatternWithWindow; import org.jnect.demo.incquery.sheldon.SheldonEventPatternWithWindowFeedback; import org.jnect.demo.incquery.sheldon.SheldonPatternListener; import com.espertech.esper.client.Configuration; import com.espertech.esper.client.EPAdministrator; import com.espertech.esper.client.EPServiceProvider; import com.espertech.esper.client.EPServiceProviderManager; /** * Singleton manager class responsible for instantiating and managing the Esper engine. * * @author idavid */ public class EsperManager { private static EsperManager instance = new EsperManager("esperengine"); public static EsperManager getInstance() { return instance; } private final String engineURI; private EPServiceProvider epService; private EsperManager(String engineURI) { this.engineURI = engineURI; try { connectToEngine(); } catch (Exception ex) { log("ESPERMANAGER: unable to initialize"); ex.printStackTrace(); } } public void connectToEngine() throws Exception { log("ESPERMANAGER: Getting Provider"); log("ESPERMANAGER: Connecting to the Runtime"); // enabling event type name usage in EPL queries Configuration config = new Configuration(); config.addEventTypeAutoName("org.jnect.demo.incquery.esper.events"); epService = EPServiceProviderManager.getProvider(engineURI, config); EPServiceProviderManager.getProvider(engineURI).getEPRuntime(); log("ESPERMANAGER: Got the Provider and successfully connected to the Runtime"); //registerFiltersAndListeners(); } private IQFilterWithWindow iqFilterW; private IQFilterWithWindowFeedback iqFilterWFB; private YMCAFilterWithWindow ymcaFilterW; private YMCAFilterWithWindowFeedback ymcaFilterWFB; private AtomicPatternFilter iFilter; private AtomicPatternFilter qFilter; private AtomicPatternFilter yFilter; private AtomicPatternFilter mFilter; private AtomicPatternFilter cFilter; private AtomicPatternFilter aFilter; private EsperPatternListener iqListener; private EsperPatternListener ymcaListener; private EsperPatternListener iListener; private EsperPatternListener qListener; private EsperPatternListener iListenerFB; private EsperPatternListener qListenerFB; private EsperPatternListener yListener; private EsperPatternListener mListener; private EsperPatternListener cListener; private EsperPatternListener aListener; private EsperPatternListener yListenerFB; private EsperPatternListener mListenerFB; private EsperPatternListener cListenerFB; private EsperPatternListener aListenerFB; public void registerYMCAListeners() { EPAdministrator admin = epService.getEPAdministrator(); // complex event filters //iqFilterW = new IQFilterWithWindow(admin); //iqListener = new EsperPatternListener("IQ"); //iqFilterW.addListener(iqListener); iqFilterWFB = new IQFilterWithWindowFeedback(admin); iqListener = new EsperPatternListener(" IQ "); iqFilterWFB.addListener(iqListener); // ymcaFilterW = new YMCAFilterWithWindow(admin); // ymcaListener = new EsperPatternListener("YMCA"); // ymcaFilterW.addListener(ymcaListener); ymcaFilterWFB = new YMCAFilterWithWindowFeedback(admin); ymcaListener = new EsperPatternListener(" YMCA "); ymcaFilterWFB.addListener(ymcaListener); // atomic event filters iFilter = new AtomicPatternFilter(admin, "I"); iListener = new EsperPatternListener("I"); iListenerFB = new EsperPatternListenerFeedback("I"); //iFilter.addListener(iListener); iFilter.addListener(iListenerFB); qFilter = new AtomicPatternFilter(admin, "Q"); qListener = new EsperPatternListener("Q"); qListenerFB = new EsperPatternListenerFeedback("Q"); //qFilter.addListener(qListener); qFilter.addListener(qListenerFB); yFilter = new AtomicPatternFilter(admin, "Y"); yListener = new EsperPatternListener("Y"); yListenerFB = new EsperPatternListenerFeedback("Y"); //yFilter.addListener(yListener); yFilter.addListener(yListenerFB); mFilter = new AtomicPatternFilter(admin, "M"); mListener = new EsperPatternListener("M"); mListenerFB = new EsperPatternListenerFeedback("M"); //mFilter.addListener(mListener); mFilter.addListener(mListenerFB); cFilter = new AtomicPatternFilter(admin, "C"); cListener = new EsperPatternListener("C"); cListenerFB = new EsperPatternListenerFeedback("C"); //cFilter.addListener(cListener); cFilter.addListener(cListenerFB); aFilter = new AtomicPatternFilter(admin, "A"); aListener = new EsperPatternListener("A"); aListenerFB = new EsperPatternListenerFeedback("A"); //aFilter.addListener(aListener); aFilter.addListener(aListenerFB); } public void unregisterYMCAListeners() { if (iqFilterW!=null) { iqFilterW.removeListener(iqListener); } if (ymcaFilterW!=null) { ymcaFilterW.removeListener(ymcaListener); } if (iFilter!=null) { iFilter.removeListener(iListener); } if (qFilter!=null) { qFilter.removeListener(qListener); } if (yFilter!=null) { yFilter.removeListener(yListener); } if (mFilter!=null) { mFilter.removeListener(mListener); } if (cFilter!=null) { cFilter.removeListener(cListener); } if (aFilter!=null) { aFilter.removeListener(aListener); } } private StartEndEventPatternWithWindow forwardFilter; private RobotPatternListener forwardListener; private StartEndEventPatternWithWindow backwardFilter; private RobotPatternListener backwardListener; public void registerRobotListeners() { EPAdministrator admin = epService.getEPAdministrator(); if (admin!=null) { // powerpoint robot example forwardFilter = new StartEndEventPatternWithWindow(admin, "FS", "FE", "2 sec"); forwardListener = new RobotPatternListener("F", KeyEvent.VK_RIGHT); forwardFilter.addListener(forwardListener); backwardFilter = new StartEndEventPatternWithWindow(admin, "BS", "BE", "2 sec"); backwardListener = new RobotPatternListener("B", KeyEvent.VK_LEFT); backwardFilter.addListener(backwardListener); } } public void unregisterRobotListeners() { if (forwardFilter!=null) { forwardFilter.removeListener(forwardListener); } if (backwardFilter!=null) { backwardFilter.removeListener(backwardListener); } } private ParameterizedAtomicPatternFilter ssFilter, smFilter, seFilter; private EsperPatternListenerFeedback ssListener, smListener, seListener; private SheldonEventPatternWithWindowFeedback sheldonFilter; private SheldonPatternListener sheldonListener; public void registerSheldonListeners() { EPAdministrator admin = epService.getEPAdministrator(); if (admin!=null) { // sheldon control example String wLen = "0.4 seconds"; // adjust this for more precision ssFilter = new ParameterizedAtomicPatternFilter(admin, "SS", wLen); ssListener = new EsperPatternListenerFeedback("SS"); ssFilter.addListener(ssListener); smFilter = new ParameterizedAtomicPatternFilter(admin, "SM", wLen); smListener = new EsperPatternListenerFeedback("SM"); smFilter.addListener(smListener); seFilter = new ParameterizedAtomicPatternFilter(admin, "SE", wLen); seListener = new EsperPatternListenerFeedback("SE"); seFilter.addListener(seListener); sheldonFilter = new SheldonEventPatternWithWindowFeedback(admin, "4 sec"); // adjust this for gesture sequence speed tolerance sheldonListener = new SheldonPatternListener(" SHELDON "); sheldonFilter.addListener(sheldonListener); } } public void unregisterSheldonListeners() { if (sheldonFilter!=null) { sheldonFilter.removeListener(sheldonListener); } if (ssFilter!=null) { ssFilter.removeListener(ssListener); } if (smFilter!=null) { smFilter.removeListener(smListener); } if (seFilter!=null) { seFilter.removeListener(seListener); } } public void sendEvent(Object event) { log("ESPERMANAGER: Sending event [" + event.toString() + "]"); epService.getEPRuntime().sendEvent(event); } }