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 { 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 allPoints; private String id; private String name; private boolean active; private StateField stateField; private States states; private List targets; private StatePointBucket pointBucket; static { allPoints = new MapList(); } public StateMachine() { stateField = new StateField(); targets = new ArrayList(); 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 getTargets() { return targets; } public States getStates() { return states; } public State getState(String code) { return states.get(code); } public List 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 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(); } }