package org.squirrelframework.foundation.fsm.threadsafe;
import org.squirrelframework.foundation.fsm.UntypedStateMachine;
import org.squirrelframework.foundation.fsm.annotation.AsyncExecute;
import org.squirrelframework.foundation.fsm.annotation.ContextInsensitive;
import org.squirrelframework.foundation.fsm.annotation.StateMachineParameters;
import org.squirrelframework.foundation.fsm.impl.AbstractUntypedStateMachine;
@ContextInsensitive
@StateMachineParameters(stateType=String.class, eventType=String.class, contextType=UntypedStateMachine.class)
public class ConcurrentSimpleStateMachine extends AbstractUntypedStateMachine {
StringBuilder logger = new StringBuilder();
StringBuilder logger2 = new StringBuilder();
Thread fromAToBCallThread = null;
Thread fromBToCCallThread = null;
@AsyncExecute
protected void fromAToB(String from, String to, String event) {
logger.append("fromAToB");
fromAToBCallThread = Thread.currentThread();
fire("SECOND");
}
protected void fromBToC(String from, String to, String event) {
logger.append("fromBToC");
fromBToCCallThread = Thread.currentThread();
}
@Override
protected void beforeActionInvoked(Object fromState, Object toState, Object event, Object context) {
if (logger.length() > 0) {
logger.append('.');
}
if(logger2.length() > 0) {
logger2.append(", ");
}
}
@Override
protected void afterActionInvoked(Object fromState, Object toState, Object event, Object context) {
logger2.append(fromState+"-"+toState);
}
}