package edu.uw.zookeeper.protocol;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import edu.uw.zookeeper.common.Automaton;
public enum ProtocolState implements Function<ProtocolState, Optional<Automaton.Transition<ProtocolState>>> {
ANONYMOUS {
@Override
public Optional<Automaton.Transition<ProtocolState>> apply(ProtocolState input) {
switch (input) {
case ANONYMOUS:
return Optional.absent();
case CONNECTING:
case ERROR:
return Optional.of(Automaton.Transition.<ProtocolState>create(this, input));
default:
throw new IllegalArgumentException(String.valueOf(input));
}
}
},
CONNECTING {
@Override
public Optional<Automaton.Transition<ProtocolState>> apply(ProtocolState input) {
switch (input) {
case CONNECTING:
return Optional.absent();
case CONNECTED:
case ERROR:
return Optional.of(Automaton.Transition.<ProtocolState>create(this, input));
default:
throw new IllegalArgumentException(String.valueOf(input));
}
}
},
CONNECTED {
@Override
public Optional<Automaton.Transition<ProtocolState>> apply(ProtocolState input) {
switch (input) {
case CONNECTING:
case CONNECTED:
return Optional.absent();
case DISCONNECTING:
case ERROR:
case DISCONNECTED:
return Optional.of(Automaton.Transition.<ProtocolState>create(this, input));
default:
throw new IllegalArgumentException(String.valueOf(input));
}
}
},
DISCONNECTING {
@Override
public Optional<Automaton.Transition<ProtocolState>> apply(ProtocolState input) {
switch (input) {
case CONNECTING:
case CONNECTED:
case DISCONNECTING:
return Optional.absent();
case ERROR:
case DISCONNECTED:
return Optional.of(Automaton.Transition.<ProtocolState>create(this, input));
default:
throw new IllegalArgumentException(String.valueOf(input));
}
}
},
DISCONNECTED {
public Optional<Automaton.Transition<ProtocolState>> apply(ProtocolState input) {
switch (input) {
case CONNECTING:
case CONNECTED:
case DISCONNECTING:
case DISCONNECTED:
case ERROR:
return Optional.absent();
default:
throw new IllegalArgumentException(String.valueOf(input));
}
}
},
ERROR {
public Optional<Automaton.Transition<ProtocolState>> apply(ProtocolState input) {
switch (input) {
case DISCONNECTING:
case DISCONNECTED:
return Optional.of(Automaton.Transition.<ProtocolState>create(this, input));
default:
return Optional.absent();
}
}
};
}