List of usage examples for org.springframework.statemachine.access StateMachineAccessor StateMachineAccessor
StateMachineAccessor
From source file:org.springframework.statemachine.support.AbstractStateMachine.java
@SuppressWarnings("unchecked") @Override// w ww . ja va 2 s. com public StateMachineAccessor<S, E> getStateMachineAccessor() { // TODO: needs cleaning and perhaps not an anonymous function return new StateMachineAccessor<S, E>() { @Override public void doWithAllRegions(StateMachineFunction<StateMachineAccess<S, E>> stateMachineAccess) { stateMachineAccess.apply(AbstractStateMachine.this); for (State<S, E> state : states) { if (state.isSubmachineState()) { StateMachine<S, E> submachine = ((AbstractState<S, E>) state).getSubmachine(); submachine.getStateMachineAccessor().doWithAllRegions(stateMachineAccess); } else if (state.isOrthogonal()) { Collection<Region<S, E>> regions = ((AbstractState<S, E>) state).getRegions(); for (Region<S, E> region : regions) { ((StateMachine<S, E>) region).getStateMachineAccessor() .doWithAllRegions(stateMachineAccess); } } } } @Override public List<StateMachineAccess<S, E>> withAllRegions() { List<StateMachineAccess<S, E>> list = new ArrayList<StateMachineAccess<S, E>>(); list.add(AbstractStateMachine.this); for (State<S, E> state : states) { if (state.isSubmachineState()) { StateMachine<S, E> submachine = ((AbstractState<S, E>) state).getSubmachine(); if (submachine instanceof StateMachineAccess) { list.add((StateMachineAccess<S, E>) submachine); } } else if (state.isOrthogonal()) { Collection<Region<S, E>> regions = ((AbstractState<S, E>) state).getRegions(); for (Region<S, E> region : regions) { list.add((StateMachineAccess<S, E>) region); } } } return list; } @Override public void doWithRegion(StateMachineFunction<StateMachineAccess<S, E>> stateMachineAccess) { stateMachineAccess.apply(AbstractStateMachine.this); } @Override public StateMachineAccess<S, E> withRegion() { return AbstractStateMachine.this; } }; }