Add support for join/fork states

- Adding join/fork state construction
- Relates to #262
This commit is contained in:
Janne Valkealahti
2016-10-18 08:11:10 +01:00
parent 79f0280990
commit 36a87493f2
4 changed files with 242 additions and 1 deletions

View File

@@ -443,6 +443,43 @@ public class JpaRepositoryTests extends AbstractJpaRepositoryTests {
plan.test();
}
@SuppressWarnings("unchecked")
@Test
public void testMachine10() throws Exception {
context.register(Config10.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("SI").and()
.step().sendEvent("E1").expectStates("S2", "S21", "S31").and()
.build();
plan.test();
}
@SuppressWarnings("unchecked")
@Test
public void testMachine11() throws Exception {
context.register(Config11.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("SI").and()
.step().sendEvent("E1").expectStates("S2", "S20", "S30").and()
.step().sendEvent("E2").expectStates("S2", "S21", "S30").and()
.step().sendEvent("E3").expectStates("S4").and()
.step().sendEvent("E4").expectStates("SI").and()
.build();
plan.test();
}
@Test
public void testPopulate1() {
context.register(Config2.class);
@@ -624,6 +661,28 @@ public class JpaRepositoryTests extends AbstractJpaRepositoryTests {
}
}
@EnableAutoConfiguration
static class Config10 {
@Bean
public StateMachineJackson2RepositoryPopulatorFactoryBean jackson2RepositoryPopulatorFactoryBean() {
StateMachineJackson2RepositoryPopulatorFactoryBean factoryBean = new StateMachineJackson2RepositoryPopulatorFactoryBean();
factoryBean.setResources(new Resource[]{new ClassPathResource("data10.json")});
return factoryBean;
}
}
@EnableAutoConfiguration
static class Config11 {
@Bean
public StateMachineJackson2RepositoryPopulatorFactoryBean jackson2RepositoryPopulatorFactoryBean() {
StateMachineJackson2RepositoryPopulatorFactoryBean factoryBean = new StateMachineJackson2RepositoryPopulatorFactoryBean();
factoryBean.setResources(new Resource[]{new ClassPathResource("data11.json")});
return factoryBean;
}
}
@Configuration
@EnableStateMachineFactory
public static class FactoryConfig extends StateMachineConfigurerAdapter<String, String> {

View File

@@ -0,0 +1,71 @@
[
{
"@id": "1",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"initial": true,
"state": "SI"
},
{
"@id": "2",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"state": "S1",
"kind": "FORK"
},
{
"@id": "3",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"state": "S2"
},
{
"@id": "4",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"state": "SF",
"kind": "END"
},
{
"@id": "5",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"initial": true,
"region": "r2",
"parentState": "3",
"state": "S20"
},
{
"@id": "6",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"region": "r2",
"parentState": "3",
"state": "S21"
},
{
"@id": "7",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"initial": true,
"region": "r3",
"parentState": "3",
"state": "S30"
},
{
"@id": "8",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"region": "r3",
"parentState": "3",
"state": "S31"
},
{
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
"source": "1",
"target": "2",
"event": "E1"
},
{
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
"source": "2",
"target": "6"
},
{
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
"source": "2",
"target": "8"
}
]

View File

@@ -0,0 +1,93 @@
[
{
"@id": "1",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"initial": true,
"state": "SI"
},
{
"@id": "2",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"state": "S2"
},
{
"@id": "3",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"state": "S3",
"kind": "JOIN"
},
{
"@id": "4",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"state": "S4"
},
{
"@id": "5",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"initial": true,
"region": "r2",
"parentState": "2",
"state": "S20"
},
{
"@id": "6",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"region": "r2",
"parentState": "2",
"state": "S21"
},
{
"@id": "7",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"initial": true,
"region": "r3",
"parentState": "2",
"state": "S30"
},
{
"@id": "8",
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryState",
"region": "r3",
"parentState": "2",
"state": "S31"
},
{
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
"source": "1",
"target": "2",
"event": "E1"
},
{
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
"source": "5",
"target": "6",
"event": "E2"
},
{
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
"source": "7",
"target": "8",
"event": "E3"
},
{
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
"source": "7",
"target": "3"
},
{
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
"source": "8",
"target": "3"
},
{
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
"source": "3",
"target": "4"
},
{
"_class": "org.springframework.statemachine.data.jpa.JpaRepositoryTransition",
"source": "4",
"target": "1",
"event": "E4"
}
]