From 3cc33a6fefc99222823128e9c696eaa087e3d97f Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Sun, 9 Oct 2016 17:04:36 +0100 Subject: [PATCH] Fix parent state ref - For RepositoryState, its parent state is now defined as RepositoryState as well allowing to reference from a json files. - Relates to #262 --- .../statemachine/data/jpa/JpaRepositoryState.java | 13 ++++++++----- .../jpa/src/test/resources/data3.json | 4 ++-- .../statemachine/data/RepositoryState.java | 2 +- .../data/RepositoryStateMachineModelFactory.java | 4 +++- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/spring-statemachine-data/jpa/src/main/java/org/springframework/statemachine/data/jpa/JpaRepositoryState.java b/spring-statemachine-data/jpa/src/main/java/org/springframework/statemachine/data/jpa/JpaRepositoryState.java index d39fa65e..eb6ef79f 100644 --- a/spring-statemachine-data/jpa/src/main/java/org/springframework/statemachine/data/jpa/JpaRepositoryState.java +++ b/spring-statemachine-data/jpa/src/main/java/org/springframework/statemachine/data/jpa/JpaRepositoryState.java @@ -24,6 +24,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; +import javax.persistence.OneToOne; import org.springframework.statemachine.data.RepositoryState; @@ -45,10 +46,12 @@ public class JpaRepositoryState extends RepositoryState { private long id; private String machineId; - private String parentState; private String state; private boolean initial; + @OneToOne(fetch = FetchType.EAGER) + private JpaRepositoryState parentState; + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) private Set stateActions; @@ -102,7 +105,7 @@ public class JpaRepositoryState extends RepositoryState { * @param state the state * @param initial the initial */ - public JpaRepositoryState(String machineId, String parentState, String state, boolean initial) { + public JpaRepositoryState(String machineId, JpaRepositoryState parentState, String state, boolean initial) { this(machineId, parentState, state, initial, null, null, null); } @@ -117,7 +120,7 @@ public class JpaRepositoryState extends RepositoryState { * @param entryActions the entry actions * @param exitActions the exit actions */ - public JpaRepositoryState(String machineId, String parentState, String state, boolean initial, Set stateActions, + public JpaRepositoryState(String machineId, JpaRepositoryState parentState, String state, boolean initial, Set stateActions, Set entryActions, Set exitActions) { this.machineId = machineId; this.parentState = parentState; @@ -138,11 +141,11 @@ public class JpaRepositoryState extends RepositoryState { } @Override - public String getParentState() { + public JpaRepositoryState getParentState() { return parentState; } - public void setParentState(String parentState) { + public void setParentState(JpaRepositoryState parentState) { this.parentState = parentState; } diff --git a/spring-statemachine-data/jpa/src/test/resources/data3.json b/spring-statemachine-data/jpa/src/test/resources/data3.json index cf988f89..4c311a04 100644 --- a/spring-statemachine-data/jpa/src/test/resources/data3.json +++ b/spring-statemachine-data/jpa/src/test/resources/data3.json @@ -15,14 +15,14 @@ "@id": "3", "_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState", "initial": true, - "parentState": "S2", + "parentState": "2", "state": "S20" }, { "@id": "4", "_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState", "initial": false, - "parentState": "S2", + "parentState": "2", "state": "S21" }, { diff --git a/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryState.java b/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryState.java index 0ecd29b1..95ad279f 100644 --- a/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryState.java +++ b/spring-statemachine-data/src/main/java/org/springframework/statemachine/data/RepositoryState.java @@ -30,7 +30,7 @@ public abstract class RepositoryState extends BaseRepositoryEntity { * * @return the parent state */ - public abstract String getParentState(); + public abstract RepositoryState getParentState(); /** * Gets the machine id. 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 fe9ca78b..59c78c89 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 @@ -132,7 +132,9 @@ public class RepositoryStateMachineModelFactory extends AbstractStateMachineMode } } - StateData stateData = new StateData(s.getParentState(), null, s.getState(), s.isInitial()); + RepositoryState parentState = s.getParentState(); + StateData stateData = new StateData(parentState != null ? parentState.getState() : null, null, + s.getState(), s.isInitial()); stateData.setStateActions(stateActions); stateData.setEntryActions(entryActions); stateData.setExitActions(exitActions);