@@ -17,6 +17,7 @@ package org.springframework.statemachine.data.jpa;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.GeneratedValue;
|
||||
@@ -63,6 +64,9 @@ public class JpaRepositoryState extends RepositoryState {
|
||||
@OneToMany(fetch = FetchType.EAGER)
|
||||
private Set<JpaRepositoryAction> exitActions;
|
||||
|
||||
@ElementCollection(fetch = FetchType.EAGER, targetClass = String.class)
|
||||
private Set<String> deferredEvents;
|
||||
|
||||
/**
|
||||
* Instantiates a new jpa repository state.
|
||||
*/
|
||||
@@ -214,10 +218,20 @@ public class JpaRepositoryState extends RepositoryState {
|
||||
this.exitActions = exitActions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getDeferredEvents() {
|
||||
return deferredEvents;
|
||||
}
|
||||
|
||||
public void setDeferredEvents(Set<String> deferredEvents) {
|
||||
this.deferredEvents = deferredEvents;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "JpaRepositoryState [id=" + id + ", machineId=" + machineId + ", parentState=" + parentState + ", state=" + state
|
||||
+ ", initial=" + initial + ", stateActions=" + stateActions + ", entryActions=" + entryActions + ", exitActions="
|
||||
+ exitActions + "]";
|
||||
return "JpaRepositoryState [id=" + id + ", machineId=" + machineId + ", state=" + state + ", region=" + region
|
||||
+ ", initial=" + initial + ", kind=" + kind + ", parentState=" + parentState + ", stateActions="
|
||||
+ stateActions + ", entryActions=" + entryActions + ", exitActions=" + exitActions + ", deferredEvents="
|
||||
+ deferredEvents + "]";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -496,6 +496,25 @@ public class JpaRepositoryTests extends AbstractJpaRepositoryTests {
|
||||
plan.test();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void testMachine12() throws Exception {
|
||||
context.register(Config12.class, FactoryConfig.class);
|
||||
context.refresh();
|
||||
StateMachineFactory<String, String> stateMachineFactory = context.getBean(StateMachineFactory.class);
|
||||
StateMachine<String, String> stateMachine = stateMachineFactory.getStateMachine();
|
||||
|
||||
StateMachineTestPlan<String, String> plan =
|
||||
StateMachineTestPlanBuilder.<String, String>builder()
|
||||
.stateMachine(stateMachine)
|
||||
.step().expectStates("READY").and()
|
||||
.step().sendEvent("E3").expectStates("S3").and()
|
||||
.step().sendEvent("E1").expectStates("S3").and()
|
||||
.step().sendEvent("E6").expectStates("S1").and()
|
||||
.build();
|
||||
plan.test();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPopulate1() {
|
||||
context.register(Config2.class);
|
||||
@@ -699,6 +718,17 @@ public class JpaRepositoryTests extends AbstractJpaRepositoryTests {
|
||||
}
|
||||
}
|
||||
|
||||
@EnableAutoConfiguration
|
||||
static class Config12 {
|
||||
|
||||
@Bean
|
||||
public StateMachineJackson2RepositoryPopulatorFactoryBean jackson2RepositoryPopulatorFactoryBean() {
|
||||
StateMachineJackson2RepositoryPopulatorFactoryBean factoryBean = new StateMachineJackson2RepositoryPopulatorFactoryBean();
|
||||
factoryBean.setResources(new Resource[]{new ClassPathResource("data12.json")});
|
||||
return factoryBean;
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@EnableStateMachineFactory
|
||||
public static class FactoryConfig extends StateMachineConfigurerAdapter<String, String> {
|
||||
|
||||
60
spring-statemachine-data/jpa/src/test/resources/data12.json
Normal file
60
spring-statemachine-data/jpa/src/test/resources/data12.json
Normal file
@@ -0,0 +1,60 @@
|
||||
[
|
||||
{
|
||||
"@id": "1",
|
||||
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
|
||||
"initial": true,
|
||||
"state": "READY"
|
||||
},
|
||||
{
|
||||
"@id": "2",
|
||||
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
|
||||
"state": "S1"
|
||||
},
|
||||
{
|
||||
"@id": "3",
|
||||
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
|
||||
"state": "S2"
|
||||
},
|
||||
{
|
||||
"@id": "4",
|
||||
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
|
||||
"state": "S3",
|
||||
"deferredEvents": ["E1", "E2"]
|
||||
},
|
||||
{
|
||||
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
|
||||
"source": "1",
|
||||
"target": "2",
|
||||
"event": "E1"
|
||||
},
|
||||
{
|
||||
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
|
||||
"source": "1",
|
||||
"target": "3",
|
||||
"event": "E2"
|
||||
},
|
||||
{
|
||||
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
|
||||
"source": "1",
|
||||
"target": "4",
|
||||
"event": "E3"
|
||||
},
|
||||
{
|
||||
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
|
||||
"source": "4",
|
||||
"target": "2",
|
||||
"event": "E4"
|
||||
},
|
||||
{
|
||||
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
|
||||
"source": "4",
|
||||
"target": "3",
|
||||
"event": "E5"
|
||||
},
|
||||
{
|
||||
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
|
||||
"source": "4",
|
||||
"target": "1",
|
||||
"event": "E6"
|
||||
}
|
||||
]
|
||||
@@ -89,4 +89,11 @@ public abstract class RepositoryState extends BaseRepositoryEntity {
|
||||
* @return the pseudo state kind
|
||||
*/
|
||||
public abstract PseudoStateKind getKind();
|
||||
|
||||
/**
|
||||
* Gets the deferred events.
|
||||
*
|
||||
* @return the deferred events
|
||||
*/
|
||||
public abstract Set<String> getDeferredEvents();
|
||||
}
|
||||
|
||||
@@ -155,6 +155,7 @@ public class RepositoryStateMachineModelFactory extends AbstractStateMachineMode
|
||||
stateData.setEnd(true);
|
||||
}
|
||||
}
|
||||
stateData.setDeferred(s.getDeferredEvents());
|
||||
stateDatas.add(stateData);
|
||||
}
|
||||
StatesData<String, String> statesData = new StatesData<>(stateDatas);
|
||||
|
||||
Reference in New Issue
Block a user