diff --git a/spring-statemachine-recipes/src/main/java/org/springframework/statemachine/recipes/persist/PersistStateMachineHandler.java b/spring-statemachine-recipes/src/main/java/org/springframework/statemachine/recipes/persist/PersistStateMachineHandler.java index 2791bf79..07749500 100644 --- a/spring-statemachine-recipes/src/main/java/org/springframework/statemachine/recipes/persist/PersistStateMachineHandler.java +++ b/spring-statemachine-recipes/src/main/java/org/springframework/statemachine/recipes/persist/PersistStateMachineHandler.java @@ -69,15 +69,16 @@ public class PersistStateMachineHandler extends LifecycleObjectSupport { * * @param event the event * @param state the state + * @return true if event was accepted */ - public void handleEventWithState(Message event, String state) { + public boolean handleEventWithState(Message event, String state) { stateMachine.stop(); List> withAllRegions = stateMachine.getStateMachineAccessor().withAllRegions(); for (StateMachineAccess a : withAllRegions) { a.resetStateMachine(new DefaultStateMachineContext(state, null, null, null)); } stateMachine.start(); - stateMachine.sendEvent(event); + return stateMachine.sendEvent(event); } /** diff --git a/spring-statemachine-recipes/src/test/java/org/springframework/statemachine/recipes/PersistStateMachineHandlerTests.java b/spring-statemachine-recipes/src/test/java/org/springframework/statemachine/recipes/PersistStateMachineHandlerTests.java index 6ca6efe7..aeee68be 100644 --- a/spring-statemachine-recipes/src/test/java/org/springframework/statemachine/recipes/PersistStateMachineHandlerTests.java +++ b/spring-statemachine-recipes/src/test/java/org/springframework/statemachine/recipes/PersistStateMachineHandlerTests.java @@ -36,7 +36,7 @@ import org.springframework.statemachine.transition.Transition; public class PersistStateMachineHandlerTests { @Test - public void testStateChangeViaPersist() throws Exception { + public void testAcceptedStateChangeViaPersist() throws Exception { StateMachine stateMachine = buildTestStateMachine(); PersistStateMachineHandler handler = new PersistStateMachineHandler(stateMachine); @@ -47,11 +47,30 @@ public class PersistStateMachineHandlerTests { handler.addPersistStateChangeListener(listener); Message event = MessageBuilder.withPayload("E2").build(); - handler.handleEventWithState(event, "S1"); + boolean accepted = handler.handleEventWithState(event, "S1"); + assertThat(accepted, is(true)); assertThat(listener.latch.await(1, TimeUnit.SECONDS), is(true)); assertThat(stateMachine.getState().getIds(), containsInAnyOrder("S2")); } + @Test + public void testNotAcceptedStateChangeViaPersist() throws Exception { + StateMachine stateMachine = buildTestStateMachine(); + + PersistStateMachineHandler handler = new PersistStateMachineHandler(stateMachine); + handler.afterPropertiesSet(); + handler.start(); + + TestPersistStateChangeListener listener = new TestPersistStateChangeListener(); + handler.addPersistStateChangeListener(listener); + + Message event = MessageBuilder.withPayload("E1").build(); + boolean accepted = handler.handleEventWithState(event, "S1"); + assertThat(accepted, is(false)); + assertThat(listener.latch.await(1, TimeUnit.SECONDS), is(false)); + assertThat(stateMachine.getState().getIds(), containsInAnyOrder("S1")); + } + private static class TestPersistStateChangeListener implements PersistStateChangeListener { CountDownLatch latch = new CountDownLatch(1);