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

org.squirrelframework.foundation.fsm.impl.FSM Maven / Gradle / Ivy

package org.squirrelframework.foundation.fsm.impl;

import org.squirrelframework.foundation.component.SquirrelProvider;
import org.squirrelframework.foundation.fsm.*;
import org.squirrelframework.foundation.fsm.builder.*;
import org.squirrelframework.foundation.util.TypeReference;

import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;

abstract class FSM {

    static , S, E, C> StateContext newStateContext(
            StateMachine stateMachine, StateMachineData data,
            ImmutableState sourceState, E event, C context, 
            TransitionResult result, ActionExecutionService executor) {
        return new StateContextImpl(stateMachine, data, sourceState, event, context, result, executor);
    }

    static , S, E, C> MutableTransition newTransition() {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {});
    }

    static , S, E, C> MutableState newState(S stateId) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {}, 
                new Class[] { Object.class }, new Object[] { stateId });
    }
    
    static , S, E, C> MutableLinkedState newLinkedState(S stateId) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {}, 
                new Class[] { Object.class }, new Object[] { stateId });
    }
    
    static , S, E, C> MutableTimedState newTimedState(S stateId) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {}, 
                new Class[] { Object.class }, new Object[] { stateId });
    }
    
    static , S, E, C> MutableState getState(
            Map> states, S stateId) {
        MutableState state = states.get(stateId);
        if (state == null) {
            state = FSM.newState(stateId);
            states.put(stateId, state);
        }
        return state;
    }
    
    static , S, E, C> DeferBoundActionBuilder newDeferBoundActionBuilder(
            List> deferBoundActionInfoList, ExecutionContext executionContext
            ) {
        return SquirrelProvider.getInstance().newInstance( new TypeReference>(){}, 
                new Class[]{List.class, ExecutionContext.class}, new Object[]{deferBoundActionInfoList, executionContext} );
    }

    static , S, E, C> MultiTransitionBuilder newMultiTransitionBuilder(
            Map> states, TransitionType transitionType, int priority, ExecutionContext executionContext
    ) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {},
                new Class[] { Map.class, TransitionType.class, int.class, ExecutionContext.class },
                new Object[] { states, transitionType, priority, executionContext });
    }

    static , S, E, C> ExternalTransitionBuilder newExternalTransitionBuilder(
            Map> states, int priority, ExecutionContext executionContext) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {}, 
                new Class[] { Map.class, TransitionType.class, int.class, ExecutionContext.class }, 
                new Object[] { states, TransitionType.EXTERNAL, priority, executionContext });
    }
    
    static , S, E, C> LocalTransitionBuilder newLocalTransitionBuilder(
            Map> states, int priority, ExecutionContext executionContext) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {}, 
                new Class[] { Map.class, TransitionType.class, int.class, ExecutionContext.class }, 
                new Object[] { states, TransitionType.LOCAL, priority, executionContext });
    }
    
    static , S, E, C> InternalTransitionBuilder newInternalTransitionBuilder(
            Map> states, int priority, ExecutionContext executionContext) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {}, 
                new Class[] { Map.class, TransitionType.class, int.class, ExecutionContext.class }, 
                new Object[] { states, TransitionType.INTERNAL, priority, executionContext });
    }

    static , S, E, C> EntryExitActionBuilder newEntryExitActionBuilder(
            MutableState state, boolean isEntryAction, ExecutionContext executionContext) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {}, 
                new Class[] { MutableState.class, boolean.class, ExecutionContext.class}, 
                new Object[] { state, isEntryAction, executionContext});
    }

    static , S, E, C> MethodCallActionImpl newMethodCallAction(
            Method method, int weight, ExecutionContext executionContext) {
        return SquirrelProvider.getInstance().newInstance( 
                new TypeReference>() {}, 
                new Class[] { Method.class, int.class, ExecutionContext.class }, 
                new Object[] { method, weight, executionContext } );
    }
    
    static , S, E, C> MethodCallActionProxyImpl newMethodCallActionProxy(
            String methodName, ExecutionContext executionContext) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {}, 
                new Class[] { String.class, ExecutionContext.class }, new Object[] { methodName, executionContext });
    }
    
    static , S, E, C> Actions newActions() {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {});
    }
    
    static , S, E, C> TransitionResult newResult(
            boolean accepted, ImmutableState targetState, TransitionResult parent) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {}).
                setAccepted(accepted).setTargetState(targetState).setParent(parent);
    }
    
    static  Condition newMvelCondition(String expression, MvelScriptManager scriptManager) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {}, 
                new Class[]{String.class, MvelScriptManager.class}, new Object[]{expression, scriptManager});
    }
    
    static , S, E, C> Action newMvelAction(
            String expression, ExecutionContext executionContext) {
        return SquirrelProvider.getInstance().newInstance(new TypeReference>() {}, 
                new Class[]{String.class, ExecutionContext.class}, new Object[]{expression, executionContext});
    }
    
    static , S, E, C> StateMachineData newStateMachineData(
            Map> states) {
        return SquirrelProvider.getInstance().newInstance( 
                new TypeReference>(){}, 
                new Class[]{Map.class}, new Object[]{states} );
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy