List of usage examples for org.springframework.statemachine StateMachine getUuid
UUID getUuid();
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); }