package hu.bme.mit.incquery.cep.api.evm;
import hu.bme.mit.incquery.cep.metamodels.internalsm.StateMachine;
import org.eclipse.incquery.runtime.evm.api.RuleInstance;
import org.eclipse.incquery.runtime.evm.api.event.AbstractRuleInstanceBuilder;
import org.eclipse.incquery.runtime.evm.api.event.EventFilter;
import org.eclipse.incquery.runtime.evm.api.event.EventRealm;
import org.eclipse.incquery.runtime.evm.api.event.EventSourceSpecification;
public class CepEventSourceSpecification implements EventSourceSpecification<IObservableComplexEventPattern> {
private StateMachine stateMachine;
public CepEventSourceSpecification(StateMachine stateMachine) {
this.stateMachine = stateMachine;
}
@Override
public EventFilter<IObservableComplexEventPattern> createEmptyFilter() {
return new EmptyEventFilter();
}
@Override
public AbstractRuleInstanceBuilder<IObservableComplexEventPattern> getRuleInstanceBuilder(final EventRealm realm) {
return new AbstractRuleInstanceBuilder<IObservableComplexEventPattern>() {
@Override
public void prepareRuleInstance(RuleInstance<IObservableComplexEventPattern> ruleInstance,
EventFilter<? super IObservableComplexEventPattern> filter) {
CepEventSource source = new CepEventSource(CepEventSourceSpecification.this, (CepRealm) realm);
CepEventHandler handler = new CepEventHandler(source, ruleInstance);
source.setStateMachine(stateMachine);
source.addHandler(handler);
}
};
}
}