package jadex.micro.examples;
import jadex.bridge.Argument;
import jadex.bridge.CreationInfo;
import jadex.bridge.IArgument;
import jadex.bridge.IComponentManagementService;
import jadex.commons.concurrent.DefaultResultListener;
import jadex.commons.concurrent.IResultListener;
import jadex.commons.service.SServiceProvider;
import jadex.micro.MicroAgent;
import jadex.micro.MicroAgentMetaInfo;
/**
*
*/
public class ResultAgent extends MicroAgent
{
//-------- methods --------
/**
* Execute an agent step.
*/
public void executeBody()
{
if(Math.random()<0.3)
{
setResultValue("result", "last: "+getAgentName()+": "+Math.random());
killAgent();
}
else
{
setResultValue("result", "not last: "+getAgentName()+": "+Math.random());
SServiceProvider.getServiceUpwards(getServiceProvider(), IComponentManagementService.class)
.addResultListener(createResultListener(new DefaultResultListener()
{
public void resultAvailable(Object source, Object result)
{
IComponentManagementService cms = (IComponentManagementService)result;
cms.createComponent(null, ResultAgent.this.getClass().getName()+".class", new CreationInfo(getComponentIdentifier()), createResultListener(new IResultListener()
{
public void resultAvailable(Object source, Object result)
{
System.out.println(getAgentName()+" got result: "+result);
killAgent();
}
public void exceptionOccurred(Object source, Exception exception)
{
System.out.println("exception occurred: "+exception);
killAgent();
}
})).addResultListener(new IResultListener()
{
public void resultAvailable(Object source, Object result)
{
}
public void exceptionOccurred(Object source, Exception exception)
{
System.out.println("Could not create agent: "+exception);
killAgent();
}
});
}
}));
}
}
//-------- static methods --------
/**
* Get the meta information about the agent.
*/
public static Object getMetaInfo()
{
return new MicroAgentMetaInfo("This agent starts a subagent and fetches its result.",
null, null, new IArgument[]{new Argument("result", "Result value.", "String", new Integer(0))}, null, null);
}
}