S
- the states enumeration.E
- the events enumeration.public final class StateMachineServiceBuilder<S extends java.lang.Enum<S>,E extends java.lang.Enum<E>>
extends java.lang.Object
A builder of DefaultStateMachineService
instances. It offers a simple, flexible interface for creation of state machines.
Initially, a user is required to provide at least:
startWith(S)
), terminateIn(S...)
). Failure to do so results in IllegalStateException
when build()
is called.
Modifier and Type | Class and Description |
---|---|
class |
StateMachineServiceBuilder.TransitionBuilder
An action builder.
|
class |
StateMachineServiceBuilder.WildcardTransitionBuilder
An action builder for state-independent actions.
|
Modifier and Type | Field and Description |
---|---|
private @MonotonicNonNull EventBus |
eventBus |
private java.lang.Class<E> |
eventClass |
private java.util.function.Consumer<java.lang.Throwable> |
exceptionHandler |
private S |
initialState |
private static org.slf4j.Logger |
logger |
private @MonotonicNonNull java.lang.String |
name |
private java.lang.Class<S> |
stateClass |
private boolean |
synchronous |
private @MonotonicNonNull java.util.EnumSet<S> |
terminalStates |
private Multimap<S,Transition<S,E>> |
transitions |
private java.util.EnumMap<E,io.vavr.Tuple2<io.vavr.collection.Set<S>,java.util.function.Consumer<FSM<S,E>>>> |
wildcardTransitions |
Modifier | Constructor and Description |
---|---|
private |
StateMachineServiceBuilder(java.lang.Class<S> states,
java.lang.Class<E> events) |
Modifier and Type | Method and Description |
---|---|
StateMachineService<S,E> |
build()
Builds and returns a new service.
|
(package private) io.vavr.collection.HashMap<S,State<S,E>> |
buildStatesMap() |
(package private) @Nullable EventBus |
eventBus() |
(package private) java.lang.Class<E> |
eventClass() |
(package private) java.util.function.Consumer<java.lang.Throwable> |
exceptionHandler() |
StateMachineServiceBuilder.TransitionBuilder |
in(S state)
Starts the declaration of behaviour when the FSM is at the given state.
|
StateMachineServiceBuilder.WildcardTransitionBuilder |
inAnyState()
Starts the declaration of behaviour for the events that are not dependent on states.
|
(package private) S |
initialState() |
(package private) boolean |
isSynchronous() |
(package private) java.lang.String |
name() |
StateMachineServiceBuilder<S,E> |
notifyOn(EventBus eventBus) |
StateMachineServiceBuilder<S,E> |
startWith(S state)
Declares an initial state.
|
(package private) java.lang.Class<S> |
stateClass() |
(package private) void |
synchronous() |
(package private) java.util.EnumSet<S> |
terminalStates() |
StateMachineServiceBuilder<S,E> |
terminateIn(S... states)
Indicates which states are terminal states.
|
(package private) Multimap<S,Transition<S,E>> |
transitions() |
StateMachineServiceBuilder<S,E> |
whenFailedCall(java.util.function.Consumer<java.lang.Throwable> exceptionHandler)
Starts the declaration of actions taken when the failure occurs.
|
(package private) java.util.EnumMap<E,io.vavr.Tuple2<io.vavr.collection.Set<S>,java.util.function.Consumer<FSM<S,E>>>> |
wildcardTransitions() |
StateMachineServiceBuilder<S,E> |
withName(java.lang.String name) |
static <S extends java.lang.Enum<S>,E extends java.lang.Enum<E>> |
withStatesAndEvents(java.lang.Class<S> states,
java.lang.Class<E> events) |
private static final org.slf4j.Logger logger
private final Multimap<S extends java.lang.Enum<S>,Transition<S extends java.lang.Enum<S>,E extends java.lang.Enum<E>>> transitions
private final java.util.EnumMap<E extends java.lang.Enum<E>,io.vavr.Tuple2<io.vavr.collection.Set<S extends java.lang.Enum<S>>,java.util.function.Consumer<FSM<S extends java.lang.Enum<S>,E extends java.lang.Enum<E>>>>> wildcardTransitions
private @MonotonicNonNull java.util.EnumSet<S extends java.lang.Enum<S>> terminalStates
private @MonotonicNonNull EventBus eventBus
private @MonotonicNonNull java.lang.String name
private java.util.function.Consumer<java.lang.Throwable> exceptionHandler
private boolean synchronous
public static <S extends java.lang.Enum<S>,E extends java.lang.Enum<E>> StateMachineServiceBuilder<S,E> withStatesAndEvents(java.lang.Class<S> states, java.lang.Class<E> events)
@EnsuresNonNull(value="this.name") public StateMachineServiceBuilder<S,E> withName(java.lang.String name)
public StateMachineServiceBuilder.TransitionBuilder in(S state)
Starts the declaration of behaviour when the FSM is at the given state.
state
- a state.public StateMachineServiceBuilder.WildcardTransitionBuilder inAnyState()
Starts the declaration of behaviour for the events that are not dependent on states.
@EnsuresNonNull(value="initialState") public StateMachineServiceBuilder<S,E> startWith(S state)
Declares an initial state.
state
- a state.@EnsuresNonNull(value="terminalStates") public StateMachineServiceBuilder<S,E> terminateIn(S... states)
Indicates which states are terminal states.
states
- states that should be marked as terminal states.public StateMachineServiceBuilder<S,E> whenFailedCall(java.util.function.Consumer<java.lang.Throwable> exceptionHandler)
Starts the declaration of actions taken when the failure occurs.
@EnsuresNonNull(value="this.eventBus") public StateMachineServiceBuilder<S,E> notifyOn(EventBus eventBus)
public StateMachineService<S,E> build()
Builds and returns a new service.
StateMachineService
.java.lang.Class<S> stateClass()
java.lang.Class<E> eventClass()
java.lang.String name()
Multimap<S,Transition<S,E>> transitions()
S initialState()
java.util.EnumSet<S> terminalStates()
@Nullable EventBus eventBus()
java.util.EnumMap<E,io.vavr.Tuple2<io.vavr.collection.Set<S>,java.util.function.Consumer<FSM<S,E>>>> wildcardTransitions()
java.util.function.Consumer<java.lang.Throwable> exceptionHandler()
boolean isSynchronous()
void synchronous()