package org.fastcatsearch.common;
public class Lifecycle {
public static enum State {
INITIALIZED,
STOPPED,
STARTED,
CLOSED
}
private volatile State state = State.INITIALIZED;
public State state() {
return this.state;
}
/**
* Returns <tt>true</tt> if the state is initialized.
*/
public boolean initialized() {
return state == State.INITIALIZED;
}
/**
* Returns <tt>true</tt> if the state is started.
*/
public boolean started() {
return state == State.STARTED;
}
/**
* Returns <tt>true</tt> if the state is stopped.
*/
public boolean stopped() {
return state == State.STOPPED;
}
/**
* Returns <tt>true</tt> if the state is closed.
*/
public boolean closed() {
return state == State.CLOSED;
}
public boolean stoppedOrClosed() {
Lifecycle.State state = this.state;
return state == State.STOPPED || state == State.CLOSED;
}
public boolean canMoveToStarted() {
State localState = this.state;
if (localState == State.INITIALIZED || localState == State.STOPPED) {
return true;
}
if (localState == State.STARTED) {
return false;
}
if (localState == State.CLOSED) {
return false;
}
return false;
}
public boolean moveToStarted() {
State localState = this.state;
if (localState == State.INITIALIZED || localState == State.STOPPED) {
state = State.STARTED;
return true;
}
if (localState == State.STARTED) {
return false;
}
if (localState == State.CLOSED) {
return false;
}
return false;
}
public boolean canMoveToStopped() {
State localState = state;
if (localState == State.STARTED) {
return true;
}
if (localState == State.INITIALIZED || localState == State.STOPPED) {
return false;
}
if (localState == State.CLOSED) {
return false;
}
return false;
}
public boolean moveToStopped() {
State localState = state;
if (localState == State.STARTED) {
state = State.STOPPED;
return true;
}
if (localState == State.INITIALIZED || localState == State.STOPPED) {
return false;
}
if (localState == State.CLOSED) {
return false;
}
return false;
}
public boolean canMoveToClosed() {
State localState = state;
if (localState == State.CLOSED) {
return false;
}
if (localState == State.STARTED) {
return false;
}
return true;
}
public boolean moveToClosed() {
State localState = state;
if (localState == State.CLOSED) {
return false;
}
if (localState == State.STARTED) {
return false;
}
state = State.CLOSED;
return true;
}
@Override
public String toString() {
return state.toString();
}
}