jade.core.behaviours
Class Behaviour

java.lang.Object
  |
  +--jade.core.behaviours.Behaviour
All Implemented Interfaces:
Serializable, java.io.Serializable
Direct Known Subclasses:
CompositeBehaviour, LoaderBehaviour, SimpleBehaviour

public abstract class Behaviour
extends java.lang.Object
implements Serializable

Abstract base class for JADE behaviours. Extending this class directly should only be needed for particular behaviours with special synchronization needs; this is because event based notification used for blocking and restarting behaviours is directly accessible at this level.

Version:
$Date: 2007-06-14 11:02:43 +0200 (gio, 14 giu 2007) $ $Revision: 5969 $
Author:
Giovanni Rimassa - Universita' di Parma
See Also:
Serialized Form

Field Summary
protected  Agent myAgent
          The agent this behaviour belongs to.
 
Constructor Summary
Behaviour()
          Default constructor.
Behaviour(Agent a)
          Constructor with owner agent.
 
Method Summary
abstract  void action()
          Runs the behaviour.
 void block()
          Blocks this behaviour.
 void block(long millis)
          Blocks this behaviour for a specified amount of time.
abstract  boolean done()
          Check if this behaviour is done.
 java.lang.String getBehaviourName()
          Retrieve the name of this behaviour object.
 DataStore getDataStore()
          Return the private data store of this Behaviour.
protected  CompositeBehaviour getParent()
           
 boolean isRunnable()
          Returns whether this Behaviour object is blocked or not.
 int onEnd()
          This method is just an empty placeholder for subclasses.
 void onStart()
          This method is just an empty placeholders for subclasses.
 void reset()
          Restores behaviour initial state.
 void restart()
          Restarts a blocked behaviour.
 Behaviour root()
          Returns the root for this Behaviour object.
 void setAgent(Agent a)
          Associates this behaviour with the agent it belongs to.
 void setBehaviourName(java.lang.String name)
          Give a name to this behaviour object.
 void setDataStore(DataStore ds)
          Set the private data store of this Behaviour
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

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()
Returns:
The enclosing Behaviour (if present).
See Also:
CompositeBehaviour

setBehaviourName

public final void setBehaviourName(java.lang.String name)
Give a name to this behaviour object.

Parameters:
name - The name to give to this behaviour.

getBehaviourName

public final java.lang.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.


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.


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.

block

public void block()
Blocks this behaviour. When this method is called, the behaviour state is set to Blocked and a suitable event is fired to notify its parent behaviour. Then the behaviour is put into a blocked behaviours queue by the agent scheduler. If this method is called from within action() method, behaviour suspension occurs as soon as action() returns.

See Also:
restart()

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.

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

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)

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


JADE