diff --git a/docs/src/reference/asciidoc/images/sm-repository-showcasemachine.png b/docs/src/reference/asciidoc/images/sm-repository-showcasemachine.png new file mode 100644 index 00000000..fbc2256b Binary files /dev/null and b/docs/src/reference/asciidoc/images/sm-repository-showcasemachine.png differ diff --git a/docs/src/reference/asciidoc/sm.adoc b/docs/src/reference/asciidoc/sm.adoc index 8b4dee45..8454c4b9 100644 --- a/docs/src/reference/asciidoc/sm.adoc +++ b/docs/src/reference/asciidoc/sm.adoc @@ -2228,6 +2228,9 @@ image::images/sm-repository-simplemachine.png[scaledwidth="100%", title="SimpleM [[image-sm-repository-simplesubmachine]] image::images/sm-repository-simplesubmachine.png[scaledwidth="100%", title="SimpleSubMachine"] +[[image-sm-repository-showcasemachine]] +image::images/sm-repository-showcasemachine.png[scaledwidth="100%", title="ShowcaseMachine"] + [[sm-repository-jpa]] === JPA Actual _Repository_ implementations for a _JPA_ are @@ -2253,6 +2256,37 @@ This is equivalent to machine shown in include::samples/DocsJpaRepositorySampleTests1.java[tags=snippetB] ---- +This is equivalent to machine shown in +<>. + +First you access all repositories. + +[source,java,indent=0] +---- +include::samples/DocsJpaRepositorySampleTests1.java[tags=snippetC1] +---- + +Create actions and guards. + +[source,java,indent=0] +---- +include::samples/DocsJpaRepositorySampleTests1.java[tags=snippetC2] +---- + +Create states. + +[source,java,indent=0] +---- +include::samples/DocsJpaRepositorySampleTests1.java[tags=snippetC3] +---- + +Finally create transitions. + +[source,java,indent=0] +---- +include::samples/DocsJpaRepositorySampleTests1.java[tags=snippetC4] +---- + Complete example can be found from sample <>. This example is also showing how repository can be pre-populated from existing _json_ file having a diff --git a/spring-statemachine-data/jpa/src/test/java/org/springframework/statemachine/data/jpa/docs/DocsJpaRepositorySampleTests1.java b/spring-statemachine-data/jpa/src/test/java/org/springframework/statemachine/data/jpa/docs/DocsJpaRepositorySampleTests1.java index 8ace69a5..87141894 100644 --- a/spring-statemachine-data/jpa/src/test/java/org/springframework/statemachine/data/jpa/docs/DocsJpaRepositorySampleTests1.java +++ b/spring-statemachine-data/jpa/src/test/java/org/springframework/statemachine/data/jpa/docs/DocsJpaRepositorySampleTests1.java @@ -15,11 +15,19 @@ */ package org.springframework.statemachine.data.jpa.docs; +import java.util.Arrays; +import java.util.HashSet; + import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.statemachine.data.ActionRepository; +import org.springframework.statemachine.data.GuardRepository; import org.springframework.statemachine.data.StateRepository; import org.springframework.statemachine.data.TransitionRepository; +import org.springframework.statemachine.data.jpa.JpaRepositoryAction; +import org.springframework.statemachine.data.jpa.JpaRepositoryGuard; import org.springframework.statemachine.data.jpa.JpaRepositoryState; import org.springframework.statemachine.data.jpa.JpaRepositoryTransition; +import org.springframework.statemachine.transition.TransitionKind; public class DocsJpaRepositorySampleTests1 { @@ -83,4 +91,119 @@ public class DocsJpaRepositorySampleTests1 { } // end::snippetB[] } + + public static class Config3 { +// tag::snippetC1[] + @Autowired + StateRepository stateRepository; + + @Autowired + TransitionRepository transitionRepository; + + @Autowired + ActionRepository actionRepository; + + @Autowired + GuardRepository guardRepository; +// end::snippetC1[] + + void addConfig() { +// tag::snippetC2[] + JpaRepositoryGuard foo0Guard = new JpaRepositoryGuard(); + foo0Guard.setName("foo0Guard"); + + JpaRepositoryGuard foo1Guard = new JpaRepositoryGuard(); + foo1Guard.setName("foo1Guard"); + + JpaRepositoryAction fooAction = new JpaRepositoryAction(); + fooAction.setName("fooAction"); + + guardRepository.save(foo0Guard); + guardRepository.save(foo1Guard); + actionRepository.save(fooAction); +// end::snippetC2[] + +// tag::snippetC3[] + JpaRepositoryState stateS0 = new JpaRepositoryState("S0", true); + stateS0.setInitialAction(fooAction); + JpaRepositoryState stateS1 = new JpaRepositoryState("S1", true); + stateS1.setParentState(stateS0); + JpaRepositoryState stateS11 = new JpaRepositoryState("S11", true); + stateS11.setParentState(stateS1); + JpaRepositoryState stateS12 = new JpaRepositoryState("S12"); + stateS12.setParentState(stateS1); + JpaRepositoryState stateS2 = new JpaRepositoryState("S2"); + stateS2.setParentState(stateS0); + JpaRepositoryState stateS21 = new JpaRepositoryState("S21", true); + stateS21.setParentState(stateS2); + JpaRepositoryState stateS211 = new JpaRepositoryState("S211", true); + stateS211.setParentState(stateS21); + JpaRepositoryState stateS212 = new JpaRepositoryState("S212"); + stateS212.setParentState(stateS21); + + stateRepository.save(stateS0); + stateRepository.save(stateS1); + stateRepository.save(stateS11); + stateRepository.save(stateS12); + stateRepository.save(stateS2); + stateRepository.save(stateS21); + stateRepository.save(stateS211); + stateRepository.save(stateS212); +// end::snippetC3[] + +// tag::snippetC4[] + JpaRepositoryTransition transitionS1ToS1 = new JpaRepositoryTransition(stateS1, stateS1, "A"); + transitionS1ToS1.setGuard(foo1Guard); + + JpaRepositoryTransition transitionS1ToS11 = new JpaRepositoryTransition(stateS1, stateS11, "B"); + JpaRepositoryTransition transitionS21ToS211 = new JpaRepositoryTransition(stateS21, stateS211, "B"); + JpaRepositoryTransition transitionS1ToS2 = new JpaRepositoryTransition(stateS1, stateS2, "C"); + JpaRepositoryTransition transitionS1ToS0 = new JpaRepositoryTransition(stateS1, stateS0, "D"); + JpaRepositoryTransition transitionS211ToS21 = new JpaRepositoryTransition(stateS211, stateS21, "D"); + JpaRepositoryTransition transitionS0ToS211 = new JpaRepositoryTransition(stateS0, stateS211, "E"); + JpaRepositoryTransition transitionS1ToS211 = new JpaRepositoryTransition(stateS1, stateS211, "F"); + JpaRepositoryTransition transitionS2ToS21 = new JpaRepositoryTransition(stateS2, stateS21, "F"); + JpaRepositoryTransition transitionS11ToS211 = new JpaRepositoryTransition(stateS11, stateS211, "G"); + + JpaRepositoryTransition transitionS0 = new JpaRepositoryTransition(stateS0, stateS0, "H"); + transitionS0.setKind(TransitionKind.INTERNAL); + transitionS0.setGuard(foo0Guard); + transitionS0.setActions(new HashSet<>(Arrays.asList(fooAction))); + + JpaRepositoryTransition transitionS1 = new JpaRepositoryTransition(stateS1, stateS1, "H"); + transitionS1.setKind(TransitionKind.INTERNAL); + + JpaRepositoryTransition transitionS2 = new JpaRepositoryTransition(stateS2, stateS2, "H"); + transitionS2.setKind(TransitionKind.INTERNAL); + transitionS2.setGuard(foo1Guard); + transitionS2.setActions(new HashSet<>(Arrays.asList(fooAction))); + + JpaRepositoryTransition transitionS11ToS12 = new JpaRepositoryTransition(stateS11, stateS12, "I"); + JpaRepositoryTransition transitionS12ToS212 = new JpaRepositoryTransition(stateS12, stateS212, "I"); + JpaRepositoryTransition transitionS211ToS12 = new JpaRepositoryTransition(stateS211, stateS12, "I"); + + JpaRepositoryTransition transitionS11 = new JpaRepositoryTransition(stateS11, stateS11, "J"); + JpaRepositoryTransition transitionS2ToS1 = new JpaRepositoryTransition(stateS2, stateS1, "K"); + + transitionRepository.save(transitionS1ToS1); + transitionRepository.save(transitionS1ToS11); + transitionRepository.save(transitionS21ToS211); + transitionRepository.save(transitionS1ToS2); + transitionRepository.save(transitionS1ToS0); + transitionRepository.save(transitionS211ToS21); + transitionRepository.save(transitionS0ToS211); + transitionRepository.save(transitionS1ToS211); + transitionRepository.save(transitionS2ToS21); + transitionRepository.save(transitionS11ToS211); + transitionRepository.save(transitionS0); + transitionRepository.save(transitionS1); + transitionRepository.save(transitionS2); + transitionRepository.save(transitionS11ToS12); + transitionRepository.save(transitionS12ToS212); + transitionRepository.save(transitionS211ToS12); + transitionRepository.save(transitionS11); + transitionRepository.save(transitionS2ToS1); +// end::snippetC4[] + } + } }