package org.xins.server;
import org.xins.common.MandatoryArgumentChecker;
final class EngineStateMachine {
private final Object _stateLock;
private EngineState _state;
EngineStateMachine() {
_stateLock = new Object();
_state = EngineState.INITIAL;
}
EngineState getState() {
synchronized (_stateLock) {
return _state;
}
}
void setState(EngineState newState)
throws IllegalArgumentException, IllegalStateException {
MandatoryArgumentChecker.check("newState", newState);
synchronized (_stateLock) {
EngineState oldState = _state;
String oldStateName = (oldState == null)
? null
: oldState.getName();
String newStateName = newState.getName();
if (oldState == newState) {
return;
} else if (oldState != EngineState.DISPOSING
&& newState == EngineState.DISPOSING) {
} else if (oldState == EngineState.INITIAL
&& newState == EngineState.BOOTSTRAPPING_FRAMEWORK) {
} else if (oldState == EngineState.BOOTSTRAPPING_FRAMEWORK
&& newState == EngineState.FRAMEWORK_BOOTSTRAP_FAILED) {
} else if (oldState == EngineState.FRAMEWORK_BOOTSTRAP_FAILED
&& newState == EngineState.BOOTSTRAPPING_FRAMEWORK) {
} else if (oldState == EngineState.BOOTSTRAPPING_FRAMEWORK
&& newState == EngineState.CONSTRUCTING_API) {
} else if (oldState == EngineState.CONSTRUCTING_API
&& newState == EngineState.API_CONSTRUCTION_FAILED) {
} else if (oldState == EngineState.API_CONSTRUCTION_FAILED
&& newState == EngineState.CONSTRUCTING_API) {
} else if (oldState == EngineState.CONSTRUCTING_API
&& newState == EngineState.BOOTSTRAPPING_API) {
} else if (oldState == EngineState.BOOTSTRAPPING_API
&& newState == EngineState.API_BOOTSTRAP_FAILED) {
} else if (oldState == EngineState.API_BOOTSTRAP_FAILED
&& newState == EngineState.BOOTSTRAPPING_API) {
} else if (oldState == EngineState.BOOTSTRAPPING_API
&& newState == EngineState.INITIALIZING_API) {
} else if (oldState == EngineState.BOOTSTRAPPING_API
&& newState == EngineState.INITIALIZING_API) {
} else if (oldState == EngineState.INITIALIZING_API
&& newState == EngineState.API_INITIALIZATION_FAILED) {
} else if (oldState == EngineState.API_INITIALIZATION_FAILED
&& newState == EngineState.INITIALIZING_API) {
} else if (oldState == EngineState.INITIALIZING_API
&& newState == EngineState.READY) {
} else if (oldState == EngineState.READY
&& newState == EngineState.INITIALIZING_API) {
} else if (oldState == EngineState.DISPOSING
&& newState == EngineState.DISPOSED) {
} else {
Log.log_3101(oldStateName, newStateName);
String error = "The state "
+ oldStateName
+ " cannot be followed by the state "
+ newStateName
+ '.';
throw new IllegalStateException(error);
}
_state = newState;
Log.log_3100(oldStateName, newStateName);
}
}
}