package foundation.state;
|
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import foundation.dao.preload.Bucket;
|
import foundation.util.Util;
|
|
public class MachineBucket extends Bucket<StateMachine> {
|
|
private static Object locker = new Object();
|
private static MachineBucket instance;
|
private Map<String, StateMachine> dataMachineMap;
|
|
|
public MachineBucket() {
|
dataMachineMap = new HashMap<String, StateMachine>();
|
}
|
|
public static MachineBucket getInstance() {
|
if (instance == null) {
|
synchronized (locker) {
|
if (instance == null) {
|
instance = new MachineBucket();
|
}
|
}
|
}
|
|
return instance;
|
}
|
|
public static MachineBucket newInstance() {
|
return new MachineBucket();
|
}
|
|
@Override
|
public void activate() {
|
instance = this;
|
}
|
|
public void loadtarget(String dataName, StateMachine machine) {
|
dataMachineMap.put(dataName, machine);
|
}
|
|
public static StateMachine getMachineByDataName(String dataName) {
|
StateMachine result = instance.dataMachineMap.get(dataName);
|
|
if (result == null) {
|
logger.error("数据对象{}对应的状态机没有找到", dataName);
|
}
|
|
return result;
|
}
|
|
public static StateMachine getMachineById(String machineId) {
|
StateMachine result = instance.get(machineId);
|
|
if (result == null) {
|
logger.error("状态机{}没有找到", machineId);
|
}
|
|
return result;
|
}
|
|
public static boolean isInFreedom(String dataName, String stateCode) {
|
if (Util.isEmpty(stateCode)) {
|
return true;
|
}
|
|
StateMachine machine = getMachineByDataName(dataName);
|
|
if (machine == null) {
|
return false;
|
}
|
|
State state = machine.getState(stateCode);
|
|
if (state == null) {
|
return false;
|
}
|
|
return state.isInFreedom();
|
}
|
|
public static StateField getStateField(String dataName) {
|
StateMachine machine = getMachineByDataName(dataName);
|
|
if (machine == null) {
|
return null;
|
}
|
|
return machine.getStateField();
|
}
|
}
|