drm.agents
Class ContributorAgent

java.lang.Object
  |
  +--drm.agents.Agent
        |
        +--drm.agents.ContributorAgent
All Implemented Interfaces:
Contributor, IAgent, Observer, java.lang.Runnable, java.io.Serializable

public abstract class ContributorAgent
extends Agent
implements Contributor, Observer

This is an agent that participates in a collective. The name of the collective is the job name passed to the constructor.

See Also:
Serialized Form

Field Summary
protected  Collective collective
          The collective this object is a membet of.
protected  Address root
          The root contributor.
 
Fields inherited from class drm.agents.Agent
base, job, name, shouldLive, type, VERSION
 
Constructor Summary
ContributorAgent(java.lang.String type, java.lang.String job, java.lang.String name)
          Calls super constructor
ContributorAgent(java.lang.String type, java.lang.String job, java.lang.String name, Address root)
          Calls super constructor.
 
Method Summary
 void collectiveUpdated(ContributionBox peer)
          The default implementation does nothing.
 java.lang.Object getContribution()
          The default implementation returns null.
 Address[] getPeerAddresses()
          Returns the root address.
 boolean handleMessage(Message m, java.lang.Object object)
          Handles message type "collectiveUpdate-"+getJob().
 void onArrival(Address from, Address to)
          Corrects root address if it is a local address and we are arriving from a remote base.
 void onDestruction()
          Closes connection with the collective.
 void selfTest(java.io.PrintStream output)
           
 
Methods inherited from class drm.agents.Agent
fireMessage, fireMessage, fireMessage, getDRM, getJob, getName, getState, getType, setBase, suicide, toString, version
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface drm.core.Contributor
getName
 
Methods inherited from interface drm.core.Observer
fireMessage
 
Methods inherited from interface java.lang.Runnable
run
 

Field Detail

collective

protected Collective collective
The collective this object is a membet of.

root

protected Address root
The root contributor. The presence of this is not crutial, it only provides a fixed and reliable address to fall back to.
Constructor Detail

ContributorAgent

public ContributorAgent(java.lang.String type,
                        java.lang.String job,
                        java.lang.String name)
Calls super constructor

ContributorAgent

public ContributorAgent(java.lang.String type,
                        java.lang.String job,
                        java.lang.String name,
                        Address root)
Calls super constructor.
Parameters:
root - The fixed reliable address in the collective to fall back to if no peers are known. Might be null, in that case connection to the collective is possible only if this is a root, ie if other contributors connect to this address. Might be a local address, in that case this agent will change it to the correct remote address (ie to the address of its old node) when arriving at a remote node.
Method Detail

onArrival

public final void onArrival(Address from,
                            Address to)
Corrects root address if it is a local address and we are arriving from a remote base. Connects to the collective.

Extending classes that override this method must make sure that they call super.onArrival. The suggested practice is that every implementation must begin with the line

 super.onArrival(from,to);
 
Overrides:
onArrival in class Agent
Following copied from interface: drm.agentbase.IAgent
Parameters:
from - The address of the base from which the agent was sent. If the agent has never been on any base it is null.
to - The address of the local base at the time of the arrival. It is not guaranteed to remain valid trough the lifetime of the agent. If the agent has never been on a base it is null.
See Also:
IAgent.setBase(IBase)

onDestruction

public final void onDestruction()
Closes connection with the collective.

Extending classes that override this method must make sure that they call super.onDestruction. The suggested practice is that every implementation must begin with the line

 super.onDestruction();
 
Overrides:
onDestruction in class Agent

handleMessage

public boolean handleMessage(Message m,
                             java.lang.Object object)
Handles message type "collectiveUpdate-"+getJob(). In fact only forwards it to the collective.

Extending classes that override this method must make sure that they call super.handleMessage. The suggested practice is that every implementation must begin with the line

 if( super.handleMessage(m,object) ) return true;
 
and after that handling of the class specific messages.
Overrides:
handleMessage in class Agent
Following copied from interface: drm.agentbase.IAgent
Parameters:
m - The message to handle.
object - The object that is wrapped in the message. If null then there is no binary content or it is not a serialized object (in which case it can be read using Message.getBinary()).
Returns:
If the message could be handled succesfully (i.e. it was known to the implementation and no errors occured) returns true, otherwise false.
See Also:
Message.setReply(Object), IBase.fireMessage(Message)

getContribution

public java.lang.Object getContribution()
The default implementation returns null. Extending classes must redefine this method to be able to contribute to the collective.
Specified by:
getContribution in interface Contributor

collectiveUpdated

public void collectiveUpdated(ContributionBox peer)
The default implementation does nothing.
Specified by:
collectiveUpdated in interface Observer

getPeerAddresses

public final Address[] getPeerAddresses()
Returns the root address.
Specified by:
getPeerAddresses in interface Observer

selfTest

public void selfTest(java.io.PrintStream output)
Overrides:
selfTest in class Agent