package org.zstack.compute.zone;
import org.zstack.core.Platform;
import org.zstack.core.db.DatabaseFacade;
import org.zstack.core.statemachine.StateMachine;
import org.zstack.header.zone.Zone;
import org.zstack.header.zone.ZoneState;
import org.zstack.header.zone.ZoneStateEvent;
abstract class AbstractZone implements Zone {
private static DatabaseFacade dbf = Platform.getComponentLoader().getComponent(DatabaseFacade.class);
private final static StateMachine<ZoneState, ZoneStateEvent> stateMachine;
static {
stateMachine = Platform.<ZoneState, ZoneStateEvent>createStateMachine();
stateMachine.addTranscation(ZoneState.Enabled, ZoneStateEvent.disable, ZoneState.Disabled);
stateMachine.addTranscation(ZoneState.Enabled, ZoneStateEvent.enable, ZoneState.Enabled);
stateMachine.addTranscation(ZoneState.Disabled, ZoneStateEvent.disable, ZoneState.Disabled);
stateMachine.addTranscation(ZoneState.Disabled, ZoneStateEvent.enable, ZoneState.Enabled);
}
static ZoneState getNextState(ZoneState curr, ZoneStateEvent event) {
return stateMachine.getNextState(curr, event);
}
protected abstract void deleteHook();
}