diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/AbstractState.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/AbstractState.java index 36a461de..e29b2485 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/AbstractState.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/AbstractState.java @@ -234,6 +234,11 @@ public abstract class AbstractState extends LifecycleObjectSupport impleme return entryActions; } + @Override + public Collection> getStateActions() { + return stateActions; + } + @Override public Collection> getExitActions() { return exitActions; diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/State.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/State.java index 03e3472d..4013eb63 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/State.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/state/State.java @@ -108,6 +108,13 @@ public interface State { */ Collection> getEntryActions(); + /** + * Gets {@link Action}s executed once in this state. + * + * @return the state actions + */ + Collection> getStateActions(); + /** * Gets {@link Action}s executed exiting from this state. * diff --git a/spring-statemachine-core/src/test/java/org/springframework/statemachine/AbstractStateMachineTests.java b/spring-statemachine-core/src/test/java/org/springframework/statemachine/AbstractStateMachineTests.java index 59c66f0e..9c9467c7 100644 --- a/spring-statemachine-core/src/test/java/org/springframework/statemachine/AbstractStateMachineTests.java +++ b/spring-statemachine-core/src/test/java/org/springframework/statemachine/AbstractStateMachineTests.java @@ -159,6 +159,23 @@ public abstract class AbstractStateMachineTests { } + public static class TestStateAction extends AbstractTestAction { + + public TestStateAction() { + super(); + } + + public TestStateAction(String message) { + super(message); + } + + @Override + public String toString() { + return "TestStateAction [message=" + message + "]"; + } + + } + public static class TestAction extends AbstractTestAction { } diff --git a/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurerTests.java b/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurerTests.java index ab85ec25..7e2cc310 100644 --- a/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurerTests.java +++ b/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/configurers/DefaultStateConfigurerTests.java @@ -27,6 +27,7 @@ import org.junit.Test; import org.springframework.statemachine.AbstractStateMachineTests.TestEntryAction; import org.springframework.statemachine.AbstractStateMachineTests.TestEvents; import org.springframework.statemachine.AbstractStateMachineTests.TestExitAction; +import org.springframework.statemachine.AbstractStateMachineTests.TestStateAction; import org.springframework.statemachine.AbstractStateMachineTests.TestStates; import org.springframework.statemachine.action.Action; import org.springframework.statemachine.config.builders.StateMachineStateBuilder; @@ -97,6 +98,7 @@ public class DefaultStateConfigurerTests { assertThat(builder.data.iterator().next().getState(), is(TestStates.S1)); assertThat(builder.data.iterator().next().getEntryActions(), nullValue()); + assertThat(builder.data.iterator().next().getStateActions(), nullValue()); assertThat(builder.data.iterator().next().getExitActions(), notNullValue()); } @@ -113,9 +115,27 @@ public class DefaultStateConfigurerTests { assertThat(builder.data.iterator().next().getState(), is(TestStates.S2)); assertThat(builder.data.iterator().next().getExitActions(), nullValue()); + assertThat(builder.data.iterator().next().getStateActions(), nullValue()); assertThat(builder.data.iterator().next().getEntryActions(), notNullValue()); } + @Test + public void testStateActions() throws Exception { + Collection> stateActions = Arrays.asList(testStateAction()); + + DefaultStateConfigurer configurer = new DefaultStateConfigurer(); + TestStateMachineStateBuilder builder = new TestStateMachineStateBuilder(); + configurer.state(TestStates.S2, stateActions); + configurer.configure(builder); + assertThat(builder.data, notNullValue()); + assertThat(builder.data.size(), is(1)); + + assertThat(builder.data.iterator().next().getState(), is(TestStates.S2)); + assertThat(builder.data.iterator().next().getExitActions(), nullValue()); + assertThat(builder.data.iterator().next().getStateActions(), notNullValue()); + assertThat(builder.data.iterator().next().getEntryActions(), nullValue()); + } + @Test public void testEndStateNoState() throws Exception { DefaultStateConfigurer configurer = new DefaultStateConfigurer(); @@ -169,4 +189,7 @@ public class DefaultStateConfigurerTests { return new TestExitAction(); } + private Action testStateAction() { + return new TestStateAction(); + } }