PersistStateMachineHandler returning event outcome
This commit is contained in:
committed by
Janne Valkealahti
parent
d55a7ab802
commit
5b715d0492
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user