diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/AbstractStateMachineFactory.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/AbstractStateMachineFactory.java index 34cfdd27..5ad70845 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/AbstractStateMachineFactory.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/AbstractStateMachineFactory.java @@ -38,9 +38,9 @@ import org.springframework.statemachine.access.StateMachineAccess; import org.springframework.statemachine.access.StateMachineFunction; import org.springframework.statemachine.action.Action; import org.springframework.statemachine.config.model.ChoiceData; -import org.springframework.statemachine.config.model.DefaultStateMachineModel; import org.springframework.statemachine.config.model.StateData; import org.springframework.statemachine.config.model.StateMachineConfigurationConfig; +import org.springframework.statemachine.config.model.StateMachineModel; import org.springframework.statemachine.config.model.StateMachineStates; import org.springframework.statemachine.config.model.StateMachineTransitions; import org.springframework.statemachine.config.model.TransitionData; @@ -75,6 +75,7 @@ import org.springframework.statemachine.transition.TransitionKind; import org.springframework.statemachine.trigger.EventTrigger; import org.springframework.statemachine.trigger.TimerTrigger; import org.springframework.statemachine.trigger.Trigger; +import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; /** @@ -94,7 +95,9 @@ public abstract class AbstractStateMachineFactory extends LifecycleObjectS private final StateMachineStates stateMachineStates; - private final StateMachineConfigurationConfig stateMachineConfigurationConfig; + private final StateMachineConfigurationConfig stateMachineConfigurationConfig; + + private final StateMachineModel stateMachineModel; private Boolean contextEvents; @@ -103,17 +106,16 @@ public abstract class AbstractStateMachineFactory extends LifecycleObjectS private String beanName; /** - * Instantiates a new enum state machine factory. + * Instantiates a new abstract state machine factory. * - * @param stateMachineConfigurationConfig the state machine generic config - * @param stateMachineTransitions the state machine transitions - * @param stateMachineStates the state machine states + * @param stateMachineModel the state machine model */ - public AbstractStateMachineFactory(StateMachineConfigurationConfig stateMachineConfigurationConfig, - StateMachineTransitions stateMachineTransitions, StateMachineStates stateMachineStates) { - this.stateMachineConfigurationConfig = stateMachineConfigurationConfig; - this.stateMachineTransitions = stateMachineTransitions; - this.stateMachineStates = stateMachineStates; + public AbstractStateMachineFactory(StateMachineModel stateMachineModel) { + Assert.notNull(stateMachineModel, "StateMachineModel must be set"); + this.stateMachineModel = stateMachineModel; + this.stateMachineConfigurationConfig = stateMachineModel.getConfiguration(); + this.stateMachineTransitions = stateMachineModel.getTransitions(); + this.stateMachineStates = stateMachineModel.getStates(); } @Override @@ -124,13 +126,12 @@ public abstract class AbstractStateMachineFactory extends LifecycleObjectS @SuppressWarnings("unchecked") @Override public StateMachine getStateMachine() { - // TODO: should pass model into constructor if (stateMachineConfigurationConfig.isVerifierEnabled()) { StateMachineModelVerifier verifier = stateMachineConfigurationConfig.getVerifier(); if (verifier == null) { verifier = new CompositeStateMachineModelVerifier(); } - verifier.verify(new DefaultStateMachineModel(stateMachineConfigurationConfig, stateMachineStates, stateMachineTransitions)); + verifier.verify(stateMachineModel); } // shared diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/ObjectStateMachineFactory.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/ObjectStateMachineFactory.java index e0b55222..4edab967 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/ObjectStateMachineFactory.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/ObjectStateMachineFactory.java @@ -26,9 +26,7 @@ import org.springframework.statemachine.ExtendedState; import org.springframework.statemachine.ObjectStateMachine; import org.springframework.statemachine.StateMachine; import org.springframework.statemachine.action.Action; -import org.springframework.statemachine.config.model.StateMachineConfigurationConfig; -import org.springframework.statemachine.config.model.StateMachineStates; -import org.springframework.statemachine.config.model.StateMachineTransitions; +import org.springframework.statemachine.config.model.StateMachineModel; import org.springframework.statemachine.region.Region; import org.springframework.statemachine.state.ObjectState; import org.springframework.statemachine.state.PseudoState; @@ -50,13 +48,10 @@ public class ObjectStateMachineFactory extends AbstractStateMachineFactory /** * Instantiates a new object state machine factory. * - * @param stateMachineConfigurationConfig the state machine generic config - * @param stateMachineTransitions the state machine transitions - * @param stateMachineStates the state machine states + * @param stateMachineModel the state machine model */ - public ObjectStateMachineFactory(StateMachineConfigurationConfig stateMachineConfigurationConfig, - StateMachineTransitions stateMachineTransitions, StateMachineStates stateMachineStates) { - super(stateMachineConfigurationConfig, stateMachineTransitions, stateMachineStates); + public ObjectStateMachineFactory(StateMachineModel stateMachineModel) { + super(stateMachineModel); } @Override diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/StateMachineBuilder.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/StateMachineBuilder.java index 09bc2e94..ef5b0968 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/StateMachineBuilder.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/StateMachineBuilder.java @@ -29,6 +29,7 @@ import org.springframework.statemachine.config.builders.StateMachineTransitionBu import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; import org.springframework.statemachine.config.common.annotation.AnnotationBuilder; import org.springframework.statemachine.config.common.annotation.ObjectPostProcessor; +import org.springframework.statemachine.config.model.DefaultStateMachineModel; import org.springframework.statemachine.config.model.StateMachineConfigurationConfig; import org.springframework.statemachine.config.model.StateMachineStates; import org.springframework.statemachine.config.model.StateMachineTransitions; @@ -115,7 +116,8 @@ public class StateMachineBuilder { StateMachineStates stateMachineStates = stateMachineConfig.getStates(); StateMachineConfigurationConfig stateMachineConfigurationConfig = stateMachineConfig.getStateMachineConfigurationConfig(); ObjectStateMachineFactory stateMachineFactory = new ObjectStateMachineFactory( - stateMachineConfigurationConfig, stateMachineTransitions, stateMachineStates); + new DefaultStateMachineModel(stateMachineConfigurationConfig, stateMachineStates, stateMachineTransitions)); + stateMachineFactory.setHandleAutostartup(stateMachineConfigurationConfig.isAutoStart()); if (stateMachineConfigurationConfig.getBeanFactory() != null) { diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configuration/StateMachineConfiguration.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configuration/StateMachineConfiguration.java index 20446fb6..238661f5 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configuration/StateMachineConfiguration.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configuration/StateMachineConfiguration.java @@ -38,6 +38,7 @@ import org.springframework.statemachine.config.builders.StateMachineConfigBuilde import org.springframework.statemachine.config.builders.StateMachineConfigurer; import org.springframework.statemachine.config.common.annotation.AbstractImportingAnnotationConfiguration; import org.springframework.statemachine.config.common.annotation.AnnotationConfigurer; +import org.springframework.statemachine.config.model.DefaultStateMachineModel; import org.springframework.statemachine.config.model.StateMachineConfigurationConfig; import org.springframework.statemachine.config.model.StateMachineStates; import org.springframework.statemachine.config.model.StateMachineTransitions; @@ -145,7 +146,7 @@ public class StateMachineConfiguration extends StateMachineStates stateMachineStates = stateMachineConfig.getStates(); StateMachineConfigurationConfig stateMachineConfigurationConfig = stateMachineConfig.getStateMachineConfigurationConfig(); ObjectStateMachineFactory stateMachineFactory = new ObjectStateMachineFactory( - stateMachineConfigurationConfig, stateMachineTransitions, stateMachineStates); + new DefaultStateMachineModel(stateMachineConfigurationConfig, stateMachineStates, stateMachineTransitions)); stateMachineFactory.setBeanFactory(getBeanFactory()); stateMachineFactory.setContextEventsEnabled(contextEvents); stateMachineFactory.setBeanName(beanName); diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configuration/StateMachineFactoryConfiguration.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configuration/StateMachineFactoryConfiguration.java index e2866c50..fd2766e7 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configuration/StateMachineFactoryConfiguration.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/config/configuration/StateMachineFactoryConfiguration.java @@ -39,6 +39,7 @@ import org.springframework.statemachine.config.StateMachineFactory; import org.springframework.statemachine.config.builders.StateMachineConfigBuilder; import org.springframework.statemachine.config.common.annotation.AbstractImportingAnnotationConfiguration; import org.springframework.statemachine.config.common.annotation.AnnotationConfigurer; +import org.springframework.statemachine.config.model.DefaultStateMachineModel; import org.springframework.statemachine.config.model.StateMachineConfigurationConfig; import org.springframework.statemachine.config.model.StateMachineStates; import org.springframework.statemachine.config.model.StateMachineTransitions; @@ -134,7 +135,7 @@ public class StateMachineFactoryConfiguration extends StateMachineConfigurationConfig stateMachineConfigurationConfig = stateMachineConfig .getStateMachineConfigurationConfig(); ObjectStateMachineFactory objectStateMachineFactory = new ObjectStateMachineFactory( - stateMachineConfigurationConfig, stateMachineTransitions, stateMachineStates); + new DefaultStateMachineModel(stateMachineConfigurationConfig, stateMachineStates, stateMachineTransitions)); objectStateMachineFactory.setBeanFactory(beanFactory); objectStateMachineFactory.setContextEventsEnabled(contextEvents); // explicitly tell factory to handle auto-start because diff --git a/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/ManualBuilderTests.java b/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/ManualBuilderTests.java index 24a47156..d16db804 100644 --- a/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/ManualBuilderTests.java +++ b/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/ManualBuilderTests.java @@ -35,6 +35,7 @@ import org.springframework.statemachine.config.StateMachineBuilder.Builder; import org.springframework.statemachine.config.builders.StateMachineConfigBuilder; import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; +import org.springframework.statemachine.config.model.DefaultStateMachineModel; import org.springframework.statemachine.config.model.StateMachineConfigurationConfig; import org.springframework.statemachine.config.model.StateMachineStates; import org.springframework.statemachine.config.model.StateMachineTransitions; @@ -54,7 +55,7 @@ public class ManualBuilderTests { StateMachineStates stateMachineStates = stateMachineConfig.getStates(); StateMachineConfigurationConfig stateMachineConfigurationConfig = stateMachineConfig.getStateMachineConfigurationConfig(); ObjectStateMachineFactory stateMachineFactory = new ObjectStateMachineFactory( - stateMachineConfigurationConfig, stateMachineTransitions, stateMachineStates); + new DefaultStateMachineModel(stateMachineConfigurationConfig, stateMachineStates, stateMachineTransitions)); StaticListableBeanFactory beanFactory = new StaticListableBeanFactory(); beanFactory.addBean(StateMachineSystemConstants.TASK_EXECUTOR_BEAN_NAME, new SyncTaskExecutor());