package org.squirrelframework.foundation.fsm.impl;
import org.squirrelframework.foundation.component.SquirrelComponent;
import org.squirrelframework.foundation.fsm.Action;
import org.squirrelframework.foundation.fsm.MutableState;
import org.squirrelframework.foundation.fsm.StateMachine;
import org.squirrelframework.foundation.fsm.builder.EntryExitActionBuilder;
import java.util.List;
class EntryExitActionBuilderImpl<T extends StateMachine<T, S, E, C>, S, E, C> implements
EntryExitActionBuilder<T, S, E, C>, SquirrelComponent {
private final boolean isEntryAction;
private final MutableState<T, S, E, C> state;
private final ExecutionContext executionContext;
EntryExitActionBuilderImpl(MutableState<T, S, E, C> state,
boolean isEntryAction, ExecutionContext executionContext) {
this.state = state;
this.isEntryAction = isEntryAction;
this.executionContext = executionContext;
}
@Override
public void perform(Action<T, S, E, C> action) {
if(isEntryAction) {
state.addEntryAction(action);
} else {
state.addExitAction(action);
}
}
@Override
public void perform(List<? extends Action<T, S, E, C>> actions) {
if(isEntryAction) {
state.addEntryActions(actions);
} else {
state.addExitActions(actions);
}
}
@Override
public void evalMvel(String expression) {
Action<T, S, E, C> action = FSM.newMvelAction(expression, executionContext);
perform(action);
}
@Override
public void callMethod(String methodName) {
Action<T, S, E, C> action = FSM.newMethodCallActionProxy(methodName, executionContext);
perform(action);
}
}