Example usage for org.springframework.statemachine.trigger DefaultTriggerContext DefaultTriggerContext

List of usage examples for org.springframework.statemachine.trigger DefaultTriggerContext DefaultTriggerContext

Introduction

In this page you can find the example usage for org.springframework.statemachine.trigger DefaultTriggerContext DefaultTriggerContext.

Prototype

public DefaultTriggerContext(E event) 

Source Link

Usage

From source file:org.springframework.statemachine.support.AbstractStateMachine.java

protected synchronized boolean acceptEvent(Message<E> message) {
    if ((currentState != null && currentState.shouldDefer(message))) {
        log.info("Current state " + currentState + " deferred event " + message);
        stateMachineExecutor.queueDeferredEvent(message);
        return true;
    }//ww w  .  j  a  v a 2  s .c o m
    if ((currentState != null && currentState.sendEvent(message))) {
        return true;
    }

    if (log.isDebugEnabled()) {
        log.debug("Queue event " + message + " " + this);
    }

    for (Transition<S, E> transition : transitions) {
        State<S, E> source = transition.getSource();
        Trigger<S, E> trigger = transition.getTrigger();

        if (StateMachineUtils.containsAtleastOne(source.getIds(), currentState.getIds())) {
            if (trigger != null && trigger.evaluate(new DefaultTriggerContext<S, E>(message.getPayload()))) {
                stateMachineExecutor.queueEvent(message);
                return true;
            }
        }
    }
    // if we're about to not accept event, check defer again in case
    // state was changed between original check and now
    if ((currentState != null && currentState.shouldDefer(message))) {
        log.info("Current state " + currentState + " deferred event " + message);
        stateMachineExecutor.queueDeferredEvent(message);
        return true;
    }
    return false;
}

From source file:org.springframework.statemachine.support.DefaultStateMachineExecutor.java

private boolean processEventQueue() {
    if (log.isDebugEnabled()) {
        log.debug("Process event queue, size=" + eventQueue.size());
    }//w  ww  .  j a v a2 s .  co  m
    Message<E> queuedEvent = eventQueue.poll();
    State<S, E> currentState = stateMachine.getState();
    if (queuedEvent != null) {
        if ((currentState != null && currentState.shouldDefer(queuedEvent))) {
            log.info("Current state " + currentState + " deferred event " + queuedEvent);
            queueDeferredEvent(queuedEvent);
            return true;
        }
        for (Transition<S, E> transition : transitions) {
            State<S, E> source = transition.getSource();
            Trigger<S, E> trigger = transition.getTrigger();

            if (StateMachineUtils.containsAtleastOne(source.getIds(), currentState.getIds())) {
                if (trigger != null
                        && trigger.evaluate(new DefaultTriggerContext<S, E>(queuedEvent.getPayload()))) {
                    queueTrigger(trigger, queuedEvent);
                    return true;
                }
            }
        }
    }
    return false;
}

From source file:org.springframework.statemachine.support.DefaultStateMachineExecutor.java

private synchronized boolean processDeferList() {
    if (log.isDebugEnabled()) {
        log.debug("Process defer list, size=" + deferList.size());
    }/*from w w w  .  j  a v a2s.  c  o  m*/
    ListIterator<Message<E>> iterator = deferList.listIterator();
    State<S, E> currentState = stateMachine.getState();
    while (iterator.hasNext()) {
        Message<E> event = iterator.next();
        if (currentState.shouldDefer(event)) {
            // if current state still defers, just continue with others
            continue;
        }
        for (Transition<S, E> transition : transitions) {
            State<S, E> source = transition.getSource();
            Trigger<S, E> trigger = transition.getTrigger();
            if (source.equals(currentState)) {
                if (trigger != null && trigger.evaluate(new DefaultTriggerContext<S, E>(event.getPayload()))) {
                    triggerQueue.add(new TriggerQueueItem(trigger, event));
                    iterator.remove();
                    // bail out when first deferred message is causing a trigger to fire
                    return true;
                }
            }
        }
    }
    return false;
}