Example usage for org.springframework.statemachine.transition DefaultExternalTransition DefaultExternalTransition

List of usage examples for org.springframework.statemachine.transition DefaultExternalTransition DefaultExternalTransition

Introduction

In this page you can find the example usage for org.springframework.statemachine.transition DefaultExternalTransition DefaultExternalTransition.

Prototype

public DefaultExternalTransition(State<S, E> source, State<S, E> target,
        Collection<Function<StateContext<S, E>, Mono<Void>>> actions, E event,
        Function<StateContext<S, E>, Mono<Boolean>> guard, Trigger<S, E> trigger) 

Source Link

Document

Instantiates a new default external transition.

Usage

From source file:org.springframework.statemachine.EnumStateMachineTests.java

@Test
public void testSimpleStateSwitch() {
    PseudoState<TestStates, TestEvents> pseudoState = new DefaultPseudoState<TestStates, TestEvents>(
            PseudoStateKind.INITIAL);/*from www  .ja  v a 2s.co  m*/
    State<TestStates, TestEvents> stateSI = new EnumState<TestStates, TestEvents>(TestStates.SI, pseudoState);
    State<TestStates, TestEvents> stateS1 = new EnumState<TestStates, TestEvents>(TestStates.S1);
    State<TestStates, TestEvents> stateS2 = new EnumState<TestStates, TestEvents>(TestStates.S2);
    State<TestStates, TestEvents> stateS3 = new EnumState<TestStates, TestEvents>(TestStates.S3);

    Collection<State<TestStates, TestEvents>> states = new ArrayList<State<TestStates, TestEvents>>();
    states.add(stateSI);
    states.add(stateS1);
    states.add(stateS2);
    states.add(stateS3);

    Collection<Transition<TestStates, TestEvents>> transitions = new ArrayList<Transition<TestStates, TestEvents>>();

    Collection<Action<TestStates, TestEvents>> actionsFromSIToS1 = new ArrayList<Action<TestStates, TestEvents>>();
    actionsFromSIToS1.add(new LoggingAction("actionsFromSIToS1"));
    DefaultExternalTransition<TestStates, TestEvents> transitionFromSIToS1 = new DefaultExternalTransition<TestStates, TestEvents>(
            stateSI, stateS1, actionsFromSIToS1, TestEvents.E1, null,
            new EventTrigger<TestStates, TestEvents>(TestEvents.E1));

    Collection<Action<TestStates, TestEvents>> actionsFromS1ToS2 = new ArrayList<Action<TestStates, TestEvents>>();
    actionsFromS1ToS2.add(new LoggingAction("actionsFromS1ToS2"));
    DefaultExternalTransition<TestStates, TestEvents> transitionFromS1ToS2 = new DefaultExternalTransition<TestStates, TestEvents>(
            stateS1, stateS2, actionsFromS1ToS2, TestEvents.E2, null,
            new EventTrigger<TestStates, TestEvents>(TestEvents.E2));

    Collection<Action<TestStates, TestEvents>> actionsFromS2ToS3 = new ArrayList<Action<TestStates, TestEvents>>();
    actionsFromS1ToS2.add(new LoggingAction("actionsFromS2ToS3"));
    DefaultExternalTransition<TestStates, TestEvents> transitionFromS2ToS3 = new DefaultExternalTransition<TestStates, TestEvents>(
            stateS2, stateS3, actionsFromS2ToS3, TestEvents.E3, null,
            new EventTrigger<TestStates, TestEvents>(TestEvents.E3));

    transitions.add(transitionFromSIToS1);
    transitions.add(transitionFromS1ToS2);
    transitions.add(transitionFromS2ToS3);

    SyncTaskExecutor taskExecutor = new SyncTaskExecutor();
    BeanFactory beanFactory = new DefaultListableBeanFactory();
    ObjectStateMachine<TestStates, TestEvents> machine = new ObjectStateMachine<TestStates, TestEvents>(states,
            transitions, stateSI);
    machine.setTaskExecutor(taskExecutor);
    machine.setBeanFactory(beanFactory);
    machine.afterPropertiesSet();
    machine.start();

    State<TestStates, TestEvents> initialState = machine.getInitialState();
    assertThat(initialState, is(stateSI));

    State<TestStates, TestEvents> state = machine.getState();
    assertThat(state, is(stateSI));

    machine.sendEvent(MessageBuilder.withPayload(TestEvents.E1).build());
    state = machine.getState();
    assertThat(state, is(stateS1));

    machine.sendEvent(MessageBuilder.withPayload(TestEvents.E2).build());
    state = machine.getState();
    assertThat(state, is(stateS2));

    // not processed
    machine.sendEvent(MessageBuilder.withPayload(TestEvents.E1).build());
    state = machine.getState();
    assertThat(state, is(stateS2));

    machine.sendEvent(MessageBuilder.withPayload(TestEvents.E3).build());
    state = machine.getState();
    assertThat(state, is(stateS3));
}

