Factories now use model SPI

- Actually pass StateMachineModel into AbstractStateMachineFactory
  instead of building it internally.
- Relates to #172
This commit is contained in:
Janne Valkealahti
2016-03-13 16:20:14 +00:00
parent 07de17784e
commit 981a5335a8
6 changed files with 27 additions and 26 deletions

View File

@@ -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<S, E> extends LifecycleObjectS
private final StateMachineStates<S, E> stateMachineStates;
private final StateMachineConfigurationConfig<S,E> stateMachineConfigurationConfig;
private final StateMachineConfigurationConfig<S, E> stateMachineConfigurationConfig;
private final StateMachineModel<S, E> stateMachineModel;
private Boolean contextEvents;
@@ -103,17 +106,16 @@ public abstract class AbstractStateMachineFactory<S, E> 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<S, E> stateMachineConfigurationConfig,
StateMachineTransitions<S, E> stateMachineTransitions, StateMachineStates<S, E> stateMachineStates) {
this.stateMachineConfigurationConfig = stateMachineConfigurationConfig;
this.stateMachineTransitions = stateMachineTransitions;
this.stateMachineStates = stateMachineStates;
public AbstractStateMachineFactory(StateMachineModel<S, E> 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<S, E> extends LifecycleObjectS
@SuppressWarnings("unchecked")
@Override
public StateMachine<S, E> getStateMachine() {
// TODO: should pass model into constructor
if (stateMachineConfigurationConfig.isVerifierEnabled()) {
StateMachineModelVerifier<S, E> verifier = stateMachineConfigurationConfig.getVerifier();
if (verifier == null) {
verifier = new CompositeStateMachineModelVerifier<S, E>();
}
verifier.verify(new DefaultStateMachineModel<S, E>(stateMachineConfigurationConfig, stateMachineStates, stateMachineTransitions));
verifier.verify(stateMachineModel);
}
// shared

View File

@@ -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<S, E> 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<S, E> stateMachineConfigurationConfig,
StateMachineTransitions<S, E> stateMachineTransitions, StateMachineStates<S, E> stateMachineStates) {
super(stateMachineConfigurationConfig, stateMachineTransitions, stateMachineStates);
public ObjectStateMachineFactory(StateMachineModel<S, E> stateMachineModel) {
super(stateMachineModel);
}
@Override

View File

@@ -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<S, E> stateMachineStates = stateMachineConfig.getStates();
StateMachineConfigurationConfig<S, E> stateMachineConfigurationConfig = stateMachineConfig.getStateMachineConfigurationConfig();
ObjectStateMachineFactory<S, E> stateMachineFactory = new ObjectStateMachineFactory<S, E>(
stateMachineConfigurationConfig, stateMachineTransitions, stateMachineStates);
new DefaultStateMachineModel<S, E>(stateMachineConfigurationConfig, stateMachineStates, stateMachineTransitions));
stateMachineFactory.setHandleAutostartup(stateMachineConfigurationConfig.isAutoStart());
if (stateMachineConfigurationConfig.getBeanFactory() != null) {

View File

@@ -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<S, E> extends
StateMachineStates<S, E> stateMachineStates = stateMachineConfig.getStates();
StateMachineConfigurationConfig<S, E> stateMachineConfigurationConfig = stateMachineConfig.getStateMachineConfigurationConfig();
ObjectStateMachineFactory<S, E> stateMachineFactory = new ObjectStateMachineFactory<S, E>(
stateMachineConfigurationConfig, stateMachineTransitions, stateMachineStates);
new DefaultStateMachineModel<S, E>(stateMachineConfigurationConfig, stateMachineStates, stateMachineTransitions));
stateMachineFactory.setBeanFactory(getBeanFactory());
stateMachineFactory.setContextEventsEnabled(contextEvents);
stateMachineFactory.setBeanName(beanName);

View File

@@ -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<S, E> extends
StateMachineConfigurationConfig<S, E> stateMachineConfigurationConfig = stateMachineConfig
.getStateMachineConfigurationConfig();
ObjectStateMachineFactory<S, E> objectStateMachineFactory = new ObjectStateMachineFactory<S, E>(
stateMachineConfigurationConfig, stateMachineTransitions, stateMachineStates);
new DefaultStateMachineModel<S, E>(stateMachineConfigurationConfig, stateMachineStates, stateMachineTransitions));
objectStateMachineFactory.setBeanFactory(beanFactory);
objectStateMachineFactory.setContextEventsEnabled(contextEvents);
// explicitly tell factory to handle auto-start because

View File

@@ -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<String, String> stateMachineStates = stateMachineConfig.getStates();
StateMachineConfigurationConfig<String, String> stateMachineConfigurationConfig = stateMachineConfig.getStateMachineConfigurationConfig();
ObjectStateMachineFactory<String, String> stateMachineFactory = new ObjectStateMachineFactory<String, String>(
stateMachineConfigurationConfig, stateMachineTransitions, stateMachineStates);
new DefaultStateMachineModel<String, String>(stateMachineConfigurationConfig, stateMachineStates, stateMachineTransitions));
StaticListableBeanFactory beanFactory = new StaticListableBeanFactory();
beanFactory.addBean(StateMachineSystemConstants.TASK_EXECUTOR_BEAN_NAME, new SyncTaskExecutor());