Class FSMBehaviour

    • Field Detail

      • lastStates

        protected List lastStates
      • currentName

        protected String currentName
    • Constructor Detail

      • FSMBehaviour

        public FSMBehaviour()
        Default constructor, does not set the owner agent.
      • FSMBehaviour

        public FSMBehaviour​(Agent a)
        This constructor sets the owner agent.
        Parameters:
        a - The agent this behaviour belongs to.
    • Method Detail

      • registerState

        public void registerState​(Behaviour state,
                                  String name)
        Register a Behaviour as a state of this FSMBehaviour. When the FSM reaches this state the registered Behaviour will be executed.
        Parameters:
        state - The Behaviour representing the state
        name - The name identifying the state.
      • registerFirstState

        public void registerFirstState​(Behaviour state,
                                       String name)
        Register a Behaviour as the initial state of this FSMBehaviour.
        Parameters:
        state - The Behaviour representing the state
        name - The name identifying the state.
      • registerLastState

        public void registerLastState​(Behaviour state,
                                      String name)
        Register a Behaviour as a final state of this FSMBehaviour. When the FSM reaches this state the registered Behaviour will be executed and, when completed, the FSMBehaviour will terminate too.
        Parameters:
        state - The Behaviour representing the state
        name - The name identifying the state.
      • deregisterState

        public Behaviour deregisterState​(String name)
        Deregister a state of this FSMBehaviour.
        Parameters:
        name - The name of the state to be deregistered.
        Returns:
        the Behaviour if any that was registered as the deregistered state.
      • registerTransition

        public void registerTransition​(String s1,
                                       String s2,
                                       int event)
        Register a transition in the FSM defining the policy for children scheduling of this FSMBehaviour.
        Parameters:
        s1 - The name of the state this transition starts from
        s2 - The name of the state this transition leads to
        event - The termination event that fires this transition as returned by the onEnd() method of the Behaviour representing state s1.
        See Also:
        Behaviour.onEnd()
      • registerTransition

        public void registerTransition​(String s1,
                                       String s2,
                                       int event,
                                       String[] toBeReset)
        Register a transition in the FSM defining the policy for children scheduling of this FSMBehaviour. When this transition is fired the states indicated in the toBeReset parameter are reset. This is particularly useful for transitions that lead to states that have already been visited.
        Parameters:
        s1 - The name of the state this transition starts from
        s2 - The name of the state this transition leads to
        event - The termination event that fires this transition as returned by the onEnd() method of the Behaviour representing state s1.
        toBeReset - An array of strings including the names of the states to be reset.
        See Also:
        Behaviour.onEnd()
      • registerDefaultTransition

        public void registerDefaultTransition​(String s1,
                                              String s2)
        Register a default transition in the FSM defining the policy for children scheduling of this FSMBehaviour. This transition will be fired when state s1 terminates with an event that is not explicitly associated to any transition.
        Parameters:
        s1 - The name of the state this transition starts from
        s2 - The name of the state this transition leads to
      • registerDefaultTransition

        public void registerDefaultTransition​(String s1,
                                              String s2,
                                              String[] toBeReset)
        Register a default transition in the FSM defining the policy for children scheduling of this FSMBehaviour. This transition will be fired when state s1 terminates with an event that is not explicitly associated to any transition. When this transition is fired the states indicated in the toBeReset parameter are reset. This is particularly useful for transitions that lead to states that have already been visited.
        Parameters:
        s1 - The name of the state this transition starts from
        s2 - The name of the state this transition leads to
        toBeReset - An array of strings including the names of the states to be reset.
      • deregisterTransition

        public void deregisterTransition​(String source,
                                         int event)
        Deregister the transition from a given source state and identfied by a given termination event.
        Parameters:
        source - The name of the source state
        event - The termination event that identifies the transition to be removed
      • deregisterDefaultTransition

        public void deregisterDefaultTransition​(String source)
        Deregister the default transition from a given source state.
        Parameters:
        source - The name of the source state
      • hasDefaultTransition

        public boolean hasDefaultTransition​(String source)
        Check if a default transition exits from a given source state.
        Parameters:
        source - The name of the source state
        Returns:
        true if a default transition exits from the given source state. false otherwise.
      • getState

        public Behaviour getState​(String name)
        Retrieve the child behaviour associated to the FSM state with the given name.
        Returns:
        the Behaviour representing the state whose name is name, or null if no such behaviour exists.
      • getName

        public String getName​(Behaviour state)
        Retrieve the name of the FSM state associated to the given child behaviour.
        Returns:
        the name of the state represented by Behaviour state, or null if the given behaviour is not a child of this FSM behaviour.
      • getLastExitValue

        public int getLastExitValue()
        Retrieve the exit value of the most recently executed child. This is also the trigger value that selects the next FSM transition.
        Returns:
        the exit value of the last executed state.
      • onEnd

        public int onEnd()
        Override the onEnd() method to return the exit value of the last executed state.
        Overrides:
        onEnd in class Behaviour
        Returns:
        an integer code representing the termination value of the behaviour.
      • scheduleNext

        protected void scheduleNext​(boolean currentDone,
                                    int currentResult)
        This method schedules the next child to be executed. It checks whether the current child is completed and, in this case, fires a suitable transition (according to the termination event of the current child) and schedules the child representing the new state.
        Specified by:
        scheduleNext in class CompositeBehaviour
        Parameters:
        currentDone - a flag indicating whether the just executed child has completed or not.
        currentResult - the termination value (as returned by onEnd()) of the just executed child in the case this child has completed (otherwise this parameter is meaningless)
        See Also:
        CompositeBehaviour.scheduleNext(boolean, int)
      • handleInconsistentFSM

        protected void handleInconsistentFSM​(String current,
                                             int event)
      • handleStateEntered

        protected void handleStateEntered​(Behaviour state)
      • checkTermination

        protected boolean checkTermination​(boolean currentDone,
                                           int currentResult)
        Check whether this FSMBehaviour must terminate.
        Specified by:
        checkTermination in class CompositeBehaviour
        Parameters:
        currentDone - a flag indicating whether the just executed child has completed or not.
        currentResult - the termination value (as returned by onEnd()) of the just executed child in the case this child has completed (otherwise this parameter is meaningless)
        Returns:
        true when the last child has terminated and it represents a final state. false otherwise
        See Also:
        CompositeBehaviour.checkTermination(boolean, int)
      • forceTransitionTo

        protected void forceTransitionTo​(String next)
        Temporarily disregards the FSM structure, and jumps to the given state. This method acts as a sort of GOTO statement between states, and replaces the currently active state without considering the trigger event or whether a transition was registered. It should be used only to handle exceptional conditions, if default transitions are not effective enough.
        Parameters:
        next - The name of the state to jump to at the next FSM cheduling quantum. If the FSM has no state with the given name, this method does nothing.
      • reset

        public void reset()
        Put this FSMBehaviour back in the initial condition.
        Overrides:
        reset in class CompositeBehaviour
      • resetStates

        public void resetStates​(String[] states)
        Reset the children behaviours registered in the states indicated in the states parameter.
        Parameters:
        states - the names of the states that have to be reset
      • stringifyTransitionTable

        public String stringifyTransitionTable()