package hu.bme.mit.incquery.cep.api.eventprocessingstrategy; import org.apache.log4j.Logger; import hu.bme.mit.incquery.cep.api.runtime.EventModelManager; import hu.bme.mit.incquery.cep.logging.LoggerUtils; import hu.bme.mit.incquery.cep.metamodels.internalsm.EventToken; import hu.bme.mit.incquery.cep.metamodels.internalsm.FinalState; import hu.bme.mit.incquery.cep.metamodels.internalsm.InitState; import hu.bme.mit.incquery.cep.metamodels.internalsm.InternalExecutionModel; import hu.bme.mit.incquery.cep.metamodels.internalsm.InternalsmFactory; import hu.bme.mit.incquery.cep.metamodels.internalsm.State; import hu.bme.mit.incquery.cep.metamodels.internalsm.StateMachine; import hu.bme.mit.incquery.cep.metamodels.internalsm.TrapState; public abstract class AbstractImmediateStrategy extends AbstractEventProcessingStrategy { private final Logger logger = LoggerUtils.getInstance().getLogger(); public AbstractImmediateStrategy(EventModelManager eventModelManager) { super(eventModelManager); } @Override public void handleSmResets(InternalExecutionModel model, InternalsmFactory SM_FACTORY) { for (StateMachine stateMachine : model.getStateMachines()) { if (needsReset(stateMachine)) { String id = stateMachine.getEventPattern().getId(); logger.debug("ImmediateStrategy: No suitable update in the SM : " + id + ". It's going to be reset."); for (State state : stateMachine.getStates()) { if ((state instanceof InitState) || (state instanceof TrapState) || (state instanceof FinalState)) { continue; } if (state.getEventTokens().isEmpty()) { continue; } logger.debug("ImmediateStrategy: Deleting tokens from state: " + state.getLabel()); state.getEventTokens().clear(); } model.setLatestEvent(null); InitState initState = getEventModelManager().getInitStatesForStatemachines().get(stateMachine); if (initState.getEventTokens().isEmpty()) { EventToken cv = SM_FACTORY.createEventToken(); cv.setCurrentState(initState); model.getEventTokens().add(cv); } } } } private boolean needsReset(StateMachine stateMachine) { return !(getEventModelManager().getWasEnabledForTheLatestEvent().containsKey(stateMachine)); } }