CPS-875 Cm Handle State: Java Enum State Machine
CPS-875: CM Handle State: Watchdog-process that syncs 'ADVISED' CM HandlesClosed
State Machine
State Machines are a model used in computing to define the current state of the system, and the possible next state which it may transition to.
These machines can only be in one state at any given time.
Enum State Machine
The purpose of implementing a state machine using Enums is so that the state doesn't have to be explicitly set.
Instead, the logic is provided on how to transition from one to the next.
State Machine Transition
public enum CmHandleState {
Advised {
@Override
public CmHandleState nextState() {
return Locked;
}
@Override
public String cmHandleState() {
return "ADVISED";
}
},
Locked {
@Override
public CmHandleState nextState() {
return Ready;
}
@Override
public String cmHandleState() {
return "LOCKED";
}
},
Ready {
@Override
public CmHandleState nextState() {
return this;
}
@Override
public String cmHandleState() {
return "READY";
}
};
public abstract CmHandleState nextState();
public abstract String cmHandleState();
The state machine transitions are implemented using the enum's abstract nextState() method.
PreviousState() can also be implemented, so if the state needs to go from 'READY' to 'LOCKED' for example, this can also be done without having to be explicitly stated.
Advantages of Enum Stating Machine
Easy to Implement
Can provide the logic for the transition implementation without having to explicitly state it.
Cleaner and Easier to read which states can be transitioned to other states.
Easily extendable if future states are to be added.
Disadvantages
Due to how state machine works, transitions are pre defined between states, based on the diagram here (CPS-799 Spike: Define states and state handling for CM handle), "LOCKED" and "DELETED" states can be accessed from multiple previous states. Meaning they may have to be defined explicitly to jump between these states. Defeating the main purpose of implementing the state machine.