Example usage for org.springframework.statemachine StateMachine addStateListener

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

Introduction

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

Prototype

void addStateListener(StateMachineListener<S, E> listener);

Source Link

Document

Adds the state listener.

Usage

From source file:org.springframework.statemachine.recipes.TasksHandlerTests.java

@Test
public void testEvents2() throws InterruptedException {
    TestTasksListener tasksListener = new TestTasksListener();
    TasksHandler handler = TasksHandler.builder().task("1", sleepRunnable()).task("2", sleepRunnable())
            .task("3", failRunnable()).listener(tasksListener).build();

    TestListener listener = new TestListener();
    listener.reset(11, 0, 0);//w w  w .  j a  v a 2 s .  c  o  m
    StateMachine<String, String> machine = handler.getStateMachine();
    machine.addStateListener(listener);
    machine.start();
    assertThat(listener.stateMachineStartedLatch.await(1, TimeUnit.SECONDS), is(true));

    tasksListener.reset(1, 0, 0, 0, 1, 0, 0, 1);
    handler.runTasks();

    assertThat(listener.stateChangedLatch.await(8, TimeUnit.SECONDS), is(true));
    assertThat(listener.stateChangedCount, is(11));

    assertThat(tasksListener.onTasksStartedLatch.await(1, TimeUnit.SECONDS), is(true));
    assertThat(tasksListener.onTasksStarted, is(1));
    assertThat(tasksListener.onTaskSuccessLatch.await(2, TimeUnit.SECONDS), is(true));
    assertThat(tasksListener.onTaskSuccess, is(2));
    assertThat(tasksListener.onTaskFailedLatch.await(1, TimeUnit.SECONDS), is(true));
    assertThat(tasksListener.onTaskFailed, is(1));
    assertThat(tasksListener.onTasksErrorLatch.await(1, TimeUnit.SECONDS), is(true));
    assertThat(tasksListener.onTasksError, is(1));
    assertThat(tasksListener.onTasksSuccess, is(0));
}

From source file:org.springframework.statemachine.recipes.TasksHandlerTests.java

@Test
public void testEvents3() throws InterruptedException {
    TestTasksListener tasksListener = new TestTasksListener();
    TasksHandler handler = TasksHandler.builder().task("1", sleepRunnable()).task("2", sleepRunnable())
            .task("3", failRunnable()).listener(tasksListener).build();

    TestListener listener = new TestListener();
    listener.reset(11, 0, 0);//w  w  w. j av a  2  s  .  com
    StateMachine<String, String> machine = handler.getStateMachine();
    machine.addStateListener(listener);
    machine.start();
    assertThat(listener.stateMachineStartedLatch.await(1, TimeUnit.SECONDS), is(true));

    tasksListener.reset(0, 1, 0, 0, 0, 0, 0, 0);
    handler.runTasks();

    assertThat(listener.stateChangedLatch.await(8, TimeUnit.SECONDS), is(true));
    assertThat(listener.stateChangedCount, is(11));
    assertThat(machine.getState().getIds(), contains(TasksHandler.STATE_ERROR, TasksHandler.STATE_MANUAL));

    listener.reset(1, 0, 0);
    handler.fixCurrentProblems();
    handler.continueFromError();
    assertThat(listener.stateChangedLatch.await(1, TimeUnit.SECONDS), is(true));
    assertThat(listener.stateChangedCount, is(1));
    assertThat(machine.getState().getIds(), contains(TasksHandler.STATE_READY));

    assertThat(tasksListener.onTasksContinueLatch.await(1, TimeUnit.SECONDS), is(true));
    assertThat(tasksListener.onTasksContinue, is(1));
}

From source file:org.springframework.statemachine.recipes.TasksHandlerTests.java

@Test
public void testPersist1() throws InterruptedException {
    TestStateMachinePersist persist = new TestStateMachinePersist();
    TasksHandler handler = TasksHandler.builder().task("1", sleepRunnable()).task("2", sleepRunnable())
            .task("3", sleepRunnable()).persist(persist).build();

    TestListener listener = new TestListener();
    listener.reset(9, 0, 0);/*from w  w w. jav  a2s.  c o  m*/
    StateMachine<String, String> machine = handler.getStateMachine();
    machine.addStateListener(listener);
    machine.start();
    assertThat(listener.stateMachineStartedLatch.await(1, TimeUnit.SECONDS), is(true));

    persist.reset(5);

    handler.runTasks();

    assertThat(listener.stateChangedLatch.await(8, TimeUnit.SECONDS), is(true));
    assertThat(listener.stateChangedCount, is(9));
    assertThat(machine.getState().getIds(), contains(TasksHandler.STATE_READY));
    Map<Object, Object> variables = machine.getExtendedState().getVariables();
    assertThat(variables.size(), is(3));

    assertThat(persist.writeLatch.await(4, TimeUnit.SECONDS), is(true));
    assertThat(persist.contexts.size(), is(5));

    for (StateMachineContext<String, String> context : persist.getContexts()) {
        if (context.getState() == "TASKS") {
            assertThat(context.getChilds().size(), is(3));
        } else {
            assertThat(context.getChilds().size(), is(0));
        }
    }
}

