jade.core.behaviours
Class CompositeBehaviour

java.lang.Object
  |
  +--jade.core.behaviours.Behaviour
        |
        +--jade.core.behaviours.CompositeBehaviour
Direct Known Subclasses:
FSMBehaviour, ParallelBehaviour, SequentialBehaviour

public abstract class CompositeBehaviour
extends Behaviour

An abstract superclass for behaviours composed by many parts. This class holds inside a number of children behaviours. When a CompositeBehaviour receives it execution quantum from the agent scheduler, it executes one of its children according to some policy. This class must be extended to provide the actual scheduling policy to apply when running children behaviours.

Version:
$Date: 2003/03/19 11:17:32 $ $Revision: 1.6 $
Author:
Giovanni Rimassa - Universita` di Parma, Giovanni Caire - TILAB
See Also:
SequentialBehaviour, ParallelBehaviour, FSMBehaviour, Serialized Form

Inner classes inherited from class jade.core.behaviours.Behaviour
Behaviour.RunnableChangedEvent
 
Field Summary
protected  boolean currentExecuted
           
 
Fields inherited from class jade.core.behaviours.Behaviour
myAgent, myEvent, NOTIFY_DOWN, NOTIFY_UP, parent, STATE_BLOCKED, STATE_READY, STATE_RUNNING
 
Constructor Summary
protected CompositeBehaviour()
          Default constructor, does not set the owner agent.
protected CompositeBehaviour(Agent a)
          This constructor sets the owner agent.
 
Method Summary
 void action()
          Executes this CompositeBehaviour.
 void block()
          Blocks this behaviour.
protected abstract  boolean checkTermination(boolean currentDone, int currentResult)
          This methods is called after the execution of each child in order to check whether the CompositeBehaviour should terminate.
 boolean done()
          Checks whether this behaviour has terminated.
abstract  Collection getChildren()
          This method returns a Collection view of the children of this CompositeBehaviour
protected abstract  Behaviour getCurrent()
          This method returns the child behaviour currently scheduled for execution
 int onEnd()
          Overrides the onEnd() method in the Behaviour class by simply calling the postAction() method for backward compatibility.
 void onStart()
          Overrides the onStart() method in the Behaviour class by simply calling the preAction() method for backward compatibility.
 void reset()
          Puts a CompositeBehaviour back in initial state.
 void restart()
          Restarts this behaviour.
protected abstract  void scheduleFirst()
          This method schedules the first child to be executed
protected abstract  void scheduleNext(boolean currentDone, int currentResult)
          This method schedules the next child to be executed
 void setAgent(Agent a)
          Associates this behaviour with the agent it belongs to.
 
Methods inherited from class jade.core.behaviours.Behaviour
actionWrapper, block, getBehaviourName, getDataStore, handle, isRunnable, root, setBehaviourName, setDataStore
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

currentExecuted

protected boolean currentExecuted
Constructor Detail

CompositeBehaviour

protected CompositeBehaviour()
Default constructor, does not set the owner agent.

CompositeBehaviour

protected CompositeBehaviour(Agent a)
This constructor sets the owner agent.
Parameters:
a - The agent this behaviour belongs to.
Method Detail

action

public final void action()
Executes this CompositeBehaviour. This method executes children according to the scheduling policy defined by concrete subclasses that implements the scheduleFirst() and scheduleNext() methods.
Overrides:
action in class Behaviour
Tags copied from class: Behaviour
See Also:
CompositeBehaviour

done

public final boolean done()
Checks whether this behaviour has terminated.
Overrides:
done in class Behaviour
Returns:
true if this CompositeBehaviour has finished executing, falseotherwise.

scheduleFirst

protected abstract void scheduleFirst()
This method schedules the first child to be executed

scheduleNext

protected abstract void scheduleNext(boolean currentDone,
                                     int currentResult)
This method schedules the next child to be executed
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)

checkTermination

protected abstract boolean checkTermination(boolean currentDone,
                                            int currentResult)
This methods is called after the execution of each child in order to check whether the CompositeBehaviour should terminate.
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 if the CompositeBehaviour should terminate. false otherwise.

getCurrent

protected abstract Behaviour getCurrent()
This method returns the child behaviour currently scheduled for execution

getChildren

public abstract Collection getChildren()
This method returns a Collection view of the children of this CompositeBehaviour

block

public void block()
Blocks this behaviour. When block() is called all its children are notified too.
Overrides:
block in class Behaviour
Tags copied from class: Behaviour
See Also:
Behaviour.restart()

restart

public void restart()
Restarts this behaviour. When restart() is called all its children are notified too.
Overrides:
restart in class Behaviour
Tags copied from class: Behaviour
See Also:
Behaviour.block()

reset

public void reset()
Puts a CompositeBehaviour back in initial state. The internal state is cleaned up and reset() is recursively called for each child behaviour.
Overrides:
reset in class Behaviour

onStart

public void onStart()
Overrides the onStart() method in the Behaviour class by simply calling the preAction() method for backward compatibility.
Overrides:
onStart in class Behaviour
See Also:
Behaviour.onStart()

onEnd

public int onEnd()
Overrides the onEnd() method in the Behaviour class by simply calling the postAction() method for backward compatibility.
Overrides:
onEnd in class Behaviour
See Also:
Behaviour.onEnd()

setAgent

public void setAgent(Agent a)
Associates this behaviour with the agent it belongs to. Overrides the method in the base class to propagate the setting to all children.
Overrides:
setAgent in class Behaviour
Parameters:
a - The agent this behaviour belongs to.
See Also:
Behaviour.setAgent(Agent a)