@Override public String toString() { return String.format("StateTransition: [state=%s, pattern=%s, next=%s]", state == null ? null : state.getName(), pattern, next); }
private void addTransition(String pattern, State next) { tos.put(next.getName(), next); transitions.add(StateTransition.createStateTransition(currentState, pattern, next.getName())); if (transitions.size() == 1) { transitions.add(StateTransition.createEndStateTransition(failedState)); transitions.add(StateTransition.createEndStateTransition(completedState)); transitions.add(StateTransition.createEndStateTransition(stoppedState)); } if (next.isEndState()) { transitions.add(StateTransition.createEndStateTransition(next)); } dirty = true; }
@Override public boolean isEndState() { return state.isEndState(); }
@Override public FlowExecutionStatus handle(FlowExecutor executor) throws Exception { return state.handle(executor); }
private StateTransition(State state, @Nullable String pattern, @Nullable String next) { super(); if (!StringUtils.hasText(pattern)) { this.pattern = "*"; } else { this.pattern = pattern; } Assert.notNull(state, "A state is required for a StateTransition"); if (state.isEndState() && StringUtils.hasText(next)) { throw new IllegalStateException("End state cannot have next: " + state); } this.next = next; this.state = state; }
@Override public FlowExecutionStatus handle(FlowExecutor executor) throws Exception { return state.handle(executor); }
private boolean stateNameEndsWithStepName(State state, StepExecution stepExecution) { return !(stepExecution == null || state == null) && !state.getName().endsWith(stepExecution.getStepName()); }
private void addDanglingEndStates() { Set<String> froms = new HashSet<>(); for (StateTransition transition : transitions) { froms.add(transition.getState().getName()); tos.put(currentState.getName(), currentState); if (!froms.contains(to)) { currentState = copy.get(to); if (!currentState.isEndState()) { addTransition("COMPLETED", completedState); addTransition("*", failedState); if (!currentState.isEndState()) { if (!hasFail(from)) { addTransition("*", failedState);
@Override public boolean isEndState() { return state.isEndState(); }
@Override public FlowExecutionStatus handle(FlowExecutor executor) throws Exception { return state.handle(executor); }
private boolean matches(String from, String status) { for (StateTransition transition : transitions) { if (from.equals(transition.getState().getName()) && transition.matches(status)) { return true; } } return false; }
private void addTransition(String pattern, State next) { tos.put(next.getName(), next); transitions.add(StateTransition.createStateTransition(currentState, pattern, next.getName())); if (transitions.size() == 1) { transitions.add(StateTransition.createEndStateTransition(failedState)); transitions.add(StateTransition.createEndStateTransition(completedState)); transitions.add(StateTransition.createEndStateTransition(stoppedState)); } if (next.isEndState()) { transitions.add(StateTransition.createEndStateTransition(next)); } dirty = true; }
@Override public boolean isEndState() { return state.isEndState(); }
@Override public FlowExecutionStatus handle(FlowExecutor executor) throws Exception { return state.handle(executor); }
private void doFrom(Object input) { if (currentState == null) { doStart(input); } State state = createState(input); tos.put(currentState.getName(), currentState); this.currentState = state; }
private void addTransition(String pattern, State next) { tos.put(next.getName(), next); transitions.add(StateTransition.createStateTransition(currentState, pattern, next.getName())); if (transitions.size() == 1) { transitions.add(StateTransition.createEndStateTransition(failedState)); transitions.add(StateTransition.createEndStateTransition(completedState)); transitions.add(StateTransition.createEndStateTransition(stoppedState)); } if (next.isEndState()) { transitions.add(StateTransition.createEndStateTransition(next)); } dirty = true; }