From source file:org.springframework.statemachine.recipes.TasksHandlerTests.java

@Test
public void testPersist2() throws InterruptedException {
    TestStateMachinePersist persist = new TestStateMachinePersist();
    TasksHandler handler = TasksHandler.builder().task("1", sleepRunnable()).task("2", sleepRunnable())
            .task("3", failRunnable()).persist(persist).build();

    TestListener listener = new TestListener();
    listener.reset(11, 0, 0);//from   w  w w  .ja  v a2 s  .c o m
    StateMachine<String, String> machine = handler.getStateMachine();
    machine.addStateListener(listener);
    machine.start();
    assertThat(listener.stateMachineStartedLatch.await(1, TimeUnit.SECONDS), is(true));

    persist.reset(6);

    handler.runTasks();

    assertThat(listener.stateChangedLatch.await(8, TimeUnit.SECONDS), is(true));
    assertThat(listener.stateChangedCount, is(11));
    assertThat(machine.getState().getIds(), contains(TasksHandler.STATE_ERROR, TasksHandler.STATE_MANUAL));
    Map<Object, Object> variables = machine.getExtendedState().getVariables();
    assertThat(variables.size(), is(3));

    assertThat(persist.writeLatch.await(4, TimeUnit.SECONDS), is(true));
    assertThat(persist.contexts.size(), is(6));

    for (StateMachineContext<String, String> context : persist.getContexts()) {
        if (context.getState() == "TASKS") {
            assertThat(context.getChilds().size(), is(3));
        } else if (context.getState() == "ERROR") {
            assertThat(context.getChilds().size(), is(1));
        } else {
            assertThat(context.getChilds().size(), is(0));
        }
    }
}

From source file:org.springframework.statemachine.recipes.TasksHandlerTests.java

@Test
public void testReset1() throws InterruptedException {
    TestStateMachinePersist persist = new TestStateMachinePersist();
    TasksHandler handler = TasksHandler.builder().task("1", sleepRunnable()).task("2", sleepRunnable())
            .task("3", sleepRunnable()).persist(persist).build();

    TestListener listener = new TestListener();
    StateMachine<String, String> machine = handler.getStateMachine();
    machine.addStateListener(listener);
    handler.resetFromPersistStore();//from  w  w w .  j  a v a  2s  .  c om
    assertThat(listener.stateMachineStartedLatch.await(1, TimeUnit.SECONDS), is(true));
}

From source file:org.springframework.statemachine.recipes.TasksHandlerTests.java

@Test
public void testReset2() throws InterruptedException {
    DefaultStateMachineContext<String, String> child = new DefaultStateMachineContext<String, String>("MANUAL",
            null, null, null);/*from  ww  w  . j av  a2 s .c  o  m*/
    List<StateMachineContext<String, String>> childs = new ArrayList<StateMachineContext<String, String>>();
    childs.add(child);
    DefaultStateMachineContext<String, String> context = new DefaultStateMachineContext<String, String>(childs,
            "ERROR", null, null, null);
    TestStateMachinePersist persist = new TestStateMachinePersist(context);
    TasksHandler handler = TasksHandler.builder().task("1", sleepRunnable()).task("2", sleepRunnable())
            .task("3", sleepRunnable()).persist(persist).build();

    TestListener listener = new TestListener();
    StateMachine<String, String> machine = handler.getStateMachine();
    machine.addStateListener(listener);

    handler.resetFromPersistStore();

    assertThat(listener.stateMachineStartedLatch.await(1, TimeUnit.SECONDS), is(true));
    assertThat(machine.getState().getIds(), contains(TasksHandler.STATE_ERROR, TasksHandler.STATE_MANUAL));
}

From source file:org.springframework.statemachine.recipes.TasksHandlerTests.java

@Test
public void testReset3() throws InterruptedException {
    log.info("testReset3 start");
    List<StateMachineContext<String, String>> childs = new ArrayList<StateMachineContext<String, String>>();
    DefaultStateMachineContext<String, String> context = new DefaultStateMachineContext<String, String>(childs,
            "ERROR", null, null, null);
    TestStateMachinePersist persist = new TestStateMachinePersist(context);
    TasksHandler handler = TasksHandler.builder().task("1", sleepRunnable()).task("2", sleepRunnable())
            .task("3", sleepRunnable()).persist(persist).build();

    TestListener listener = new TestListener();
    listener.reset(2, 0, 0);/*from w  w  w.  j av a2s.c  om*/
    StateMachine<String, String> machine = handler.getStateMachine();
    machine.addStateListener(listener);

    handler.resetFromPersistStore();

    log.info("testReset3 wait stateMachineStartedLatch");
    assertThat(listener.stateMachineStartedLatch.await(1, TimeUnit.SECONDS), is(true));

    log.info("testReset3 wait stateChangedLatch");
    assertThat(listener.stateChangedLatch.await(4, TimeUnit.SECONDS), is(true));
    assertThat(listener.stateChangedCount, is(2));
    assertThat(machine.getState().getIds(), contains(TasksHandler.STATE_READY));
}

