package edu.uw.zookeeper; import com.google.common.base.Function; import com.google.common.base.Optional; import edu.uw.zookeeper.common.Automaton; public enum EnsembleRole implements Function<EnsembleRole, Optional<Automaton.Transition<EnsembleRole>>> { UNKNOWN { @Override public Optional<Automaton.Transition<EnsembleRole>> apply(EnsembleRole input) { switch (input) { case UNKNOWN: return Optional.absent(); default: return Optional.of(Automaton.Transition.<EnsembleRole>create(this, input)); } }}, LOOKING { @Override public Optional<Automaton.Transition<EnsembleRole>> apply(EnsembleRole input) { switch (input) { case LOOKING: return Optional.absent(); case LEADING: case FOLLOWING: return Optional.of(Automaton.Transition.<EnsembleRole>create(this, input)); default: throw new IllegalStateException(); } }}, FOLLOWING { @Override public Optional<Automaton.Transition<EnsembleRole>> apply(EnsembleRole input) { switch (input) { case FOLLOWING: return Optional.absent(); case LOOKING: case LEADING: return Optional.of(Automaton.Transition.<EnsembleRole>create(this, input)); default: throw new IllegalStateException(); } }}, LEADING { @Override public Optional<Automaton.Transition<EnsembleRole>> apply(EnsembleRole input) { switch (input) { case LEADING: return Optional.absent(); case LOOKING: case FOLLOWING: return Optional.of(Automaton.Transition.<EnsembleRole>create(this, input)); default: throw new IllegalStateException(); } }}, OBSERVING { @Override public Optional<Automaton.Transition<EnsembleRole>> apply(EnsembleRole input) { switch (input) { case OBSERVING: return Optional.absent(); default: throw new IllegalStateException(); } }}; }