
org.squirrelframework.foundation.fsm.impl.TransitionBuilderImpl Maven / Gradle / Ivy
package org.squirrelframework.foundation.fsm.impl;
import org.squirrelframework.foundation.component.SquirrelComponent;
import org.squirrelframework.foundation.fsm.*;
import org.squirrelframework.foundation.fsm.builder.*;
import java.util.List;
import java.util.Map;
class TransitionBuilderImpl, S, E, C> implements
ExternalTransitionBuilder, InternalTransitionBuilder, LocalTransitionBuilder,
From, To, On, SquirrelComponent {
private final Map> states;
private MutableState sourceState;
private MutableState targetState;
private MutableTransition transition;
private final TransitionType transitionType;
private final int priority;
private final ExecutionContext executionContext;
TransitionBuilderImpl(Map> states, TransitionType transitionType,
int priority, ExecutionContext executionContext) {
this.states = states;
this.transitionType = transitionType;
this.priority = priority;
this.executionContext = executionContext;
}
@Override
public void perform(Action action) {
transition.addAction(action);
}
@Override
public void perform(List extends Action> actions) {
transition.addActions(actions);
}
@Override
public void evalMvel(String expression) {
Action action = FSM.newMvelAction(expression, executionContext);
transition.addAction(action);
}
@Override
public void callMethod(final String methodName) {
Action action = FSM.newMethodCallActionProxy(methodName, executionContext);
transition.addAction(action);
}
@Override
public On on(E event) {
transition = sourceState.addTransitionOn(event);
transition.setTargetState(targetState);
transition.setType(transitionType);
transition.setPriority(priority);
return this;
}
@Override
public To to(S stateId) {
targetState = FSM.getState(states, stateId);
return this;
}
@Override
public To toFinal(S stateId) {
targetState = FSM.getState(states, stateId);
if(!targetState.isFinalState()) {
targetState.setFinal(true);
}
return this;
}
@Override
public From from(S stateId) {
sourceState = FSM.getState(states, stateId);
return this;
}
@Override
public When when(Condition condition) {
transition.setCondition(condition);
return this;
}
@Override
public When whenMvel(String expression) {
Condition cond = FSM.newMvelCondition(expression, executionContext.getScriptManager());
transition.setCondition(cond);
return this;
}
@Override
public To within(S stateId) {
sourceState = targetState = FSM.getState(states, stateId);
return this;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy