com.alibaba.cola.statemachine.builder.StateMachineBuilderImpl Maven / Gradle / Ivy
package com.alibaba.cola.statemachine.builder;
import com.alibaba.cola.statemachine.State;
import com.alibaba.cola.statemachine.StateMachine;
import com.alibaba.cola.statemachine.StateMachineFactory;
import com.alibaba.cola.statemachine.impl.StateMachineImpl;
import com.alibaba.cola.statemachine.impl.TransitionType;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* StateMachineBuilderImpl
*
* @author Frank Zhang
* @date 2020-02-07 9:40 PM
*/
public class StateMachineBuilderImpl implements StateMachineBuilder {
/**
* StateMap is the same with stateMachine, as the core of state machine is holding reference to states.
*/
private final Map> stateMap = new ConcurrentHashMap<>();
private final StateMachineImpl stateMachine = new StateMachineImpl<>(stateMap);
@Override
public ExternalTransitionBuilder externalTransition() {
return new TransitionBuilderImpl<>(stateMap, TransitionType.EXTERNAL);
}
@Override
public ExternalTransitionsBuilder externalTransitions() {
return new TransitionsBuilderImpl<>(stateMap, TransitionType.EXTERNAL);
}
@Override
public InternalTransitionBuilder internalTransition() {
return new TransitionBuilderImpl<>(stateMap, TransitionType.INTERNAL);
}
@Override
public StateMachine build(String machineId) {
stateMachine.setMachineId(machineId);
stateMachine.setReady(true);
StateMachineFactory.register(stateMachine);
return stateMachine;
}
}