All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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> 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