package net.varkhan.base.management.state.health;
import net.varkhan.base.management.state.State;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 10/12/11
* @time 1:30 PM
*/
public enum HealthState implements State<HealthLevel,HealthState> {
HEALTHY {
@Override
public HealthState aggregate(HealthState state, HealthLevel level) {
switch(state) {
case FAILED:
switch(level) {
case MAJOR:
return FAILED;
case MINOR:
return UNSTABLE;
}
case UNSTABLE:
switch(level) {
case MAJOR:
return UNSTABLE;
}
}
return HEALTHY;
}
},
UNSTABLE {
@Override
public HealthState aggregate(HealthState state, HealthLevel level) {
switch(state) {
case FAILED:
switch(level) {
case MAJOR:
return FAILED;
}
}
return UNSTABLE;
}
},
FAILED {
@Override
public HealthState aggregate(HealthState state, HealthLevel level) {
return FAILED;
}
},
;
@Override
public HealthState[] transition(HealthLevel level) {
return new HealthState[] { HEALTHY, UNSTABLE, FAILED };
}
}