List of usage examples for org.springframework.statemachine StateMachine addStateListener
void addStateListener(StateMachineListener<S, E> listener);
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")); }