From source file:org.springframework.statemachine.recipes.TasksHandlerTests.java

public void testReset4() throws InterruptedException {
    // TODO: automaticAction() is not executed when state is reset
    DefaultStateMachineContext<String, String> child = new DefaultStateMachineContext<String, String>(
            "AUTOMATIC", null, null, null);
    List<StateMachineContext<String, String>> childs = new ArrayList<StateMachineContext<String, String>>();
    childs.add(child);/*w ww  .ja v  a  2s .  com*/
    DefaultStateMachineContext<String, String> context = new DefaultStateMachineContext<String, String>(childs,
            "ERROR", null, null, null);
    TestStateMachinePersist persist = new TestStateMachinePersist(context);
    TasksHandler handler = TasksHandler.builder().task("1", sleepRunnable()).task("2", sleepRunnable())
            .task("3", sleepRunnable()).persist(persist).build();

    TestListener listener = new TestListener();
    listener.reset(2, 0, 0);
    StateMachine<String, String> machine = handler.getStateMachine();
    machine.addStateListener(listener);

    handler.resetFromPersistStore();

    assertThat(listener.stateMachineStartedLatch.await(1, TimeUnit.SECONDS), is(true));

    assertThat(listener.stateChangedLatch.await(4, TimeUnit.SECONDS), is(true));
    assertThat(listener.stateChangedCount, is(2));
    assertThat(machine.getState().getIds(), contains(TasksHandler.STATE_READY));
}

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

@Test
public void testTimerTransition() throws Exception {
    context.register(BaseConfig.class, Config2.class);
    context.refresh();//from  w  w w.j  av a 2 s  .  com

    TestAction testAction1 = context.getBean("testAction1", TestAction.class);
    TestAction testAction2 = context.getBean("testAction2", TestAction.class);
    TestAction testAction3 = context.getBean("testAction3", TestAction.class);
    TestAction testAction4 = context.getBean("testAction4", TestAction.class);

    @SuppressWarnings("unchecked")
    StateMachine<TestStates, TestEvents> machine = context
            .getBean(StateMachineSystemConstants.DEFAULT_ID_STATEMACHINE, StateMachine.class);
    TestListener listener = new TestListener();
    machine.addStateListener(listener);
    listener.reset(1);
    machine.start();
    assertThat(listener.stateChangedLatch.await(2, TimeUnit.SECONDS), is(true));
    assertThat(listener.stateChangedCount, is(1));
    assertThat(testAction2.stateContexts.size(), is(0));

    listener.reset(0, 1);
    machine.sendEvent(TestEvents.E1);
    assertThat(listener.transitionLatch.await(2, TimeUnit.SECONDS), is(true));
    assertThat(testAction1.onExecuteLatch.await(2, TimeUnit.SECONDS), is(true));
    assertThat(testAction1.stateContexts.size(), is(1));
    assertThat(testAction2.onExecuteLatch.await(2, TimeUnit.SECONDS), is(true));
    assertThat(testAction2.stateContexts.size(), is(1));

    listener.reset(0, 1);
    machine.sendEvent(TestEvents.E2);
    assertThat(listener.transitionLatch.await(2, TimeUnit.SECONDS), is(true));
    assertThat(testAction3.onExecuteLatch.await(2, TimeUnit.SECONDS), is(true));
    assertThat(testAction3.stateContexts.size(), is(1));

    // timer still fires but should not cause transition anymore
    // after we sleep and do next event
    int timedTriggered = testAction2.stateContexts.size();
    Thread.sleep(2000);
    assertThat(testAction2.stateContexts.size(), is(timedTriggered));

    listener.reset(0, 1);
    machine.sendEvent(TestEvents.E3);
    assertThat(listener.transitionLatch.await(2, TimeUnit.SECONDS), is(true));
    assertThat(testAction4.onExecuteLatch.await(2, TimeUnit.SECONDS), is(true));
    assertThat(testAction4.stateContexts.size(), is(1));
    assertThat(testAction2.stateContexts.size(), is(timedTriggered));
}

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

@Test
public void testStringStatesAndEvents() throws Exception {
    context.register(Config4.class);
    context.refresh();/*from  ww  w  .  j  a v a2 s.  co m*/
    assertTrue(context.containsBean(StateMachineSystemConstants.DEFAULT_ID_STATEMACHINE));
    @SuppressWarnings("unchecked")
    StateMachine<String, String> machine = context.getBean(StateMachineSystemConstants.DEFAULT_ID_STATEMACHINE,
            StateMachine.class);

    TestListener2 listener = new TestListener2();
    machine.addStateListener(listener);

    assertThat(machine, notNullValue());
    machine.start();
    listener.reset(1);
    machine.sendEvent(MessageBuilder.withPayload("E1").setHeader("foo", "jee1").build());
    assertThat(listener.stateChangedLatch.await(2, TimeUnit.SECONDS), is(true));
    assertThat(listener.stateChangedCount, is(1));
    assertThat(machine.getState().getIds(), containsInAnyOrder("S1"));
}