Class Behaviour

    • Field Detail

      • NOTIFY_UP

        protected static final int NOTIFY_UP
        A constant for child-to-parent notifications.
        See Also:
        Constant Field Values
      • NOTIFY_DOWN

        protected static final int NOTIFY_DOWN
        A constant for parent-to-child notifications.
        See Also:
        Constant Field Values
      • myAgent

        protected Agent myAgent
        The agent this behaviour belongs to. This is an instance variable that holds a reference to the Agent object and allows the usage of its methods within the body of the behaviour. As the class Behaviour is the superclass of all the other behaviour classes, this variable is always available. Of course, remind to use the appropriate constructor, i.e. the one that accepts an agent object as argument; otherwise, this variable is set to null.
    • Constructor Detail

      • Behaviour

        public Behaviour()
        Default constructor. It does not set the agent owning this behaviour object.
      • Behaviour

        public Behaviour​(Agent a)
        Constructor with owner agent.
        Parameters:
        a - The agent owning this behaviour.
    • Method Detail

      • getParent

        protected CompositeBehaviour getParent()
        Retrieve the enclosing CompositeBehaviour (if present). In order to access the parent behaviour it is strongly suggested to use this method rather than the parent member variable directly. In case of threaded or wrapped behaviour in facts the latter may have unexpected values.
        Returns:
        The enclosing CompositeBehaviour (if present).
        See Also:
        CompositeBehaviour
      • setBehaviourName

        public final void setBehaviourName​(String name)
        Give a name to this behaviour object.
        Parameters:
        name - The name to give to this behaviour.
      • getBehaviourName

        public final String getBehaviourName()
        Retrieve the name of this behaviour object. If no explicit name was set, a default one is given, based on the behaviour class name.
        Returns:
        The name of this behaviour.
      • action

        public abstract void action()
        Runs the behaviour. This abstract method must be implemented by Behavioursubclasses to perform ordinary behaviour duty. An agent schedules its behaviours calling their action() method; since all the behaviours belonging to the same agent are scheduled cooperatively, this method must not enter in an endless loop and should return as soon as possible to preserve agent responsiveness. To split a long and slow task into smaller section, recursive behaviour aggregation may be used.
        See Also:
        CompositeBehaviour
      • done

        public abstract boolean done()
        Check if this behaviour is done. The agent scheduler calls this method to see whether a Behaviour still need to be run or it has completed its task. Concrete behaviours must implement this method to return their completion state. Finished behaviours are removed from the scheduling queue, while others are kept within to be run again when their turn comes again.
        Returns:
        true if the behaviour has completely executed.
      • onEnd

        public int onEnd()
        This method is just an empty placeholder for subclasses. It is invoked just once after this behaviour has ended. Therefore, it acts as an epilog for the task represented by this Behaviour.
        Note that onEnd is called after the behaviour has been removed from the pool of behaviours to be executed by an agent. Therefore calling reset() is not sufficient to cyclically repeat the task represented by this Behaviour. In order to achieve that, this Behaviour must be added again to the agent (using myAgent.addBehaviour(this)). The same applies to in the case of a Behaviour that is a child of a ParallelBehaviour.
        Returns:
        an integer code representing the termination value of the behaviour.
      • onStart

        public void onStart()
        This method is just an empty placeholders for subclasses. It is executed just once before starting behaviour execution. Therefore, it acts as a prolog to the task represented by this Behaviour.
      • actionWrapper

        public final void actionWrapper()
        This method is called internally by the JADE framework and should not be called by the user.
      • setExecutionState

        public final void setExecutionState​(String s)
      • getExecutionState

        public final String getExecutionState()
      • reset

        public void reset()
        Restores behaviour initial state. This method must be implemented by concrete subclasses in such a way that calling reset() on a behaviour object is equivalent to destroying it and recreating it back. The main purpose for this method is to realize multistep cyclic behaviours without needing expensive constructions an deletion of objects at each loop iteration. Remind to call super.reset() from the sub-classes.
      • handle

        protected void handle​(Behaviour.RunnableChangedEvent rce)
        Handler for block/restart events. This method handles notification by copying its runnable state and then by simply forwarding the event when it is traveling upwards and by doing nothing when it is traveling downwards, since an ordinary behaviour has no children.
        Parameters:
        rce - The event to handle
      • root

        public Behaviour root()
        Returns the root for this Behaviour object. That is, the top-level behaviour this one is a part of. Agents apply scheduling only to top-level behaviour objects, so they just call restart() on root behaviours.
        Returns:
        The top-level behaviour this behaviour is a part of. If this one is a top level behaviour itself, then simply this is returned.
        See Also:
        restart()
      • isRunnable

        public boolean isRunnable()
        Returns whether this Behaviour object is blocked or not.
        Returns:
        true when this behaviour is not blocked, false when it is.
      • getRestartCounter

        public final long getRestartCounter()
        This method is used internally by the framework. Developer should not call or redefine it.
      • block

        public void block()
        Blocks this behaviour. It should be noticed that this method is NOT a blocking call: when it is invoked, the internal behaviour state is set to Blocked so that, as soon as the action() method returns, the behaviour is put into a blocked behaviours queue so that it will not be scheduled anymore.
        The behaviour is moved back in the pool of active behaviours when either a message is received or the behaviour is explicitly restarted by means of its restart() method.
        If this behaviour is a child of a CompositeBehaviour a suitable event is fired to notify its parent behaviour up to the behaviour composition hierarchy root.
        See Also:
        restart()
      • handleBlockEvent

        protected void handleBlockEvent()
        This method is used internally by the framework. Developer should not call or redefine it.
      • block

        public void block​(long millis)
        Blocks this behaviour for a specified amount of time. The behaviour will be restarted when among the three following events happens.
        • A time of millis milliseconds has passed since the call to block().
        • An ACL message is received by the agent this behaviour belongs to.
        • Method restart() is called explicitly on this behaviour object.
        Parameters:
        millis - The amount of time to block, in milliseconds. Notice: a value of 0 for millis is equivalent to a call to block() without arguments.
        See Also:
        block()
      • restart

        public void restart()
        Restarts a blocked behaviour. This method fires a suitable event to notify this behaviour's parent. When the agent scheduler inserts a blocked event back into the agent ready queue, it restarts it automatically. When this method is called, any timer associated with this behaviour object is cleared.
        See Also:
        block()
      • handleRestartEvent

        public void handleRestartEvent()
        This method is used internally by the framework. Developer should not call or redefine it.
      • setAgent

        public void setAgent​(Agent a)
        Associates this behaviour with the agent it belongs to. There is no need to call this method explicitly, since the addBehaviour() call takes care of the association transparently.
        Parameters:
        a - The agent this behaviour belongs to.
        See Also:
        Agent.addBehaviour(Behaviour b)
      • getAgent

        public Agent getAgent()
      • getDataStore

        public DataStore getDataStore()
        Return the private data store of this Behaviour. If it was null, a new DataStore is created and returned.
        Returns:
        The private data store of this Behaviour
      • setDataStore

        public void setDataStore​(DataStore ds)
        Set the private data store of this Behaviour
        Parameters:
        ds - the DataStore that this Behaviour will use as its private data store