jade.core.behaviours
Class ParallelBehaviour

java.lang.Object
  extended by jade.core.behaviours.Behaviour
      extended by jade.core.behaviours.CompositeBehaviour
          extended by jade.core.behaviours.ParallelBehaviour
All Implemented Interfaces:
java.io.Serializable

public class ParallelBehaviour
extends CompositeBehaviour

Composite behaviour with concurrent children scheduling. It is a CompositeBehaviour that executes its children behaviours concurrently, and it terminates when a particular condition on its sub-behaviours is met i.e. when all children are done, N children are done or any child is done.

Version:
$Date: 2010-10-14 15:27:14 +0200(gio, 14 ott 2010) $ $Revision: 6375 $
Author:
Giovanni Rimassa - Universita` di Parma, Giovanni Caire - Telecom Italia Lab
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class jade.core.behaviours.Behaviour
Behaviour.RunnableChangedEvent
 
Field Summary
static int WHEN_ALL
          Predefined constant to be used in the constructor to create a ParallelBehaviour that terminates when all its children are done.
static int WHEN_ANY
          Predefined constant to be used in the constructor to create a ParallelBehaviour that terminates when any of its child is done.
 
Fields inherited from class jade.core.behaviours.CompositeBehaviour
currentExecuted
 
Fields inherited from class jade.core.behaviours.Behaviour
myAgent, myEvent, NOTIFY_DOWN, NOTIFY_UP, parent, STATE_BLOCKED, STATE_READY, STATE_RUNNING
 
Constructor Summary
ParallelBehaviour()
          Construct a ParallelBehaviour without setting the owner agent, and using the default termination condition (i.e. the parallel behaviour terminates as soon as all its children behaviours terminate.
ParallelBehaviour(Agent a, int endCondition)
          Construct a ParallelBehaviour setting the owner agent.
ParallelBehaviour(int endCondition)
          Construct a ParallelBehaviour without setting the owner agent.
 
Method Summary
 void addSubBehaviour(Behaviour b)
          Add a sub behaviour to this ParallelBehaviour
protected  boolean checkTermination(boolean currentDone, int currentResult)
          Check whether this ParallelBehaviour must terminate.
 Collection getChildren()
          Return a Collection view of the children of this ParallelBehaviour
protected  Behaviour getCurrent()
          Get the current child
 Collection getTerminatedChildren()
          Return a Collection view of the children of this ParallelBehaviour that have already completed.
protected  void handle(Behaviour.RunnableChangedEvent rce)
          Handle block/restart notifications.
 void removeSubBehaviour(Behaviour b)
          Remove a sub behaviour from this ParallelBehaviour
 void reset()
          Resets this behaviour.
protected  void scheduleFirst()
          Prepare the first child for execution
protected  void scheduleNext(boolean currentDone, int currentResult)
          This method schedules children behaviours one at a time, in a round robin fashion.
 
Methods inherited from class jade.core.behaviours.CompositeBehaviour
action, done, handleBlockEvent, handleRestartEvent, registerAsChild, resetChildren, setAgent
 
Methods inherited from class jade.core.behaviours.Behaviour
actionWrapper, block, block, getBehaviourName, getDataStore, getExecutionState, getParent, getRestartCounter, isRunnable, onEnd, onStart, restart, root, setBehaviourName, setDataStore, setExecutionState
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

WHEN_ALL

public static final int WHEN_ALL
Predefined constant to be used in the constructor to create a ParallelBehaviour that terminates when all its children are done.

See Also:
Constant Field Values

WHEN_ANY

public static final int WHEN_ANY
Predefined constant to be used in the constructor to create a ParallelBehaviour that terminates when any of its child is done.

See Also:
Constant Field Values
Constructor Detail

ParallelBehaviour

public ParallelBehaviour()
Construct a ParallelBehaviour without setting the owner agent, and using the default termination condition (i.e. the parallel behaviour terminates as soon as all its children behaviours terminate.


ParallelBehaviour

public ParallelBehaviour(int endCondition)
Construct a ParallelBehaviour without setting the owner agent.

Parameters:
endCondition - this value defines the termination condition for this ParallelBehaviour. Use
  1. WHEN_ALL to terminate this ParallelBehaviour when all its children are done.
  2. WHEN_ANY to terminate this ParallelBehaviour when any of its child is done.
  3. a positive int value n to terminate this ParallelBehaviour when n of its children are done.

ParallelBehaviour

public ParallelBehaviour(Agent a,
                         int endCondition)
Construct a ParallelBehaviour setting the owner agent.

Parameters:
a - the agent this ParallelBehaviour belongs to.
endCondition - this value defines the termination condition for this ParallelBehaviour. Use
  1. WHEN_ALL to terminate this ParallelBehaviour when all its children are done.
  2. WHEN_ANY to terminate this ParallelBehaviour when any of its child is done.
  3. a positive int value n to terminate this ParallelBehaviour when n of its children are done.
Method Detail

scheduleFirst

protected void scheduleFirst()
Prepare the first child for execution

Specified by:
scheduleFirst in class CompositeBehaviour
See Also:
CompositeBehaviour.scheduleFirst()

scheduleNext

protected void scheduleNext(boolean currentDone,
                            int currentResult)
This method schedules children behaviours one at a time, in a round robin fashion.

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)

checkTermination

protected boolean checkTermination(boolean currentDone,
                                   int currentResult)
Check whether this ParallelBehaviour 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 if the CompositeBehaviour should terminate. false otherwise.
See Also:
CompositeBehaviour.checkTermination(boolean, int)

getCurrent

protected Behaviour getCurrent()
Get the current child

Specified by:
getCurrent in class CompositeBehaviour
See Also:
CompositeBehaviour.getCurrent()

getChildren

public Collection getChildren()
Return a Collection view of the children of this ParallelBehaviour

Specified by:
getChildren in class CompositeBehaviour
See Also:
CompositeBehaviour.getChildren()

getTerminatedChildren

public Collection getTerminatedChildren()
Return a Collection view of the children of this ParallelBehaviour that have already completed.


addSubBehaviour

public void addSubBehaviour(Behaviour b)
Add a sub behaviour to this ParallelBehaviour


removeSubBehaviour

public void removeSubBehaviour(Behaviour b)
Remove a sub behaviour from this ParallelBehaviour


reset

public void reset()
Resets this behaviour. This methods puts a ParallelBehaviour back in initial state, besides calling reset() on each child behaviour recursively.

Overrides:
reset in class CompositeBehaviour

handle

protected void handle(Behaviour.RunnableChangedEvent rce)
Handle block/restart notifications. A ParallelBehaviour object is blocked only when all its children behaviours are blocked and becomes ready to run as soon as any of its children is runnable. This method takes care of the various possibilities.

Overrides:
handle in class Behaviour
Parameters:
rce - The event to handle.