Overview  Package   Class  Tree  Deprecated  Index  Help 
PREV CLASS   NEXT CLASS FRAMES    NO FRAMES    All Classes
SUMMARY: NESTED | FIELD | CONSTR | METHOD DETAIL: FIELD | CONSTR | METHOD

sajas.core.behaviours
Class Behaviour
java.lang.Object
  sajas.core.behaviours.Behaviour
All Implemented Interfaces:
jade.util.leap.Serializable, Serializable
Direct Known Subclasses:
CompositeBehaviour, CyclicBehaviour, ReceiverBehaviour, SimpleBehaviour, WrapperBehaviour

public abstract class Behaviour
extends Object
implements jade.util.leap.Serializable
Note: this class, as all classes in the sajas.core.behaviours package, has been re-implemented to redirect the use of the agent class to sajas.core.Agent.
Author:
hlc
See Also:
jade.core.behaviours.Behaviour

Nested Class Summary
protected class
Behaviour.RunnableChangedEvent
          Event class for notifying blocked and restarted behaviours.
Field Summary
protected Agent
myAgent
          The agent this behaviour belongs to.
myEvent
          This event object will be re-used for every state change notification.
protected static int
NOTIFY_DOWN
          A constant for parent-to-child notifications.
protected static int
NOTIFY_UP
          A constant for child-to-parent notifications.
parent
static String
STATE_BLOCKED
          A constant identifying the blocked state.
static String
STATE_READY
          A constant identifying the runnable state.
static String
STATE_RUNNING
          A constant identifying the running state.
Constructor Summary
Behaviour()
          Default constructor.
Behaviour(Agent a)
          Constructor with owner agent.
Method Summary
abstract void
action()
          Runs the behaviour.
void
actionWrapper()
          This method is called internally by the JADE framework and should not be called by the user.
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.
getAgent()
String
getBehaviourName()
          Retrieve the name of this behaviour object.
getDataStore()
          Return the private data store of this Behaviour.
String
getExecutionState()
getParent()
          Retrieve the enclosing CompositeBehaviour (if present).
long
getRestartCounter()
          This method is used internally by the framework.
protected void
handle(Behaviour.RunnableChangedEvent rce)
          Handler for block/restart events.
protected void
handleBlockEvent()
          This method is used internally by the framework.
void
handleRestartEvent()
          This method is used internally by the framework.
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.
root()
          Returns the root for this Behaviour object.
void
setAgent(Agent a)
          Associates this behaviour with the agent it belongs to.
void
setBehaviourName(String name)
          Give a name to this behaviour object.
void
setDataStore(DataStore ds)
          Set the private data store of this Behaviour
void
setExecutionState(String s)
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.

myEvent
protected Behaviour.RunnableChangedEvent myEvent
This event object will be re-used for every state change notification.

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

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

parent
protected CompositeBehaviour parent

STATE_BLOCKED
public static final String STATE_BLOCKED
A constant identifying the blocked state.
See Also:
Constant Field Values

STATE_READY
public static final String STATE_READY
A constant identifying the runnable state.
See Also:
Constant Field Values

STATE_RUNNING
public static final String STATE_RUNNING
A constant identifying the running state.
See Also:
Constant Field Values
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:
jade.core.behaviours.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:
jade.core.behaviours.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:
jade.core.behaviours.Behaviour.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:
jade.core.behaviours.Behaviour.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:
jade.core.behaviours.Behaviour.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:
jade.core.behaviours.Behaviour.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:
jade.core.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

Overview  Package   Class  Tree  Deprecated  Index  Help 
PREV CLASS   NEXT CLASS FRAMES    NO FRAMES    All Classes
SUMMARY: NESTED | FIELD | CONSTR | METHOD DETAIL: FIELD | CONSTR | METHOD

Java API documentation generated with DocFlex/Doclet 1.6.1 using JavadocPro template set.
DocFlex/Doclet is both a multi-format Javadoc doclet and a free edition of DocFlex/Javadoc, which is a template-driven programming tool for rapid development of any Javadoc-based Java API documentation generators (i.e. doclets). If you need to customize your Javadoc without writing a full-blown doclet from scratch, DocFlex/Javadoc may be the only tool able to help you! Find out more at www.docflex.com