package com.sleepycat.je.dbi;
import com.sleepycat.je.DatabaseException;
import de.ovgu.cide.jakutil.*;
/**
* DbEnvState implements a typesafe enumeration of environment states
* and does state change validation.
*/
class DbEnvState {
private static final boolean DEBUG=false;
private String name;
public static final DbEnvState INIT=new DbEnvState("initialized");
public static final DbEnvState OPEN=new DbEnvState("open");
public static final DbEnvState CLOSED=new DbEnvState("closed");
public static final DbEnvState INVALID=new DbEnvState("invalid");
public static final DbEnvState[] VALID_FOR_OPEN={INIT,CLOSED};
public static final DbEnvState[] VALID_FOR_CLOSE={INIT,OPEN,INVALID};
public static final DbEnvState[] VALID_FOR_REMOVE={INIT,CLOSED};
DbEnvState( String name){
this.name=name;
}
public String toString(){
return name;
}
void checkState( DbEnvState[] validPrevStates, DbEnvState newState) throws DatabaseException {
if (DEBUG) {
System.out.println("newState = " + newState + " currentState = "+ name);
}
boolean transitionOk=false;
for (int i=0; i < validPrevStates.length; i++) {
if (this == validPrevStates[i]) {
transitionOk=true;
break;
}
}
if (!transitionOk) {
throw new DatabaseException("Can't go from environment state " + toString() + " to "+ newState.toString());
}
}
}