From source file:org.springframework.statemachine.EnumStateMachineTests.java

@Test
public void testDeferredEvents() {
    PseudoState<TestStates, TestEvents> pseudoState = new DefaultPseudoState<TestStates, TestEvents>(
            PseudoStateKind.INITIAL);//from w  ww . j a v  a2s. com

    Collection<TestEvents> deferred = new ArrayList<TestEvents>();
    deferred.add(TestEvents.E2);
    deferred.add(TestEvents.E3);

    // states
    State<TestStates, TestEvents> stateSI = new EnumState<TestStates, TestEvents>(TestStates.SI, deferred, null,
            null, pseudoState);
    State<TestStates, TestEvents> stateS1 = new EnumState<TestStates, TestEvents>(TestStates.S1);
    State<TestStates, TestEvents> stateS2 = new EnumState<TestStates, TestEvents>(TestStates.S2);
    State<TestStates, TestEvents> stateS3 = new EnumState<TestStates, TestEvents>(TestStates.S3);

    Collection<State<TestStates, TestEvents>> states = new ArrayList<State<TestStates, TestEvents>>();
    states.add(stateSI);
    states.add(stateS1);
    states.add(stateS2);
    states.add(stateS3);

    // transitions
    Collection<Transition<TestStates, TestEvents>> transitions = new ArrayList<Transition<TestStates, TestEvents>>();

    Collection<Action<TestStates, TestEvents>> actionsFromSIToS1 = new ArrayList<Action<TestStates, TestEvents>>();
    actionsFromSIToS1.add(new LoggingAction("actionsFromSIToS1"));
    DefaultExternalTransition<TestStates, TestEvents> transitionFromSIToS1 = new DefaultExternalTransition<TestStates, TestEvents>(
            stateSI, stateS1, actionsFromSIToS1, TestEvents.E1, null,
            new EventTrigger<TestStates, TestEvents>(TestEvents.E1));

    Collection<Action<TestStates, TestEvents>> actionsFromS1ToS2 = new ArrayList<Action<TestStates, TestEvents>>();
    actionsFromS1ToS2.add(new LoggingAction("actionsFromS1ToS2"));
    DefaultExternalTransition<TestStates, TestEvents> transitionFromS1ToS2 = new DefaultExternalTransition<TestStates, TestEvents>(
            stateS1, stateS2, actionsFromS1ToS2, TestEvents.E2, null,
            new EventTrigger<TestStates, TestEvents>(TestEvents.E2));

    Collection<Action<TestStates, TestEvents>> actionsFromS2ToS3 = new ArrayList<Action<TestStates, TestEvents>>();
    actionsFromS1ToS2.add(new LoggingAction("actionsFromS2ToS3"));
    DefaultExternalTransition<TestStates, TestEvents> transitionFromS2ToS3 = new DefaultExternalTransition<TestStates, TestEvents>(
            stateS2, stateS3, actionsFromS2ToS3, TestEvents.E3, null,
            new EventTrigger<TestStates, TestEvents>(TestEvents.E3));

    transitions.add(transitionFromSIToS1);
    transitions.add(transitionFromS1ToS2);
    transitions.add(transitionFromS2ToS3);

    // create machine
    SyncTaskExecutor taskExecutor = new SyncTaskExecutor();
    BeanFactory beanFactory = new DefaultListableBeanFactory();
    ObjectStateMachine<TestStates, TestEvents> machine = new ObjectStateMachine<TestStates, TestEvents>(states,
            transitions, stateSI);
    machine.setTaskExecutor(taskExecutor);
    machine.setBeanFactory(beanFactory);
    machine.afterPropertiesSet();
    machine.start();

    State<TestStates, TestEvents> initialState = machine.getInitialState();
    assertThat(initialState, is(stateSI));

    State<TestStates, TestEvents> state = machine.getState();
    assertThat(state, is(stateSI));

    machine.sendEvent(MessageBuilder.withPayload(TestEvents.E2).build());
    machine.sendEvent(MessageBuilder.withPayload(TestEvents.E3).build());
    state = machine.getState();
    assertThat(state, is(stateSI));

    machine.sendEvent(MessageBuilder.withPayload(TestEvents.E1).build());
    state = machine.getState();
    assertThat(state, is(stateS3));
}