public class AtomicState<S extends Enum<S>> extends Object
beginTransitionFrom(Enum[])
and endTransition()
calls. Actual states are represented as enumerations. This class guarantees that
there will be a single current state at any time and at most one state transition action will be running at
any time.Constructor and Description |
---|
AtomicState(S theInitState) |
Modifier and Type | Method and Description |
---|---|
S |
beginTransitionFrom(S... theStates)
Starts a transition provided that the current state is one of the specified states.
|
void |
cancelTransition()
Request the cancellation of current transition.
|
void |
checkState(Collection<S> theStates)
Throws
IllegalStateException if the current state is one of the given states. |
void |
checkState(S theState)
Throws
IllegalStateException if the current state is not equal to the given state. |
void |
checkStateNot(S theState)
Throws
IllegalStateException if the current state is equal to the given state. |
void |
endTransition()
Ends the current transition.
|
void |
endTransition(S theFinalState)
Ends the transition with the given final state.
|
S |
get()
Returns the current state.
|
boolean |
isInTransition()
Returns
true if a transition is being performed. |
boolean |
isTransitionCanceled()
Returns
true if the current transition is requested to be canceled. |
static <S extends Enum<S>> |
newState(S theInitState) |
void |
set(S theState)
Sets the current state only if the current thread
began a transition. |
void |
transitionTo(S theFinalState,
S... theInitialStates)
Performs the transition to a final state.
|
S |
tryBeginTransition(S... thePossibleInitialStates)
Attempts to start a transition "tentatively": that is, it will attempt the transition only if the
current state is contained in
thePossibleInitialStates ; If it is not, this will unroll any action
taken, as if the transition was never attempted. |
public AtomicState(S theInitState)
public static <S extends Enum<S>> AtomicState<S> newState(S theInitState)
public S beginTransitionFrom(S... theStates)
IllegalStateException
- if the current state is not a valid initial state for the actionpublic S tryBeginTransition(S... thePossibleInitialStates)
thePossibleInitialStates
; If it is not, this will unroll any action
taken, as if the transition was never attempted. If the transition is successful, then the old state will be returned. If it is
not successful, then null
is returned.
This is an inexpensive way of doing idempotent transitions (i.e. only transition to a single state once).thePossibleInitialStates
- the possible states that the transaction can be innull
if the transition failspublic void endTransition(S theFinalState)
try {
set(theFinalState);
}
finally {
endTransition();
}
theFinalState
- the final statepublic void endTransition()
public void transitionTo(S theFinalState, S... theInitialStates)
beginTransitionFrom(theInitialStates);
try {
set(theFinalState);
}
finally {
endTransition();
}
theInitialStates
- theFinalState
- public void cancelTransition()
public boolean isTransitionCanceled()
true
if the current transition is requested to be canceled.public S get()
public void set(S theState)
began
a transition.public void checkState(S theState)
IllegalStateException
if the current state is not equal to the given state.public void checkState(Collection<S> theStates)
IllegalStateException
if the current state is one of the given states.public void checkStateNot(S theState)
IllegalStateException
if the current state is equal to the given state.public boolean isInTransition()
true
if a transition is being performed.Copyright © 2010-2016 Stardog Union. All Rights Reserved.