diff --git a/docs/src/reference/asciidoc/sm.adoc b/docs/src/reference/asciidoc/sm.adoc index ca8eccf3..b6fabc81 100644 --- a/docs/src/reference/asciidoc/sm.adoc +++ b/docs/src/reference/asciidoc/sm.adoc @@ -265,6 +265,7 @@ Otherwise configuration is ill-formed. include::samples/DocsConfigurationSampleTests.java[tags=snippetS] ---- +[[statemachine-config-states-junction]] ==== Junction State Junction needs to be defined in both states and transitions to work properly. Mark particular state as choice state by using `junction()` @@ -325,6 +326,21 @@ states from a regions. include::samples/DocsConfigurationSampleTests.java[tags=snippetU] ---- +[[statemachine-config-states-exitentry]] +==== Exit/Entry Point States +Exit and Entry Points can be used to do more controlled exit and entry +from and into a submachines. + +[source,java,indent=0] +---- +include::samples/DocsConfigurationSampleTests.java[tags=snippetUU] +---- + +As shown above you need to mark particular states as _exit_ and +_entry_ states. Then you create a normal transitions into those states +and also specify _withExit()_ and _withEntry()_ where those states +will exit and entry respectively. + [[statemachine-config-commonsettings]] === Configuring Common Settings Some of a common state machine configuration can be set via a diff --git a/docs/src/reference/asciidoc/whatsnew.adoc b/docs/src/reference/asciidoc/whatsnew.adoc index 2861fdc1..734f5c77 100644 --- a/docs/src/reference/asciidoc/whatsnew.adoc +++ b/docs/src/reference/asciidoc/whatsnew.adoc @@ -16,6 +16,8 @@ interoperability with web applications. <>. * Configuration model classes are now a public API. * New features in timer based events. +* New _Junction_ pseudostate <>. +* New _Exit Point_ and _Entry Point_ pseudostates <>. * Configuration model verifier. * New samples, <>, <>. * UI modeling support using Eclipse Papyrus, <>. diff --git a/spring-statemachine-core/src/test/java/org/springframework/statemachine/docs/DocsConfigurationSampleTests.java b/spring-statemachine-core/src/test/java/org/springframework/statemachine/docs/DocsConfigurationSampleTests.java index 6f77fb52..99c03e6a 100644 --- a/spring-statemachine-core/src/test/java/org/springframework/statemachine/docs/DocsConfigurationSampleTests.java +++ b/spring-statemachine-core/src/test/java/org/springframework/statemachine/docs/DocsConfigurationSampleTests.java @@ -753,6 +753,54 @@ public class DocsConfigurationSampleTests extends AbstractStateMachineTests { } // end::snippetU[] +// tag::snippetUU[] + @Configuration + @EnableStateMachine + static class Config21 extends StateMachineConfigurerAdapter { + + @Override + public void configure(StateMachineStateConfigurer states) + throws Exception { + states + .withStates() + .initial("S1") + .state("S2") + .state("S3") + .and() + .withStates() + .parent("S2") + .initial("S21") + .entry("S2ENTRY") + .exit("S2EXIT") + .state("S22"); + } + + @Override + public void configure(StateMachineTransitionConfigurer transitions) + throws Exception { + transitions + .withExternal() + .source("S1").target("S2") + .event("E1") + .and() + .withExternal() + .source("S1").target("S2ENTRY") + .event("ENTRY") + .and() + .withExternal() + .source("S22").target("S2EXIT") + .event("EXIT") + .and() + .withEntry() + .source("S2ENTRY").target("S22") + .and() + .withExit() + .source("S2EXIT").target("S3"); + } + } + +// end::snippetUU[] + @Configuration @EnableStateMachine public class Config16