You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2017/10/07 05:38:03 UTC
[2/2] mina git commit: Formating and switch to Java 8
Formating and switch to Java 8
Project: http://git-wip-us.apache.org/repos/asf/mina/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/87e4ac5f
Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/87e4ac5f
Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/87e4ac5f
Branch: refs/heads/2.0
Commit: 87e4ac5f187d33a3ac3bcf1da414140c32f24e1d
Parents: e41a767
Author: Emmanuel Lécharny <el...@symas.com>
Authored: Sat Oct 7 07:37:59 2017 +0200
Committer: Emmanuel Lécharny <el...@symas.com>
Committed: Sat Oct 7 07:37:59 2017 +0200
----------------------------------------------------------------------
.../statemachine/BreakAndCallException.java | 1 +
.../statemachine/BreakAndGotoException.java | 1 +
.../org/apache/mina/statemachine/State.java | 16 +--
.../apache/mina/statemachine/StateControl.java | 3 -
.../apache/mina/statemachine/StateMachine.java | 100 +++++++++++--------
.../mina/statemachine/StateMachineFactory.java | 54 +++++++---
.../statemachine/StateMachineProxyBuilder.java | 6 +-
.../annotation/IoFilterTransition.java | 2 -
.../annotation/IoFilterTransitions.java | 3 -
.../annotation/IoHandlerTransition.java | 2 -
.../annotation/IoHandlerTransitions.java | 3 -
.../statemachine/annotation/Transition.java | 1 -
.../context/AbstractStateContext.java | 22 +++-
.../mina/statemachine/context/StateContext.java | 1 -
.../statemachine/event/DefaultEventFactory.java | 6 +-
.../apache/mina/statemachine/event/Event.java | 4 +
.../event/EventArgumentsInterceptor.java | 3 -
.../mina/statemachine/event/EventFactory.java | 10 +-
.../mina/statemachine/event/IoFilterEvents.java | 6 +-
.../statemachine/event/IoHandlerEvents.java | 8 +-
.../transition/AbstractTransition.java | 7 +-
.../transition/AmbiguousMethodException.java | 1 -
.../transition/MethodSelfTransition.java | 23 +++--
.../transition/MethodTransition.java | 25 ++++-
.../transition/NoSuchMethodException.java | 1 -
.../statemachine/transition/NoopTransition.java | 4 +
.../statemachine/transition/Transition.java | 1 -
27 files changed, 199 insertions(+), 115 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/BreakAndCallException.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/BreakAndCallException.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/BreakAndCallException.java
index 2ac8acd..a3cf34c 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/BreakAndCallException.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/BreakAndCallException.java
@@ -41,6 +41,7 @@ class BreakAndCallException extends BreakException {
if (stateId == null) {
throw new IllegalArgumentException("stateId");
}
+
this.stateId = stateId;
this.returnToStateId = returnToStateId;
this.now = now;
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/BreakAndGotoException.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/BreakAndGotoException.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/BreakAndGotoException.java
index c85b849..12b10a5 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/BreakAndGotoException.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/BreakAndGotoException.java
@@ -35,6 +35,7 @@ class BreakAndGotoException extends BreakException {
if (stateId == null) {
throw new IllegalArgumentException("stateId");
}
+
this.stateId = stateId;
this.now = now;
}
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/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 6cb9f40..3844f5b 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
@@ -23,7 +23,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import org.apache.mina.statemachine.event.Event;
import org.apache.mina.statemachine.transition.SelfTransition;
import org.apache.mina.statemachine.transition.Transition;
@@ -48,18 +47,19 @@ public class State {
/** The state ID */
private final String id;
- /** The paret state */
+ /** The parent state */
private final State parent;
- private List<TransitionHolder> transitionHolders = new ArrayList<TransitionHolder>();
+ private List<TransitionHolder> transitionHolders = new ArrayList<>();
/** 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>();
+ /** The list of entry transitions on a state */
+ private List<SelfTransition> onEntries = new ArrayList<>();
- private List<SelfTransition> onExits = new ArrayList<SelfTransition>();
+ /** The list of exit transition from a state */
+ private List<SelfTransition> onExits = new ArrayList<>();
/**
* Creates a new {@link State} with the specified id.
@@ -151,7 +151,8 @@ public class State {
}
private void updateTransitions() {
- transitions = new ArrayList<Transition>(transitionHolders.size());
+ transitions = new ArrayList<>(transitionHolders.size());
+
for (TransitionHolder holder : transitionHolders) {
transitions.add(holder.transition);
}
@@ -240,6 +241,7 @@ public class State {
this.weight = weight;
}
+ @Override
public int compareTo(TransitionHolder o) {
return (weight > o.weight) ? 1 : (weight < o.weight ? -1 : 0);
}
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateControl.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateControl.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateControl.java
index ea61eb1..6e0a1a3 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateControl.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateControl.java
@@ -19,9 +19,6 @@
*/
package org.apache.mina.statemachine;
-import org.apache.mina.statemachine.event.Event;
-import org.apache.mina.statemachine.transition.Transition;
-
/**
* Allows for programmatic control of a state machines execution.
* <p>
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachine.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachine.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachine.java
index dfc031c..e4fd0ec 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachine.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachine.java
@@ -21,11 +21,12 @@ package org.apache.mina.statemachine;
import java.util.Collection;
import java.util.Collections;
+import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.Stack;
+import java.util.concurrent.ConcurrentLinkedDeque;
import org.apache.mina.statemachine.context.StateContext;
import org.apache.mina.statemachine.event.Event;
@@ -55,14 +56,16 @@ public class StateMachine {
private final Map<String, State> states;
private final ThreadLocal<Boolean> processingThreadLocal = new ThreadLocal<Boolean>() {
+ @Override
protected Boolean initialValue() {
return Boolean.FALSE;
}
};
private final ThreadLocal<LinkedList<Event>> eventQueueThreadLocal = new ThreadLocal<LinkedList<Event>>() {
+ @Override
protected LinkedList<Event> initialValue() {
- return new LinkedList<Event>();
+ return new LinkedList<>();
}
};
@@ -74,10 +77,12 @@ public class StateMachine {
* @param startStateId the id of the start {@link State}.
*/
public StateMachine(State[] states, String startStateId) {
- this.states = new HashMap<String, State>();
+ this.states = new HashMap<>();
+
for (State s : states) {
this.states.put(s.getId(), s);
}
+
this.startState = getState(startStateId);
}
@@ -99,11 +104,13 @@ public class StateMachine {
* @return the {@link State}
* @throws NoSuchStateException if no matching {@link State} could be found.
*/
- public State getState(String id) throws NoSuchStateException {
+ public State getState(String id) {
State state = states.get(id);
+
if (state == null) {
throw new NoSuchStateException(id);
}
+
return state;
}
@@ -138,21 +145,22 @@ public class StateMachine {
* event.
*/
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("State machine called recursively. Queuing event " + event + " for later processing.");
+ LOGGER.debug("State machine called recursively. Queuing event {} for later processing.", event);
}
} else {
processingThreadLocal.set(true);
+
try {
if (context.getCurrentState() == null) {
context.setCurrentState(startState);
}
+
processEvents(eventQueue);
} finally {
processingThreadLocal.set(false);
}
}
}
-
}
private void processEvents(LinkedList<Event> eventQueue) {
@@ -168,82 +176,91 @@ public class StateMachine {
for (Transition t : state.getTransitions()) {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("Trying transition " + t);
+ LOGGER.debug("Trying transition {}", t);
}
try {
if (t.execute(event)) {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("Transition " + t + " executed successfully.");
+ LOGGER.debug("Transition {} executed successfully.", t);
}
+
setCurrentState(context, t.getNextState());
return;
}
} catch (BreakAndContinueException bace) {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("BreakAndContinueException thrown in " + "transition " + t
- + ". Continuing with next transition.");
+ LOGGER.debug("BreakAndContinueException thrown in transition {}. Continuing with next transition.", t);
}
} catch (BreakAndGotoException bage) {
State newState = getState(bage.getStateId());
if (bage.isNow()) {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("BreakAndGotoException thrown in " + "transition " + t + ". Moving to state "
- + newState.getId() + " now.");
+ LOGGER.debug("BreakAndGotoException thrown in transition {}. Moving to state {} now", t,
+ newState.getId());
}
+
setCurrentState(context, newState);
handle(newState, event);
} else {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("BreakAndGotoException thrown in " + "transition " + t + ". Moving to state "
- + newState.getId() + " next.");
+ LOGGER.debug("BreakAndGotoException thrown in transition {}. Moving to state {} next.",
+ t, newState.getId());
}
+
setCurrentState(context, newState);
}
+
return;
} catch (BreakAndCallException bace) {
State newState = getState(bace.getStateId());
- Stack<State> callStack = getCallStack(context);
+ Deque<State> callStack = getCallStack(context);
State returnTo = bace.getReturnToStateId() != null ? getState(bace.getReturnToStateId()) : context
.getCurrentState();
callStack.push(returnTo);
if (bace.isNow()) {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("BreakAndCallException thrown in " + "transition " + t + ". Moving to state "
- + newState.getId() + " now.");
+ LOGGER.debug("BreakAndCallException thrown in transition {}. Moving to state {} now.",
+ t, newState.getId());
}
+
setCurrentState(context, newState);
handle(newState, event);
} else {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("BreakAndCallException thrown in " + "transition " + t + ". Moving to state "
- + newState.getId() + " next.");
+ LOGGER.debug("BreakAndCallException thrown in transition {}. Moving to state {} next.",
+ t, newState.getId());
}
+
setCurrentState(context, newState);
}
+
return;
} catch (BreakAndReturnException bare) {
- Stack<State> callStack = getCallStack(context);
+ Deque<State> callStack = getCallStack(context);
State newState = callStack.pop();
if (bare.isNow()) {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("BreakAndReturnException thrown in " + "transition " + t + ". Moving to state "
- + newState.getId() + " now.");
+ LOGGER.debug("BreakAndReturnException thrown in transition {}. Moving to state {} now.",
+ t, newState.getId());
}
+
setCurrentState(context, newState);
handle(newState, event);
} else {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("BreakAndReturnException thrown in " + "transition " + t + ". Moving to state "
- + newState.getId() + " next.");
+ LOGGER.debug("BreakAndReturnException thrown in transition {}. Moving to state {} next.",
+ t, newState.getId());
}
+
setCurrentState(context, newState);
}
+
return;
}
}
@@ -252,7 +269,6 @@ public class StateMachine {
* No transition could handle the event. Try with the parent state if
* there is one.
*/
-
if (state.getParent() != null) {
handle(state.getParent(), event);
} else {
@@ -260,13 +276,15 @@ public class StateMachine {
}
}
- private Stack<State> getCallStack(StateContext context) {
+ private Deque<State> getCallStack(StateContext context) {
@SuppressWarnings("unchecked")
- Stack<State> callStack = (Stack<State>) context.getAttribute(CALL_STACK);
+ Deque<State> callStack = (Deque<State>) context.getAttribute(CALL_STACK);
+
if (callStack == null) {
- callStack = new Stack<State>();
+ callStack = new ConcurrentLinkedDeque<>();
context.setAttribute(CALL_STACK, callStack);
}
+
return callStack;
}
@@ -274,10 +292,11 @@ public class StateMachine {
if (newState != null) {
if (LOGGER.isDebugEnabled()) {
if (newState != context.getCurrentState()) {
- LOGGER.debug("Leaving state " + context.getCurrentState().getId());
- LOGGER.debug("Entering state " + newState.getId());
+ LOGGER.debug("Leaving state {}", context.getCurrentState().getId());
+ LOGGER.debug("Entering state {}", newState.getId());
}
}
+
executeOnExits(context, context.getCurrentState());
executeOnEntries(context, newState);
context.setCurrentState(newState);
@@ -288,16 +307,19 @@ public class StateMachine {
List<SelfTransition> onExits = state.getOnExitSelfTransitions();
boolean isExecuted = false;
- if (onExits != null)
+ if (onExits != null) {
for (SelfTransition selfTransition : onExits) {
selfTransition.execute(context, state);
+
if (LOGGER.isDebugEnabled()) {
isExecuted = true;
- LOGGER.debug("Executing onEntry action for " + state.getId());
+ LOGGER.debug("Executing onEntry action for {}", state.getId());
}
}
+ }
+
if (LOGGER.isDebugEnabled() && !isExecuted) {
- LOGGER.debug("No onEntry action for " + state.getId());
+ LOGGER.debug("No onEntry action for {}", state.getId());
}
}
@@ -306,19 +328,19 @@ public class StateMachine {
List<SelfTransition> onEntries = state.getOnEntrySelfTransitions();
boolean isExecuted = false;
- if (onEntries != null)
+ if (onEntries != null) {
for (SelfTransition selfTransition : onEntries) {
selfTransition.execute(context, state);
+
if (LOGGER.isDebugEnabled()) {
isExecuted = true;
- LOGGER.debug("Executing onExit action for " + state.getId());
+ LOGGER.debug("Executing onExit action for {}", state.getId());
}
}
+ }
+
if (LOGGER.isDebugEnabled() && !isExecuted) {
- LOGGER.debug("No onEntry action for " + state.getId());
-
+ LOGGER.debug("No onEntry action for {}", state.getId());
}
-
}
-
}
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachineFactory.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachineFactory.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachineFactory.java
index b5f5e58..611ffbf 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachineFactory.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachineFactory.java
@@ -36,11 +36,9 @@ import org.apache.mina.statemachine.annotation.OnEntry;
import org.apache.mina.statemachine.annotation.OnExit;
import org.apache.mina.statemachine.annotation.Transition;
import org.apache.mina.statemachine.annotation.TransitionAnnotation;
-import org.apache.mina.statemachine.annotation.Transitions;
import org.apache.mina.statemachine.event.Event;
import org.apache.mina.statemachine.transition.MethodSelfTransition;
import org.apache.mina.statemachine.transition.MethodTransition;
-import org.apache.mina.statemachine.transition.SelfTransition;
/**
* Creates {@link StateMachine}s by reading {@link org.apache.mina.statemachine.annotation.State},
@@ -79,10 +77,12 @@ public class StateMachineFactory {
*/
public static StateMachineFactory getInstance(Class<? extends Annotation> transitionAnnotation) {
TransitionAnnotation a = transitionAnnotation.getAnnotation(TransitionAnnotation.class);
+
if (a == null) {
throw new IllegalArgumentException("The annotation class " + transitionAnnotation
+ " has not been annotated with the " + TransitionAnnotation.class.getName() + " annotation");
}
+
return new StateMachineFactory(transitionAnnotation, a.value(), OnEntry.class, OnExit.class);
}
@@ -139,12 +139,12 @@ public class StateMachineFactory {
*/
public StateMachine create(String start, Object handler, Object... handlers) {
- Map<String, State> states = new HashMap<String, State>();
- List<Object> handlersList = new ArrayList<Object>(1 + handlers.length);
+ Map<String, State> states = new HashMap<>();
+ List<Object> handlersList = new ArrayList<>(1 + handlers.length);
handlersList.add(handler);
handlersList.addAll(Arrays.asList(handlers));
- LinkedList<Field> fields = new LinkedList<Field>();
+ LinkedList<Field> fields = new LinkedList<>();
for (Object h : handlersList) {
fields.addAll(getFields(h instanceof Class ? (Class<?>) h : h.getClass()));
}
@@ -177,24 +177,28 @@ public class StateMachineFactory {
if (m.isAnnotationPresent(OnEntry.class)) {
OnEntry onEntryAnnotation = (OnEntry) m.getAnnotation(onEntrySelfTransitionAnnotation);
State state = states.get(onEntryAnnotation.value());
+
if (state == null) {
throw new StateMachineCreationException("Error encountered "
+ "when processing onEntry annotation in method " + m + ". state " + onEntryAnnotation.value()
+ " not Found.");
}
+
state.addOnEntrySelfTransaction(new MethodSelfTransition(m, handler));
}
if (m.isAnnotationPresent(OnExit.class)) {
OnExit onExitAnnotation = (OnExit) m.getAnnotation(onExitSelfTransitionAnnotation);
State state = states.get(onExitAnnotation.value());
+
if (state == null) {
throw new StateMachineCreationException("Error encountered "
+ "when processing onExit annotation in method " + m + ". state " + onExitAnnotation.value()
+ " not Found.");
}
+
state.addOnExitSelfTransaction(new MethodSelfTransition(m, handler));
}
@@ -207,6 +211,7 @@ public class StateMachineFactory {
Method[] methods = handler.getClass().getDeclaredMethods();
Arrays.sort(methods, new Comparator<Method>() {
+ @Override
public int compare(Method m1, Method m2) {
return m1.toString().compareTo(m2.toString());
}
@@ -215,11 +220,13 @@ public class StateMachineFactory {
for (Method m : methods) {
setupSelfTransitions(m, onEntrySelfTransitionAnnotation, onExitSelfTransitionAnnotation, states, handler);
- List<TransitionWrapper> transitionAnnotations = new ArrayList<TransitionWrapper>();
+ List<TransitionWrapper> transitionAnnotations = new ArrayList<>();
+
if (m.isAnnotationPresent(transitionAnnotation)) {
transitionAnnotations.add(new TransitionWrapper(transitionAnnotation, m
.getAnnotation(transitionAnnotation)));
}
+
if (m.isAnnotationPresent(transitionsAnnotation)) {
transitionAnnotations.addAll(Arrays.asList(new TransitionsWrapper(transitionAnnotation,
transitionsAnnotation, m.getAnnotation(transitionsAnnotation)).value()));
@@ -231,20 +238,24 @@ public class StateMachineFactory {
for (TransitionWrapper annotation : transitionAnnotations) {
Object[] eventIds = annotation.on();
+
if (eventIds.length == 0) {
- throw new StateMachineCreationException("Error encountered " + "when processing method " + m
+ throw new StateMachineCreationException("Error encountered when processing method " + m
+ ". No event ids specified.");
}
+
if (annotation.in().length == 0) {
- throw new StateMachineCreationException("Error encountered " + "when processing method " + m
+ throw new StateMachineCreationException("Error encountered when processing method " + m
+ ". No states specified.");
}
State next = null;
+
if (!annotation.next().equals(Transition.SELF)) {
next = states.get(annotation.next());
+
if (next == null) {
- throw new StateMachineCreationException("Error encountered " + "when processing method " + m
+ throw new StateMachineCreationException("Error encountered when processing method " + m
+ ". Unknown next state: " + annotation.next() + ".");
}
}
@@ -253,13 +264,16 @@ public class StateMachineFactory {
if (event == null) {
event = Event.WILDCARD_EVENT_ID;
}
+
if (!(event instanceof String)) {
event = event.toString();
}
+
for (String in : annotation.in()) {
State state = states.get(in);
+
if (state == null) {
- throw new StateMachineCreationException("Error encountered " + "when processing method "
+ throw new StateMachineCreationException("Error encountered when processing method "
+ m + ". Unknown state: " + in + ".");
}
@@ -271,7 +285,7 @@ public class StateMachineFactory {
}
static List<Field> getFields(Class<?> clazz) {
- LinkedList<Field> fields = new LinkedList<Field>();
+ LinkedList<Field> fields = new LinkedList<>();
for (Field f : clazz.getDeclaredFields()) {
if (!f.isAnnotationPresent(org.apache.mina.statemachine.annotation.State.class)) {
@@ -280,8 +294,8 @@ public class StateMachineFactory {
if ((f.getModifiers() & Modifier.STATIC) == 0 || (f.getModifiers() & Modifier.FINAL) == 0
|| !f.getType().equals(String.class)) {
- throw new StateMachineCreationException("Error encountered when " + "processing field " + f
- + ". Only static final " + "String fields can be used with the @State " + "annotation.");
+ throw new StateMachineCreationException("Error encountered when processing field " + f
+ + ". Only static final String fields can be used with the @State annotation.");
}
if (!f.isAccessible()) {
@@ -295,24 +309,27 @@ public class StateMachineFactory {
}
static State[] createStates(List<Field> fields) {
- LinkedHashMap<String, State> states = new LinkedHashMap<String, State>();
+ LinkedHashMap<String, State> states = new LinkedHashMap<>();
while (!fields.isEmpty()) {
int size = fields.size();
int numStates = states.size();
+
for (int i = 0; i < size; i++) {
Field f = fields.remove(0);
String value = null;
+
try {
value = (String) f.get(null);
} catch (IllegalAccessException iae) {
- throw new StateMachineCreationException("Error encountered when " + "processing field " + f + ".",
+ throw new StateMachineCreationException("Error encountered when processing field " + f + ".",
iae);
}
org.apache.mina.statemachine.annotation.State stateAnnotation = f
.getAnnotation(org.apache.mina.statemachine.annotation.State.class);
+
if (stateAnnotation.value().equals(org.apache.mina.statemachine.annotation.State.ROOT)) {
states.put(value, new State(value));
} else if (states.containsKey(stateAnnotation.value())) {
@@ -330,7 +347,7 @@ public class StateMachineFactory {
*/
if (states.size() == numStates) {
throw new StateMachineCreationException("Error encountered while creating "
- + "FSM. The following fields specify non-existing " + "parent states: " + fields);
+ + "FSM. The following fields specify non-existing parent states: " + fields);
}
}
@@ -367,6 +384,7 @@ public class StateMachineFactory {
private <T> T getParameter(String name, Class<T> returnType) {
try {
Method m = transitionClazz.getMethod(name);
+
if (!returnType.isAssignableFrom(m.getReturnType())) {
throw new NoSuchMethodException();
}
@@ -395,9 +413,11 @@ public class StateMachineFactory {
TransitionWrapper[] value() {
Annotation[] annos = getParameter("value", Annotation[].class);
TransitionWrapper[] wrappers = new TransitionWrapper[annos.length];
+
for (int i = 0; i < annos.length; i++) {
wrappers[i] = new TransitionWrapper(transitionClazz, annos[i]);
}
+
return wrappers;
}
@@ -405,9 +425,11 @@ public class StateMachineFactory {
private <T> T getParameter(String name, Class<T> returnType) {
try {
Method m = transitionsclazz.getMethod(name);
+
if (!returnType.isAssignableFrom(m.getReturnType())) {
throw new NoSuchMethodException();
}
+
return (T) m.invoke(annotation);
} catch (Exception e) {
throw new StateMachineCreationException("Could not get parameter '" + name
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachineProxyBuilder.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachineProxyBuilder.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachineProxyBuilder.java
index 267ec31..d0e1272 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachineProxyBuilder.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/StateMachineProxyBuilder.java
@@ -225,9 +225,11 @@ public class StateMachineProxyBuilder {
if ("hashCode".equals(method.getName()) && args == null) {
return Integer.valueOf(System.identityHashCode(proxy));
}
+
if ("equals".equals(method.getName()) && args.length == 1) {
return Boolean.valueOf(proxy == args[0]);
}
+
if ("toString".equals(method.getName()) && args == null) {
return (name != null ? name : proxy.getClass().getName()) + "@"
+ Integer.toHexString(System.identityHashCode(proxy));
@@ -238,6 +240,7 @@ public class StateMachineProxyBuilder {
}
args = args == null ? EMPTY_ARGUMENTS : args;
+
if (interceptor != null) {
args = interceptor.modify(args);
}
@@ -248,7 +251,8 @@ public class StateMachineProxyBuilder {
if (ignoreStateContextLookupFailure) {
return null;
}
- throw new IllegalStateException("Cannot determine state " + "context for method invocation: " + method);
+
+ throw new IllegalStateException("Cannot determine state context for method invocation: " + method);
}
Event event = eventFactory.create(context, method, args);
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoFilterTransition.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoFilterTransition.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoFilterTransition.java
index a9eb85d..d2907d5 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoFilterTransition.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoFilterTransition.java
@@ -24,8 +24,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.mina.core.filterchain.IoFilter;
-import org.apache.mina.statemachine.StateMachine;
import org.apache.mina.statemachine.event.IoFilterEvents;
/**
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoFilterTransitions.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoFilterTransitions.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoFilterTransitions.java
index 17e4439..bba8e82 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoFilterTransitions.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoFilterTransitions.java
@@ -24,9 +24,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.mina.core.filterchain.IoFilter;
-import org.apache.mina.statemachine.StateMachine;
-
/**
* Annotation used to annotate a method with several {@link IoFilterTransition}s.
* This should be used when creating {@link StateMachine}s for MINA's
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoHandlerTransition.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoHandlerTransition.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoHandlerTransition.java
index e502bf0..c1ffd21 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoHandlerTransition.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoHandlerTransition.java
@@ -24,8 +24,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.mina.core.service.IoHandler;
-import org.apache.mina.statemachine.StateMachine;
import org.apache.mina.statemachine.event.IoHandlerEvents;
/**
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoHandlerTransitions.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoHandlerTransitions.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoHandlerTransitions.java
index b2c0806..bed4f51 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoHandlerTransitions.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/IoHandlerTransitions.java
@@ -24,9 +24,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.mina.core.service.IoHandler;
-import org.apache.mina.statemachine.StateMachine;
-
/**
* Annotation used to annotate a method with several {@link IoHandlerTransition}s.
* This should be used when creating {@link StateMachine}s for MINA's
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/Transition.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/Transition.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/Transition.java
index 8ccd6f3..f23d76d 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/Transition.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/annotation/Transition.java
@@ -24,7 +24,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.mina.statemachine.StateMachine;
import org.apache.mina.statemachine.event.Event;
/**
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/context/AbstractStateContext.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/context/AbstractStateContext.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/context/AbstractStateContext.java
index 39c0ff4..9c7debe 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/context/AbstractStateContext.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/context/AbstractStateContext.java
@@ -35,29 +35,49 @@ public abstract class AbstractStateContext implements StateContext {
private Map<Object, Object> attributes = null;
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public Object getAttribute(Object key) {
return getAttributes().get(key);
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public State getCurrentState() {
return currentState;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public void setAttribute(Object key, Object value) {
getAttributes().put(key, value);
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public void setCurrentState(State state) {
currentState = state;
}
protected Map<Object, Object> getAttributes() {
if (attributes == null) {
- attributes = new HashMap<Object, Object>();
+ attributes = new HashMap<>();
}
return attributes;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public String toString() {
StringBuilder sb = new StringBuilder();
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/context/StateContext.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/context/StateContext.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/context/StateContext.java
index 49fa0dd..483c5bd 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/context/StateContext.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/context/StateContext.java
@@ -20,7 +20,6 @@
package org.apache.mina.statemachine.context;
import org.apache.mina.statemachine.State;
-import org.apache.mina.statemachine.StateMachine;
/**
* {@link StateContext} objects are used to store the current {@link State} and
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/DefaultEventFactory.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/DefaultEventFactory.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/DefaultEventFactory.java
index d613ead..b7cd812 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/DefaultEventFactory.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/DefaultEventFactory.java
@@ -30,9 +30,11 @@ import org.apache.mina.statemachine.context.StateContext;
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
public class DefaultEventFactory implements EventFactory {
-
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public Event create(StateContext context, Method method, Object[] arguments) {
return new Event(method.getName(), context, arguments);
}
-
}
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/Event.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/Event.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/Event.java
index fad0475..b88eab7 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/Event.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/Event.java
@@ -59,12 +59,15 @@ public class Event {
if (id == null) {
throw new IllegalArgumentException("id");
}
+
if (context == null) {
throw new IllegalArgumentException("context");
}
+
if (arguments == null) {
throw new IllegalArgumentException("arguments");
}
+
this.id = id;
this.context = context;
this.arguments = arguments;
@@ -92,6 +95,7 @@ public class Event {
return arguments;
}
+ @Override
public String toString() {
StringBuilder sb = new StringBuilder();
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/EventArgumentsInterceptor.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/EventArgumentsInterceptor.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/EventArgumentsInterceptor.java
index b4da846..2b8ea9a 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/EventArgumentsInterceptor.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/EventArgumentsInterceptor.java
@@ -19,8 +19,6 @@
*/
package org.apache.mina.statemachine.event;
-import org.apache.mina.statemachine.StateMachine;
-
/**
* Intercepts the {@link Event} arguments before the {@link Event} is passed
* to the {@link StateMachine} and allows for the arguments to be modified.
@@ -38,5 +36,4 @@ public interface EventArgumentsInterceptor {
* modification is needed.
*/
Object[] modify(Object[] arguments);
-
}
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/EventFactory.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/EventFactory.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/EventFactory.java
index 52689c9..30994b5 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/EventFactory.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/EventFactory.java
@@ -21,7 +21,6 @@ package org.apache.mina.statemachine.event;
import java.lang.reflect.Method;
-import org.apache.mina.statemachine.StateMachineProxyBuilder;
import org.apache.mina.statemachine.context.StateContext;
/**
@@ -35,12 +34,9 @@ public interface EventFactory {
* Creates a new {@link Event} from the specified method and method
* arguments.
*
- * @param context
- * the current {@link StateContext}.
- * @param method
- * the method being invoked.
- * @param arguments
- * the method arguments.
+ * @param context the current {@link StateContext}.
+ * @param method the method being invoked.
+ * @param arguments the method arguments.
* @return the {@link Event} object.
*/
Event create(StateContext context, Method method, Object[] arguments);
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/IoFilterEvents.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/IoFilterEvents.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/IoFilterEvents.java
index dc2076f..65faa52 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/IoFilterEvents.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/IoFilterEvents.java
@@ -19,9 +19,6 @@
*/
package org.apache.mina.statemachine.event;
-import org.apache.mina.core.filterchain.IoFilter;
-import org.apache.mina.statemachine.annotation.IoFilterTransition;
-
/**
* Defines all possible MINA {@link IoFilter} events for use in {@link IoFilterTransition}
* annotations.
@@ -59,6 +56,9 @@ public enum IoFilterEvents {
/** The Write event */
WRITE("filterWrite"),
+ /** The InputClosed event */
+ INPUT_CLOSED("inputClosed"),
+
/** The Set Traffic Mask event */
SET_TRAFFIC_MASK("filterSetTrafficMask");
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/IoHandlerEvents.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/IoHandlerEvents.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/IoHandlerEvents.java
index 34f9e32..54ec50f 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/IoHandlerEvents.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/event/IoHandlerEvents.java
@@ -19,9 +19,6 @@
*/
package org.apache.mina.statemachine.event;
-import org.apache.mina.core.service.IoHandler;
-import org.apache.mina.statemachine.annotation.IoHandlerTransition;
-
/**
* Defines all possible MINA {@link IoHandler} events for use in {@link IoHandlerTransition}
* annotations.
@@ -44,12 +41,15 @@ public enum IoHandlerEvents {
/** The Session Idle event */
SESSION_IDLE("sessionIdle"),
- /** The Message Recived event */
+ /** The Message Received event */
MESSAGE_RECEIVED("messageReceived"),
/** The Message Sent event */
MESSAGE_SENT("messageSent"),
+ /** The InputClosed event */
+ INPUT_CLOSED("inputClosed"),
+
/** The Exception Caught event */
EXCEPTION_CAUGHT("exceptionCaught");
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/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 3eb66f8..677560d 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
@@ -20,7 +20,6 @@
package org.apache.mina.statemachine.transition;
import org.apache.mina.statemachine.State;
-import org.apache.mina.statemachine.StateMachine;
import org.apache.mina.statemachine.event.Event;
/**
@@ -111,7 +110,8 @@ public abstract class AbstractTransition implements Transition {
* next {@link State}. <tt>false</tt> otherwise.
*/
protected abstract boolean doExecute(Event event);
-
+
+ @Override
public boolean equals(Object o) {
if (o == this) {
return true;
@@ -141,6 +141,7 @@ public abstract class AbstractTransition implements Transition {
}
}
+ @Override
public int hashCode() {
int h = 17;
@@ -155,11 +156,13 @@ public abstract class AbstractTransition implements Transition {
return h;
}
+ @Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("eventId=").append(eventId);
sb.append(",nextState=").append(nextState);
+
return sb.toString();
}
}
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/AmbiguousMethodException.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/AmbiguousMethodException.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/AmbiguousMethodException.java
index ed58cf5..23df150 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/AmbiguousMethodException.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/AmbiguousMethodException.java
@@ -37,5 +37,4 @@ public class AmbiguousMethodException extends RuntimeException {
public AmbiguousMethodException(String methodName) {
super(methodName);
}
-
}
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodSelfTransition.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodSelfTransition.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodSelfTransition.java
index 40c62a0..a761c59 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodSelfTransition.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodSelfTransition.java
@@ -24,7 +24,6 @@ import java.lang.reflect.Method;
import java.util.Arrays;
import org.apache.mina.statemachine.State;
-import org.apache.mina.statemachine.StateMachine;
import org.apache.mina.statemachine.context.StateContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -66,10 +65,8 @@ public class MethodSelfTransition extends AbstractSelfTransition {
/**
* Creates a new instance
*
- * @param methodName
- * the target method.
- * @param target
- * the target object.
+ * @param methodName the target method.
+ * @param target the target object.
*/
public MethodSelfTransition(String methodName, Object target) {
@@ -78,12 +75,13 @@ public class MethodSelfTransition extends AbstractSelfTransition {
Method[] candidates = target.getClass().getMethods();
Method result = null;
- for (int i = 0; i < candidates.length; i++) {
- if (candidates[i].getName().equals(methodName)) {
+ for (Method candidate : candidates) {
+ if (candidate.getName().equals(methodName)) {
if (result != null) {
throw new AmbiguousMethodException(methodName);
}
- result = candidates[i];
+
+ result = candidate;
}
}
@@ -102,11 +100,16 @@ public class MethodSelfTransition extends AbstractSelfTransition {
return method;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public boolean doExecute(StateContext stateContext, State state) {
Class<?>[] types = method.getParameterTypes();
if (types.length == 0) {
invokeMethod(EMPTY_ARGUMENTS);
+
return true;
}
@@ -121,6 +124,7 @@ public class MethodSelfTransition extends AbstractSelfTransition {
if (types[i].isAssignableFrom(StateContext.class)) {
args[i++] = stateContext;
}
+
if ((i < types.length) && types[i].isAssignableFrom(State.class)) {
args[i++] = state;
}
@@ -135,15 +139,16 @@ public class MethodSelfTransition extends AbstractSelfTransition {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Executing method " + method + " with arguments " + Arrays.asList(arguments));
}
+
method.invoke(target, arguments);
} catch (InvocationTargetException ite) {
if (ite.getCause() instanceof RuntimeException) {
throw (RuntimeException) ite.getCause();
}
+
throw new MethodInvocationException(method, ite);
} catch (IllegalAccessException iae) {
throw new MethodInvocationException(method, iae);
}
}
-
}
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodTransition.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodTransition.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodTransition.java
index 2c37de8..064c57f 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodTransition.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodTransition.java
@@ -24,9 +24,6 @@ import java.lang.reflect.Method;
import java.util.Arrays;
import org.apache.mina.statemachine.State;
-import org.apache.mina.statemachine.StateMachine;
-import org.apache.mina.statemachine.StateMachineFactory;
-import org.apache.mina.statemachine.annotation.Transition;
import org.apache.mina.statemachine.context.StateContext;
import org.apache.mina.statemachine.event.Event;
import org.slf4j.Logger;
@@ -189,11 +186,16 @@ public class MethodTransition extends AbstractTransition {
return target;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public boolean doExecute(Event event) {
Class<?>[] types = method.getParameterTypes();
if (types.length == 0) {
invokeMethod(EMPTY_ARGUMENTS);
+
return true;
}
@@ -204,13 +206,17 @@ public class MethodTransition extends AbstractTransition {
Object[] args = new Object[types.length];
int i = 0;
+
if (match(types[i], event, Event.class)) {
args[i++] = event;
}
+
if (i < args.length && match(types[i], event.getContext(), StateContext.class)) {
args[i++] = event.getContext();
}
+
Object[] eventArgs = event.getArguments();
+
for (int j = 0; i < args.length && j < eventArgs.length; j++) {
if (match(types[i], eventArgs[j], Object.class)) {
args[i++] = eventArgs[j];
@@ -231,28 +237,36 @@ public class MethodTransition extends AbstractTransition {
if (paramType.equals(Boolean.TYPE)) {
return arg instanceof Boolean;
}
+
if (paramType.equals(Integer.TYPE)) {
return arg instanceof Integer;
}
+
if (paramType.equals(Long.TYPE)) {
return arg instanceof Long;
}
+
if (paramType.equals(Short.TYPE)) {
return arg instanceof Short;
}
+
if (paramType.equals(Byte.TYPE)) {
return arg instanceof Byte;
}
+
if (paramType.equals(Double.TYPE)) {
return arg instanceof Double;
}
+
if (paramType.equals(Float.TYPE)) {
return arg instanceof Float;
}
+
if (paramType.equals(Character.TYPE)) {
return arg instanceof Character;
}
}
+
return argType.isAssignableFrom(paramType) && paramType.isAssignableFrom(arg.getClass());
}
@@ -261,17 +275,20 @@ public class MethodTransition extends AbstractTransition {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Executing method " + method + " with arguments " + Arrays.asList(arguments));
}
+
method.invoke(target, arguments);
} catch (InvocationTargetException ite) {
if (ite.getCause() instanceof RuntimeException) {
throw (RuntimeException) ite.getCause();
}
+
throw new MethodInvocationException(method, ite);
} catch (IllegalAccessException iae) {
throw new MethodInvocationException(method, iae);
}
}
+ @Override
public boolean equals(Object o) {
if (o == this) {
return true;
@@ -286,6 +303,7 @@ public class MethodTransition extends AbstractTransition {
return method.equals(that.method) && target.equals(that.target);
}
+ @Override
public int hashCode() {
int h = 17;
h = h*37 + super.hashCode();
@@ -295,6 +313,7 @@ public class MethodTransition extends AbstractTransition {
return h;
}
+ @Override
public String toString() {
StringBuilder sb = new StringBuilder();
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/NoSuchMethodException.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/NoSuchMethodException.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/NoSuchMethodException.java
index ed91755..51cff57 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/NoSuchMethodException.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/NoSuchMethodException.java
@@ -37,5 +37,4 @@ public class NoSuchMethodException extends RuntimeException {
public NoSuchMethodException(String methodName) {
super(methodName);
}
-
}
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/NoopTransition.java
----------------------------------------------------------------------
diff --git a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/NoopTransition.java b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/NoopTransition.java
index 9776620..9a8b7db 100644
--- a/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/NoopTransition.java
+++ b/mina-statemachine/src/main/java/org/apache/mina/statemachine/transition/NoopTransition.java
@@ -50,6 +50,10 @@ public class NoopTransition extends AbstractTransition {
super(eventId, nextState);
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
protected boolean doExecute(Event event) {
return true;
}
http://git-wip-us.apache.org/repos/asf/mina/blob/87e4ac5f/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 c7f1abf..3108714 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
@@ -20,7 +20,6 @@
package org.apache.mina.statemachine.transition;
import org.apache.mina.statemachine.State;
-import org.apache.mina.statemachine.StateMachine;
import org.apache.mina.statemachine.event.Event;
/**