PersistStateMachineHandler returning event outcome

This commit is contained in:
Fabio Falci
2015-11-05 16:36:36 +00:00
committed by Janne Valkealahti
parent d55a7ab802
commit 5b715d0492
2 changed files with 24 additions and 4 deletions

View File

@@ -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<String> event, String state) {
public boolean handleEventWithState(Message<String> event, String state) {
stateMachine.stop();
List<StateMachineAccess<String, String>> withAllRegions = stateMachine.getStateMachineAccessor().withAllRegions();
for (StateMachineAccess<String, String> a : withAllRegions) {
a.resetStateMachine(new DefaultStateMachineContext<String, String>(state, null, null, null));
}
stateMachine.start();
stateMachine.sendEvent(event);
return stateMachine.sendEvent(event);
}
/**

View File

@@ -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<String,String> stateMachine = buildTestStateMachine();
PersistStateMachineHandler handler = new PersistStateMachineHandler(stateMachine);
@@ -47,11 +47,30 @@ public class PersistStateMachineHandlerTests {
handler.addPersistStateChangeListener(listener);
Message<String> 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<String,String> stateMachine = buildTestStateMachine();
PersistStateMachineHandler handler = new PersistStateMachineHandler(stateMachine);
handler.afterPropertiesSet();
handler.start();
TestPersistStateChangeListener listener = new TestPersistStateChangeListener();
handler.addPersistStateChangeListener(listener);
Message<String> 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);