List of usage examples for org.springframework.statemachine.trigger Trigger getEvent
E getEvent();
From source file:org.springframework.statemachine.support.DefaultStateMachineExecutor.java
private void processTriggerQueue() { if (!isRunning()) { return;//from w ww . ja v a2 s. c om } if (!initialHandled.getAndSet(true)) { ArrayList<Transition<S, E>> trans = new ArrayList<Transition<S, E>>(); trans.add(initialTransition); // TODO: should we merge if initial event is actually used? if (initialEvent != null) { handleInitialTrans(initialTransition, initialEvent); } else { handleInitialTrans(initialTransition, forwardedInitialEvent); } return; } if (log.isDebugEnabled()) { log.debug("Process trigger queue, size=" + triggerQueue.size() + " " + this); } TriggerQueueItem queueItem = triggerQueue.poll(); // keep message here so that we can // pass it to triggerless transitions State<S, E> currentState = stateMachine.getState(); if (queueItem != null && currentState != null) { if (log.isDebugEnabled()) { log.debug("Process trigger item " + queueItem + " " + this); } // queued message is kept on a class level order to let // triggerless transition to receive this message if it doesn't // kick in in this poll loop. queuedMessage = queueItem.message; E event = queuedMessage != null ? queuedMessage.getPayload() : null; // need all transitions trigger could match, event trigger may match // multiple // need to go up from substates and ask if trigger transit, if not // check super ArrayList<Transition<S, E>> trans = new ArrayList<Transition<S, E>>(); if (event != null) { ArrayList<S> ids = new ArrayList<S>(currentState.getIds()); Collections.reverse(ids); for (S id : ids) { for (Entry<Trigger<S, E>, Transition<S, E>> e : triggerToTransitionMap.entrySet()) { Trigger<S, E> tri = e.getKey(); E ee = tri.getEvent(); Transition<S, E> tra = e.getValue(); if (event.equals(ee)) { if (tra.getSource().getId().equals(id) && !trans.contains(tra)) { trans.add(tra); continue; } } } } } // most likely timer if (trans.isEmpty()) { trans.add(triggerToTransitionMap.get(queueItem.trigger)); } // go through candidates and transit max one handleTriggerTrans(trans, queuedMessage); } if (stateMachine.getState() != null) { // loop triggerless transitions here so that // all "chained" transitions will get queue message boolean transit = false; do { transit = handleTriggerTrans(triggerlessTransitions, queuedMessage); } while (transit); } }