Example usage for org.springframework.statemachine StateMachine getUuid

List of usage examples for org.springframework.statemachine StateMachine getUuid

Introduction

In this page you can find the example usage for org.springframework.statemachine StateMachine getUuid.

Prototype

UUID getUuid();

Source Link

Document

Gets the region and state machine unique id.

Usage

From source file:demo.web.StateMachineController.java

@PostConstruct
public void setup() {

    stateMachine.addStateListener(new StateMachineListenerAdapter<States, Events>() {
        @Override// w w  w. j  a v a 2  s. co  m
        public void stateEntered(State<States, Events> state) {
            StateMachineMessage message = new StateMachineMessage();
            message.setMessage("Enter state " + state.getId().toString());
            simpMessagingTemplate.convertAndSend("/topic/sm.message", message);
        }

        @Override
        public void stateExited(State<States, Events> state) {
            StateMachineMessage message = new StateMachineMessage();
            message.setMessage("Exit state " + state.getId().toString());
            simpMessagingTemplate.convertAndSend("/topic/sm.message", message);
        }

        @Override
        public void stateChanged(State<States, Events> from, State<States, Events> to) {
            Map<Object, Object> variables = stateMachine.getExtendedState().getVariables();
            ArrayList<StateMachineEvent> list = new ArrayList<StateMachineEvent>();
            for (States state : stateMachine.getState().getIds()) {
                list.add(new StateMachineEvent(state.toString()));
            }
            simpMessagingTemplate.convertAndSend("/topic/sm.states", list);
            simpMessagingTemplate.convertAndSend("/topic/sm.variables", variables);
        }

        @Override
        public void transitionEnded(Transition<States, Events> transition) {
            if (transition != null && transition.getKind() == TransitionKind.INTERNAL) {
                Map<Object, Object> variables = stateMachine.getExtendedState().getVariables();
                simpMessagingTemplate.convertAndSend("/topic/sm.variables", variables);
            }
        }

        @Override
        public void stateMachineError(StateMachine<States, Events> stateMachine, Exception exception) {
            handleStateMachineError(new StateMachineException("Received error from machine", exception));
        }

    });

    stateMachineEnsemble.addEnsembleListener(new EnsembleListenerAdapter<States, Events>() {

        @Override
        public void ensembleLeaderGranted(StateMachine<States, Events> stateMachine) {
            StateMachineMessage message = new StateMachineMessage();
            message.setMessage("Leader granted " + stateMachine.getUuid().toString());
            simpMessagingTemplate.convertAndSend("/topic/sm.message", message);
        }

        @Override
        public void ensembleLeaderRevoked(StateMachine<States, Events> stateMachine) {
            StateMachineMessage message = new StateMachineMessage();
            message.setMessage("Leader revoked " + stateMachine.getUuid().toString());
            simpMessagingTemplate.convertAndSend("/topic/sm.message", message);
        }
    });
}

From source file:org.springframework.statemachine.action.DistributedLeaderAction.java

@Override
public void execute(StateContext<S, E> context) {
    StateMachine<S, E> left = context.getStateMachine();
    StateMachine<S, E> right = ensemble.getLeader();
    boolean leader = (left != null & right != null)
            && ObjectUtils.nullSafeEquals(left.getUuid(), right.getUuid());
    if (log.isDebugEnabled()) {
        log.debug("Distibuted action leader status is " + leader);
    }/*  w  w w .ja  v  a 2  s .  c  o  m*/
    if (leader) {
        action.execute(context);
    }
}

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

private StateContext<S, E> buildStateContext(Message<E> message, Transition<S, E> transition,
        StateMachine<S, E> stateMachine) {
    // TODO: maybe a direct use of MessageHeaders is wring, combine
    //       payload and headers as a message?

    // add sm id to headers so that user of a StateContext can
    // see who initiated this transition
    MessageHeaders messageHeaders = message != null ? message.getHeaders()
            : new MessageHeaders(new HashMap<String, Object>());
    Map<String, Object> map = new HashMap<String, Object>(messageHeaders);
    if (!map.containsKey(StateMachineSystemConstants.STATEMACHINE_IDENTIFIER)) {
        // don't set sm id if it's already present because
        // we want to keep the originating sm id
        map.put(StateMachineSystemConstants.STATEMACHINE_IDENTIFIER, stateMachine.getUuid());
    }/*w w  w  .j  av  a  2  s  .  c  om*/
    return new DefaultStateContext<S, E>(Stage.TRANSITION, message, new MessageHeaders(map),
            stateMachine.getExtendedState(), transition, stateMachine, null, null, null);
}