o Added some missing Javadoc for STatemachine module Project: http://git-wip-us.apache.org/repos/asf/mina/repo Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/c6f68526 Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/c6f68526 Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/c6f68526
Branch: refs/heads/2.0 Commit: c6f68526e8dd8cd23d07145ffad0710476f7074e Parents: 972449e Author: Emmanuel Lécharny <elecha...@symas.com> Authored: Mon Dec 26 18:35:33 2016 +0100 Committer: Emmanuel Lécharny <elecha...@symas.com> Committed: Mon Dec 26 18:35:33 2016 +0100 ---------------------------------------------------------------------- .../org/apache/mina/statemachine/State.java | 8 ++++++ .../transition/AbstractTransition.java | 30 ++++++++++++++++++++ .../statemachine/transition/Transition.java | 19 +++++++++++++ .../mina/statemachine/StateMachineTest.java | 10 +++++++ 4 files changed, 67 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina/blob/c6f68526/mina-statemachine/src/main/java/org/apache/mina/statemachine/State.java ---------------------------------------------------------------------- diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/State.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/State.java index 0ea35bb..6cb9f40 100644 --- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/State.java +++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/State.java @@ -45,14 +45,18 @@ import org.apache.mina.statemachine.transition.Transition; * @author <a href="http://mina.apache.org">Apache MINA Project</a> */ public class State { + /** The state ID */ private final String id; + /** The paret state */ private final State parent; private List<TransitionHolder> transitionHolders = new ArrayList<TransitionHolder>(); + /** The list of transitions for this state */ private List<Transition> transitions = Collections.emptyList(); + /** The list of transitions that */ private List<SelfTransition> onEntries = new ArrayList<SelfTransition>(); private List<SelfTransition> onExits = new ArrayList<SelfTransition>(); @@ -124,7 +128,9 @@ public class State { if (onEntrySelfTransaction == null) { throw new IllegalArgumentException("transition"); } + onEntries.add(onEntrySelfTransaction); + return this; } @@ -138,7 +144,9 @@ public class State { if (onExitSelfTransaction == null) { throw new IllegalArgumentException("transition"); } + onExits.add(onExitSelfTransaction); + return this; } http://git-wip-us.apache.org/repos/asf/mina/blob/c6f68526/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/AbstractTransition.java ---------------------------------------------------------------------- diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/AbstractTransition.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/AbstractTransition.java index e8645d8..3eb66f8 100644 --- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/AbstractTransition.java +++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/AbstractTransition.java @@ -32,8 +32,10 @@ import org.apache.mina.statemachine.event.Event; * @author <a href="http://mina.apache.org">Apache MINA Project</a> */ public abstract class AbstractTransition implements Transition { + /** The accepted event ID */ private final Object eventId; + /** The next state, if any */ private final State nextState; /** @@ -58,10 +60,38 @@ public abstract class AbstractTransition implements Transition { this.nextState = nextState; } + /** + * Creates a new instance with the specified {@link State} as next state + * and for the wild card {@link Event} id. + * + * @param nextState the next {@link State}. + */ + public AbstractTransition(State nextState) { + this.eventId = Event.WILDCARD_EVENT_ID; + this.nextState = nextState; + } + + /** + * Creates a new instance with a reflexive {@link State} as next state + * and for the wild card {@link Event} id. + */ + public AbstractTransition() { + this.eventId = Event.WILDCARD_EVENT_ID; + this.nextState = null; + } + + /** + * {@inheritDoc} + */ + @Override public State getNextState() { return nextState; } + /** + * {@inheritDoc} + */ + @Override public boolean execute(Event event) { if (!eventId.equals(Event.WILDCARD_EVENT_ID) && !eventId.equals(event.getId())) { return false; http://git-wip-us.apache.org/repos/asf/mina/blob/c6f68526/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/Transition.java ---------------------------------------------------------------------- diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/Transition.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/Transition.java index 7166602..c7f1abf 100644 --- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/Transition.java +++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/Transition.java @@ -26,6 +26,21 @@ import org.apache.mina.statemachine.event.Event; /** * The interface implemented by classes which need to react on transitions * between states. + * + * A Transition must implement two methods + * <ul> + * <li>execute : a method called when we process the transition</li> + * <li>getNextState : a method that gives the next state for this transition</li> + * </ul> + * + * Each Transition accepts two parameters : + * <ul> + * <li>An event ID : this defines the event this transition will accept</li> + * <li>A next state</li> + * </ul> + * + * The event ID might be '*', which means the transition will accept any event. + * The next state can be null, which means teh next state is the current state. * * @author <a href="http://mina.apache.org">Apache MINA Project</a> */ @@ -35,6 +50,10 @@ public interface Transition { * {@link Transition} to determine whether it actually applies for the * specified {@link Event}. If this {@link Transition} doesn't apply * nothing should be executed and <tt>false</tt> must be returned. + * The method will accept any {@link Event} if it is registered with the + * wild card event ID ('*'), and the event ID it is declared for (ie, + * the event ID that has been passed as a parameter to this transition + * constructor.) * * @param event the current {@link Event}. * @return <tt>true</tt> if the {@link Transition} was executed, http://git-wip-us.apache.org/repos/asf/mina/blob/c6f68526/mina-statemachine/src/test/java/org/apache/mina/statemachine/StateMachineTest.java ---------------------------------------------------------------------- diff --git a/mina-statemachine/src/test/java/org/apache/mina/statemachine/StateMachineTest.java b/mina-statemachine/src/test/java/org/apache/mina/statemachine/StateMachineTest.java index 467a411..f9b154c 100644 --- a/mina-statemachine/src/test/java/org/apache/mina/statemachine/StateMachineTest.java +++ b/mina-statemachine/src/test/java/org/apache/mina/statemachine/StateMachineTest.java @@ -88,6 +88,7 @@ public class StateMachineTest { @Override protected boolean doExecute(Event event) { event.getContext().setAttribute("success", true); + return true; } } @@ -104,6 +105,7 @@ public class StateMachineTest { @Override protected boolean doExecute(Event event) { StateControl.breakAndContinue(); + return true; } } @@ -121,9 +123,13 @@ public class StateMachineTest { this.stateId = stateId; } + /** + * {@inheritDoc} + */ @Override protected boolean doExecute(Event event) { StateControl.breakAndGotoNow(stateId); + return true; } } @@ -141,9 +147,13 @@ public class StateMachineTest { this.stateId = stateId; } + /** + * {@inheritDoc} + */ @Override protected boolean doExecute(Event event) { StateControl.breakAndGotoNext(stateId); + return true; } }