package org.zstack.compute.cluster;
import org.zstack.core.Platform;
import org.zstack.core.statemachine.StateMachine;
import org.zstack.header.cluster.Cluster;
import org.zstack.header.cluster.ClusterState;
import org.zstack.header.cluster.ClusterStateEvent;
public abstract class AbstractCluster implements Cluster {
private final static StateMachine<ClusterState, ClusterStateEvent> stateMachine;
static {
stateMachine = Platform.<ClusterState, ClusterStateEvent> createStateMachine();
stateMachine.addTranscation(ClusterState.Enabled, ClusterStateEvent.disable, ClusterState.Disabled);
stateMachine.addTranscation(ClusterState.Enabled, ClusterStateEvent.enable, ClusterState.Enabled);
stateMachine.addTranscation(ClusterState.Disabled, ClusterStateEvent.disable, ClusterState.Disabled);
stateMachine.addTranscation(ClusterState.Disabled, ClusterStateEvent.enable, ClusterState.Enabled);
}
static ClusterState getNextState(ClusterState curr, ClusterStateEvent event) {
return stateMachine.getNextState(curr, event);
}
protected abstract void deleteHook();
}