diff --git a/docs/src/reference/asciidoc/samples/data.json b/docs/src/reference/asciidoc/samples/data.json index 8fe62db4..b95e9d7f 100644 --- a/docs/src/reference/asciidoc/samples/data.json +++ b/docs/src/reference/asciidoc/samples/data.json @@ -36,7 +36,8 @@ "_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition", "source": "S1", "target": "S2", - "event": "E1" + "event": "E1", + "kind": "EXTERNAL" }, { "_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition", diff --git a/spring-statemachine-data/jpa/src/main/java/org/springframework/statemachine/data/jpa/JpaRepositoryTransition.java b/spring-statemachine-data/jpa/src/main/java/org/springframework/statemachine/data/jpa/JpaRepositoryTransition.java index 0df1a9b5..ea1cf817 100644 --- a/spring-statemachine-data/jpa/src/main/java/org/springframework/statemachine/data/jpa/JpaRepositoryTransition.java +++ b/spring-statemachine-data/jpa/src/main/java/org/springframework/statemachine/data/jpa/JpaRepositoryTransition.java @@ -26,6 +26,7 @@ import javax.persistence.Id; import javax.persistence.OneToMany; import org.springframework.statemachine.data.RepositoryTransition; +import org.springframework.statemachine.transition.TransitionKind; /** * JPA entity for transitions. @@ -44,10 +45,12 @@ public class JpaRepositoryTransition implements RepositoryTransition { private String source; private String target; private String event; + private TransitionKind kind; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) private Set actions; + /** * Instantiates a new jpa repository transition. */ @@ -139,4 +142,13 @@ public class JpaRepositoryTransition implements RepositoryTransition { public void setActions(Set actions) { this.actions = actions; } + + @Override + public TransitionKind getKind() { + return kind; + } + + public void setKind(TransitionKind kind) { + this.kind = kind; + } } diff --git a/spring-statemachine-data/jpa/src/test/java/org/springframework/statemachine/data/jpa/JpaRepositoryTests.java b/spring-statemachine-data/jpa/src/test/java/org/springframework/statemachine/data/jpa/JpaRepositoryTests.java index f39b3e6d..173c3e64 100644 --- a/spring-statemachine-data/jpa/src/test/java/org/springframework/statemachine/data/jpa/JpaRepositoryTests.java +++ b/spring-statemachine-data/jpa/src/test/java/org/springframework/statemachine/data/jpa/JpaRepositoryTests.java @@ -45,6 +45,7 @@ import org.springframework.statemachine.data.StateRepository; import org.springframework.statemachine.data.TransitionRepository; import org.springframework.statemachine.test.StateMachineTestPlan; import org.springframework.statemachine.test.StateMachineTestPlanBuilder; +import org.springframework.statemachine.transition.TransitionKind; public class JpaRepositoryTests extends AbstractJpaRepositoryTests { @@ -66,11 +67,13 @@ public class JpaRepositoryTests extends AbstractJpaRepositoryTests { JpaTransitionRepository transitionsRepository = context.getBean(JpaTransitionRepository.class); JpaRepositoryTransition transition = new JpaRepositoryTransition("S1", "S2", "E1"); + transition.setKind(TransitionKind.EXTERNAL); transitionsRepository.save(transition); JpaRepositoryTransition transition2 = transitionsRepository.findAll().iterator().next(); assertThat(transition2.getSource(), is("S1")); assertThat(transition2.getTarget(), is("S2")); assertThat(transition2.getEvent(), is("E1")); + assertThat(transition2.getKind(), is(TransitionKind.EXTERNAL)); context.close(); } diff --git a/spring-statemachine-data/jpa/src/test/resources/data2.json b/spring-statemachine-data/jpa/src/test/resources/data2.json index 2cdfb1d6..67d99447 100644 --- a/spring-statemachine-data/jpa/src/test/resources/data2.json +++ b/spring-statemachine-data/jpa/src/test/resources/data2.json @@ -18,12 +18,20 @@ "_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition", "source": "S1", "target": "S2", - "event": "E1" + "event": "E1", + "kind": "EXTERNAL" }, { "_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition", "source": "S2", "target": "S3", "event": "E2" + }, + { + "_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition", + "source": "S2", + "target": "S3", + "event": "E3", + "kind": "LOCAL" } ] diff --git a/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryStateMachineModelFactory.java b/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryStateMachineModelFactory.java index 50edfe50..25cf2bd1 100644 --- a/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryStateMachineModelFactory.java +++ b/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryStateMachineModelFactory.java @@ -160,7 +160,8 @@ public class RepositoryStateMachineModelFactory extends AbstractStateMachineMode } } - transitionData.add(new TransitionData<>(t.getSource(), t.getTarget(), t.getEvent(), actions, null, TransitionKind.EXTERNAL)); + TransitionKind kind = t.getKind(); + transitionData.add(new TransitionData<>(t.getSource(), t.getTarget(), t.getEvent(), actions, null, kind != null ? kind : TransitionKind.EXTERNAL)); } TransitionsData transitionsData = new TransitionsData<>(transitionData); diff --git a/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryTransition.java b/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryTransition.java index 0d6a566a..722f7031 100644 --- a/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryTransition.java +++ b/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryTransition.java @@ -17,6 +17,8 @@ package org.springframework.statemachine.data; import java.util.Set; +import org.springframework.statemachine.transition.TransitionKind; + /** * Generic interface representing transition entity. * @@ -59,4 +61,11 @@ public interface RepositoryTransition { * @return the actions */ Set getActions(); + + /** + * Gets the transition kind. + * + * @return the transition kind + */ + TransitionKind getKind(); } diff --git a/spring-statemachine-samples/datajpa/src/main/resources/data.json b/spring-statemachine-samples/datajpa/src/main/resources/data.json index 8fe62db4..b95e9d7f 100644 --- a/spring-statemachine-samples/datajpa/src/main/resources/data.json +++ b/spring-statemachine-samples/datajpa/src/main/resources/data.json @@ -36,7 +36,8 @@ "_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition", "source": "S1", "target": "S2", - "event": "E1" + "event": "E1", + "kind": "EXTERNAL" }, { "_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",