Package org.eclipse.net4j.util.fsm
Class FiniteStateMachine<STATE extends java.lang.Enum<?>,EVENT extends java.lang.Enum<?>,SUBJECT>
- java.lang.Object
-
- org.eclipse.net4j.util.event.Notifier
-
- org.eclipse.net4j.util.lifecycle.Lifecycle
-
- org.eclipse.net4j.util.fsm.FiniteStateMachine<STATE,EVENT,SUBJECT>
-
- All Implemented Interfaces:
INotifier
,INotifier.INotifier2
,IDeactivateable
,ILifecycle
,ILifecycle.DeferrableActivation
- Direct Known Subclasses:
Negotiator
public abstract class FiniteStateMachine<STATE extends java.lang.Enum<?>,EVENT extends java.lang.Enum<?>,SUBJECT> extends Lifecycle
A finite state machine that is based on a matrix oftransitions
.A finite state machine can fire the following events:
-
FiniteStateMachine.StateChangedEvent
after state changes of a subject.
- Author:
- Eike Stepper
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
FiniteStateMachine.ChangeStateTransition
Atransition
that changes thestate
of a subject.static class
FiniteStateMachine.FailTransition
Deprecated.UseFAIL
static class
FiniteStateMachine.IgnoreTransition
Deprecated.UseIGNORE
class
FiniteStateMachine.StateChangedEvent
-
Nested classes/interfaces inherited from interface org.eclipse.net4j.util.lifecycle.ILifecycle
ILifecycle.DeferrableActivation
-
Nested classes/interfaces inherited from interface org.eclipse.net4j.util.event.INotifier
INotifier.INotifier2
-
-
Field Summary
Fields Modifier and Type Field Description static ITransition
FAIL
static ITransition
IGNORE
-
Constructor Summary
Constructors Constructor Description FiniteStateMachine(java.lang.Class<STATE> stateEnum, java.lang.Class<EVENT> eventEnum)
FiniteStateMachine(java.lang.Class<STATE> stateEnum, java.lang.Class<EVENT> eventEnum, ITransition<STATE,EVENT,SUBJECT,?> defaultTransition)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected STATE
changeState(SUBJECT subject, STATE state)
protected ITransition<STATE,EVENT,SUBJECT,?>
createFailTransition(STATE state, EVENT event)
protected ITransition<STATE,EVENT,SUBJECT,?>
createIgnoreTransition(STATE state, EVENT event)
protected java.lang.String
formatFailMessage(SUBJECT subject, STATE state, EVENT event, java.lang.Object data)
protected java.lang.String
formatIgnoreMessage(SUBJECT subject, STATE state, EVENT event, java.lang.Object data)
protected java.lang.String
formatProcessMessage(SUBJECT subject, STATE state, EVENT event, java.lang.Object data)
EVENT[]
getEvents()
protected abstract STATE
getState(SUBJECT subject)
STATE[]
getStates()
ITransition<STATE,EVENT,SUBJECT,?>
getTransition(STATE state, EVENT event)
void
init(STATE state, EVENT event, ITransition<STATE,EVENT,SUBJECT,?> transition)
void
init(STATE state, EVENT event, STATE targetState)
void
initAll(ITransition<STATE,EVENT,SUBJECT,?> transition)
void
initAll(STATE targetState)
void
initEvents(STATE state, ITransition<STATE,EVENT,SUBJECT,?> transition)
void
initEvents(STATE state, STATE targetState)
void
initStates(EVENT event, ITransition<STATE,EVENT,SUBJECT,?> transition)
void
initStates(EVENT event, STATE targetState)
<DATA> void
process(SUBJECT subject, EVENT event, DATA data)
protected abstract void
setState(SUBJECT subject, STATE state)
-
Methods inherited from class org.eclipse.net4j.util.lifecycle.Lifecycle
activate, checkActive, checkArg, checkArg, checkInactive, checkNull, checkState, checkState, deactivate, deferredActivate, doActivate, doAfterActivate, doBeforeActivate, doBeforeDeactivate, doDeactivate, dump, getLifecycleState, isActive, isDeferredActivation, toString
-
Methods inherited from class org.eclipse.net4j.util.event.Notifier
addListener, addUniqueListener, fireEvent, fireEvent, fireEvent, fireThrowable, firstListenerAdded, getListeners, getNotificationService, hasListener, hasListeners, lastListenerRemoved, listenerAdded, listenerRemoved, removeListener
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.eclipse.net4j.util.event.INotifier
addListener, getListeners, hasListeners, removeListener
-
-
-
-
Field Detail
-
IGNORE
public static final ITransition IGNORE
-
FAIL
public static final ITransition FAIL
-
-
Method Detail
-
getStates
public final STATE[] getStates()
-
getEvents
public final EVENT[] getEvents()
-
getTransition
public final ITransition<STATE,EVENT,SUBJECT,?> getTransition(STATE state, EVENT event)
-
init
public final void init(STATE state, EVENT event, ITransition<STATE,EVENT,SUBJECT,?> transition)
-
initEvents
public final void initEvents(STATE state, ITransition<STATE,EVENT,SUBJECT,?> transition)
-
initStates
public final void initStates(EVENT event, ITransition<STATE,EVENT,SUBJECT,?> transition)
-
initAll
public final void initAll(STATE targetState)
-
initAll
public final void initAll(ITransition<STATE,EVENT,SUBJECT,?> transition)
-
createIgnoreTransition
protected ITransition<STATE,EVENT,SUBJECT,?> createIgnoreTransition(STATE state, EVENT event)
-
createFailTransition
protected ITransition<STATE,EVENT,SUBJECT,?> createFailTransition(STATE state, EVENT event)
-
formatProcessMessage
protected java.lang.String formatProcessMessage(SUBJECT subject, STATE state, EVENT event, java.lang.Object data)
-
formatIgnoreMessage
protected java.lang.String formatIgnoreMessage(SUBJECT subject, STATE state, EVENT event, java.lang.Object data)
-
formatFailMessage
protected java.lang.String formatFailMessage(SUBJECT subject, STATE state, EVENT event, java.lang.Object data)
-
-