package org.jnect.demo.incquery.esper; import org.eclipse.core.databinding.observable.Realm; import org.eclipse.core.databinding.observable.set.IObservableSet; import org.eclipse.core.databinding.observable.set.ISetChangeListener; import org.eclipse.core.databinding.observable.set.SetChangeEvent; import org.eclipse.incquery.databinding.runtime.api.IncQueryHeadlessRealm; import org.eclipse.incquery.databinding.runtime.api.IncQueryObservables; import org.eclipse.incquery.runtime.api.IPatternMatch; import org.eclipse.incquery.runtime.api.IncQueryMatcher; import org.jnect.demo.incquery.esper.events.PatternMatchEvent; import org.jnect.demo.incquery.esper.events.PatternMatchEventType; /** * Utility class to adapt IncQuery DeltaMonitor events to Esper events. * @author istvan rath * */ public class EsperAdapter { IncQueryMatcher<? extends IPatternMatch> matcher; public EsperAdapter(IncQueryMatcher<? extends IPatternMatch> m) { matcher = m; // if (Realm.getDefault()==null) { // make sure we work well in a headless / non-UI thread environment IncQueryHeadlessRealm realm = new IncQueryHeadlessRealm(); // } IObservableSet os = IncQueryObservables.observeMatchesAsSet(matcher); os.addSetChangeListener(new ISetChangeListener() { @Override public void handleSetChange(SetChangeEvent event) { for (Object _o : event.diff.getAdditions()) { IPatternMatch pm = (IPatternMatch) _o; // System.out.println("New match found:" + pm.toString()); // v.appendString(pm.patternName()); // for (Object _pe: pm.toArray()) { // ((PositionedElement)_pe).setColor_r(255); //} EsperManager.getInstance().sendEvent( new PatternMatchEvent(pm, pm.patternName(), PatternMatchEventType.NEW)); } for (Object _o : event.diff.getRemovals()) { IPatternMatch pm = (IPatternMatch) _o; // System.out.println("Lost match found:" + pm.toString()); // v.appendString(pm.patternName()); //for (Object _pe: pm.toArray()) { // ((PositionedElement)_pe).setColor_r(0); //} EsperManager.getInstance().sendEvent( new PatternMatchEvent(pm, pm.patternName(), PatternMatchEventType.LOST)); } } }); } }