package foundation.state;
|
|
import java.util.ArrayList;
|
import java.util.Iterator;
|
import java.util.List;
|
|
import foundation.data.entity.Entity;
|
import foundation.json.IJSONProvider;
|
import foundation.json.IJSONWriter;
|
import foundation.util.MapList;
|
|
public class StateMachine implements IJSONProvider, Iterable<StatePoint> {
|
|
public static String State_Code_Open = "Open";
|
public static String State_Name_Open = "生效";
|
public static String State_Code_Close = "Close";
|
public static String State_Name_Close = "关闭";
|
public static MapList<String, StatePoint> allPoints;
|
private String id;
|
private String name;
|
private boolean active;
|
private StateField stateField;
|
private States states;
|
private List<String> targets;
|
private StatePointBucket pointBucket;
|
|
static {
|
allPoints = new MapList<String, StatePoint>();
|
}
|
|
public StateMachine() {
|
stateField = new StateField();
|
targets = new ArrayList<String>();
|
pointBucket = new StatePointBucket();
|
}
|
|
public void load(Entity entity) throws Exception {
|
this.id = entity.getString("id");
|
this.name = entity.getString("name");
|
this.stateField.setCode(entity.getString("field_state_code", "state_code"));
|
this.stateField.setName(entity.getString("field_state_name", "state_name"));
|
this.stateField.setReasonCode(entity.getString("field_state_reason_code", "state_reason_code"));
|
this.active = entity.getBoolean("is_active", true);
|
}
|
|
public void loadOnePoint(StatePoint point) {
|
//1. 加载到当前状态机当中
|
State fromState = states.get(point.getFromCode());
|
point.setFromState(fromState);
|
|
State toState = states.get(point.getToCode());
|
point.setToState(toState);
|
|
State endState = states.get(point.getEndCode());
|
point.setEndState(endState);
|
|
//2.
|
point.setMachine(this);
|
this.pointBucket.loadOne(point);
|
|
//3.
|
allPoints.add(point.getId(), point);
|
}
|
|
public void setStates(States states) {
|
this.states = states;
|
}
|
|
public void loadTarget(String dataName) {
|
targets.add(dataName);
|
}
|
|
public String getId() {
|
return this.id;
|
}
|
|
public String getName() {
|
return this.name;
|
}
|
|
public State getFirst() {
|
return states.getFirst();
|
}
|
|
public StateField getStateField() {
|
return this.stateField;
|
}
|
|
public List<String> getTargets() {
|
return targets;
|
}
|
|
public States getStates() {
|
return states;
|
}
|
|
public State getState(String code) {
|
return states.get(code);
|
}
|
|
public List<StatePoint> getStatePoints() {
|
return pointBucket.getList();
|
}
|
|
public static StatePoint getGlobalPoint(String pointId) {
|
return allPoints.get(pointId);
|
}
|
|
public StatePoint getPoint(String pointId) {
|
return pointBucket.get(pointId);
|
}
|
|
public StatePoint getPointByToState(String toState) {
|
return pointBucket.getPointByToState(toState);
|
}
|
|
public boolean isActive() {
|
return active;
|
}
|
|
@Override
|
public Iterator<StatePoint> iterator() {
|
return pointBucket.iterator();
|
}
|
|
@Override
|
public String toString() {
|
return name;
|
}
|
|
@Override
|
public void writeJSON(IJSONWriter writer) {
|
writer.beginObject();
|
|
writer.write("id", id);
|
writer.write("name", name);
|
|
writer.beginArray("detail");
|
for (StatePoint point: pointBucket) {
|
point.writeJSON(writer);
|
}
|
writer.endArray();
|
|
writer.endObject();
|
}
|
|
}
|