package org.zstack.storage.backup; import org.zstack.core.Platform; import org.zstack.core.statemachine.StateMachine; import org.zstack.header.storage.backup.*; import org.zstack.utils.message.OperationChecker; public abstract class AbstractBackupStorage implements BackupStorage { protected final static StateMachine<BackupStorageState, BackupStorageStateEvent> states; protected final static OperationChecker statusChecker = new OperationChecker(); protected final static OperationChecker stateChecker = new OperationChecker(); static { states = Platform.<BackupStorageState, BackupStorageStateEvent>createStateMachine(); states.addTranscation(BackupStorageState.Enabled, BackupStorageStateEvent.disable, BackupStorageState.Disabled); states.addTranscation(BackupStorageState.Enabled, BackupStorageStateEvent.enable, BackupStorageState.Enabled); states.addTranscation(BackupStorageState.Disabled, BackupStorageStateEvent.disable, BackupStorageState.Disabled); states.addTranscation(BackupStorageState.Disabled, BackupStorageStateEvent.enable, BackupStorageState.Enabled); statusChecker.addState(BackupStorageStatus.Connected.toString(), DeleteBitsOnBackupStorageMsg.class.getName(), DownloadImageMsg.class.getName(), DownloadVolumeMsg.class.getName() ); statusChecker.addState(BackupStorageStatus.Connecting.toString()); statusChecker.addState(BackupStorageStatus.Disconnected.toString()); stateChecker.addState(BackupStorageState.Enabled.toString(), DeleteBitsOnBackupStorageMsg.class.getName(), DownloadImageMsg.class.getName(), DownloadVolumeMsg.class.getName() ); stateChecker.addState(BackupStorageState.Disabled.toString()); } public static BackupStorageState getNextState(BackupStorageState curr, BackupStorageStateEvent evt) { return states.getNextState(curr, evt); } }