ingenias.jade.agents.Agent0JADEAgent Maven / Gradle / Ivy
/*
Copyright (C) 2005 Jorge Gomez Sanz
This file is part of INGENIAS Agent Framework, an agent infrastructure linked
to the INGENIAS Development Kit, and availabe at http://grasia.fdi.ucm.es/ingenias or
http://ingenias.sourceforge.net.
INGENIAS Agent Framework is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
INGENIAS Agent Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with INGENIAS Agent Framework; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package ingenias.jade.agents;
import jade.core.Agent;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
import jade.core.behaviours.*;
import ingenias.jade.*;
import ingenias.jade.smachines.*;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.net.InetAddress;
import jade.core.*;
import jade.core.behaviours.*;
import jade.domain.FIPAAgentManagement.*;
import jade.domain.FIPAException;
import jade.domain.DFService;
import jade.domain.FIPANames;
import jade.lang.acl.ACLMessage;
import ingenias.jade.*;
import java.util.*;
import ingenias.jade.exception.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import ingenias.editor.entities.RuntimeFact;
import ingenias.jade.components.*;
import ingenias.jade.mental.*;
import ingenias.editor.entities.ApplicationEventSlots;
import ingenias.editor.entities.Interaction;
import ingenias.editor.entities.MentalEntity;
import ingenias.editor.entities.ObjectSlot;
import ingenias.editor.entities.RuntimeEvent;
import ingenias.editor.entities.RuntimeFact;
import ingenias.editor.entities.RuntimeConversation;
import ingenias.editor.entities.Slot;
import ingenias.jade.components.Task;
import ingenias.jade.graphics.*;
import ingenias.jade.MentalStateManager;
import ingenias.exception.InvalidEntity;
public class Agent0JADEAgent
extends JADEAgent {
public Agent0JADEAgent(){
super(new Agent0Protocol(),new Agent0InteractionLocks());
}
private boolean initialiseNonConversationalTask(Task tobject) {
boolean initialised=false;
Vector repeatedOutputs=new Vector();
Vector nonExistingInputs=new Vector();
if (tobject.getType().equals("DeleteNonUsedEntitiesTask")){
Vector expectedInput=null;
RuntimeFact expectedOutput=null;
RuntimeEvent expectedOutputEvent=null;
RuntimeConversation expectedInt=null;
ingenias.jade.components.Resource expectedResource=null;
ingenias.jade.components.Application expectedApp=null;
boolean allEntitiesExist=false;
TaskOutput to=null;
to=new TaskOutput("default");
expectedInput=this.getMSM().getMentalEntityByType("FrameFact1");
if (this.getLM().canBeDeleted(expectedInput)){
if (expectedInput.size()==0){
nonExistingInputs.add("FrameFact1");
} else {
addExpectedInputs(tobject, "FrameFact1","1",expectedInput);
addConsumedInput(to,"FrameFact1",expectedInput);
}
allEntitiesExist=allEntitiesExist || expectedInput.size()!=0;
}
tobject.addOutput(to);
initialised= allEntitiesExist;
if (!allEntitiesExist){
StringBuffer nonexisting=new StringBuffer();
for (int j=0;j expectedInput=null;
RuntimeFact expectedOutput=null;
RuntimeEvent expectedOutputEvent=null;
RuntimeConversation expectedInt=null;
ingenias.jade.components.Resource expectedResource=null;
ingenias.jade.components.Application expectedApp=null;
boolean allEntitiesExist=true;
TaskOutput to=null;
to=new TaskOutput("default");
expectedInput=this.getMSM().getMentalEntityByType("FrameFact0");
if (expectedInput.size()==0 && !("1".equals("0..n"))){
nonExistingInputs.add("FrameFact0");
} else {
addExpectedInputs(tobject, "FrameFact0","1",expectedInput);
addConsumedInput(to,"1",expectedInput);
}
allEntitiesExist=allEntitiesExist&& expectedInput.size()!=0;
// Default application for all tasks executed within a conversation
expectedApp=(ingenias.jade.components.Application)getAM().getApplication("YellowPages");
tobject.addApplication("YellowPages",expectedApp);
/*
expectedInt=new RuntimeConversation(MentalStateManager.generateMentalEntityID());
expectedInt.setInteraction(new Interaction("Interaction0"));
to.add(new OutputEntity(expectedInt,TaskOperations.CreateMS));
expectedInt=new RuntimeConversation(MentalStateManager.generateMentalEntityID());
expectedInt.setInteraction(new Interaction("Interaction0"));
to.add(new OutputEntity(expectedInt,TaskOperations.CreateMS));
*/
/**/
{
RuntimeConversation expectedOutputRuntimeConversation=
new RuntimeConversation(MentalStateManager.generateMentalEntityID());
if (RuntimeConversation.class.isAssignableFrom(expectedOutputRuntimeConversation.getClass())){
java.lang.reflect.Method m;
try {
m = expectedOutputRuntimeConversation.getClass().getMethod("setInteraction", new Class[]{Interaction.class});
m.invoke(expectedOutputRuntimeConversation, new Interaction("Interaction0")) ;
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
to.add(new OutputEntity(expectedOutputRuntimeConversation,TaskOperations.CreateMS));
}
{FrameFact1 expectedOutputFrameFact1=
new FrameFact1(MentalStateManager.generateMentalEntityID());
to.add(new OutputEntity(expectedOutputFrameFact1,TaskOperations.CreateWF));
}
tobject.addOutput(to);
initialised= allEntitiesExist;
if (!allEntitiesExist){
String[] nonexisting=new String[nonExistingInputs.size()];
for (int j=0;j nonExistingInputs=new Vector();
Vector repeatedOutputs=new Vector();
boolean validConversationType=false;
if (tobject.getType().equals("DeleteNonUsedEntitiesTask")){
Vector expectedInput=null;
RuntimeFact expectedOutput=null;
RuntimeEvent expectedOutputEvent=null;
RuntimeConversation expectedInt=null;
ingenias.jade.components.Resource expectedResource=null;
ingenias.jade.components.Application expectedApp=null;
boolean allEntitiesExist=false;
TaskOutput to=null;
to=new TaskOutput("default");
tobject.setConversationContext(conversation);
expectedInput=this.getMSM().obtainConversationalMentalEntityByType(conversation,"FrameFact1");
if (this.getLM().canBeDeleted(expectedInput)){
if (expectedInput.size()==0){
nonExistingInputs.add("FrameFact1");
} else {
addExpectedInputs(tobject, "FrameFact1","1",expectedInput);
addConsumedInput(to,"FrameFact1",expectedInput);
}
allEntitiesExist=allEntitiesExist|| expectedInput.size()!=0;
}
tobject.addOutput(to);
initialised= allEntitiesExist;
if (!allEntitiesExist){
StringBuffer nonexisting=new StringBuffer();
for (int j=0;j typesOfConversation=null;
//************************************
// Conversational tasks evaluation
//************************************
//************************************
// Non conversational tasks evaluation
//************************************
if (goalname.equals("Goal0")){
{
boolean canbescheduled=false;
Task tobject=null;
// If a conversational initialization fails, a conventional one is tried
tobject=new Task0Task(ingenias.jade.MentalStateManager.generateMentalEntityID());
canbescheduled=initialiseNonConversationalTask(tobject);
if (canbescheduled){
//MainInteractionManager.log("Scheduled task "+tobject.getType()+" to achieve goal Goal0",getLocalName()+"-"+tobject.getType());
tasks.add(tobject);
}
}
}
Task tobject=new DeleteNonUsedEntitiesTask("DeleteNonUsedEntitiesTask","DeleteNonUsedEntitiesTask");
boolean canbescheduled=initialiseNonConversationalTask(tobject);
if (canbescheduled && IAFProperties.getGarbageCollectionEnabled()){
tasks.add(tobject);
}
return tasks;
}
/**
* Initializes the agent
*/
public void setup() {
super.setup();
Vector ttypes=new Vector();
ttypes.add("Task0");
if (IAFProperties.getGraphicsOn())
this.getGraphics().setKnownTasks(ttypes);
// Interactions started by this agent
getCM().addKnownProtocol("Interaction0");
boolean continueInit=false;
// Interactions where this agent acts as collaborator
// These are the initial goals of the agent. Goals determine
// which task to execute first
ingenias.editor.entities.StateGoal sg=null;
ingenias.editor.entities.RuntimeFact ff=null;
Slot slot=null;
ObjectSlot oslot=null;
ingenias.jade.components.Application app=null;
sg= new ingenias.editor.entities.StateGoal("Goal0");
sg.setState("pending");
try {
this.getMSM().addMentalEntity(sg);
} catch (InvalidEntity e1) {
e1.printStackTrace();
}
ff= new FrameFact0();
/* */
try {
this.getMSM().addMentalEntity(ff);
} catch (InvalidEntity e) {
e.printStackTrace();
}
//Initializing the applications panel in the manager
Vector events=null;
RuntimeEvent event=null;
//Initial applications assigned to the agent
Vector actions=null;
Vector evetns=null;
// Panel creation for interaction control
// This panel shows a button for each interaction it starts.
// If this agent does not start any interaction, a label showin
// a message "DOES NOT START ANY INTERACTION" will appear
java.awt.event.ActionListener ifPressed=null;
final JADEAgent _jaRole0Interaction0=this;
ifPressed=new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
_jaRole0Interaction0.addBehaviour(
new jade.core.behaviours.OneShotBehaviour() {
public void action() {
// If mental conditions are meet then the protocol is started
Vector expectedInput=null;
boolean allexist=true;
if (allexist){
try {
getCM().launchProtocolAsInitiator("Interaction0",getAM().getYellowPages());
} catch (NoAgentsFound naf){
} catch (WrongInteraction wi){
wi.printStackTrace();
}
} else {
if (getGraphics()!=null)
getGraphics().runtimeWarning(" Mental conditions required for starting Role0Interaction0 "+
" are not satisfied yet ");
}
}
});
} };
if (getGraphics()!=null)
getGraphics().addInteraction(this.getName(), "Role: Role0 - Int: Interaction0", ifPressed);
getCM().addInitiatorRoles("Interaction0","Role0");
// Final Graphics initialization
if (getGraphics()!=null)
getGraphics().startAgentDebug();
getMSM().setModified(); // to trigger a first planning round
// To indicate that the MSP can start
this.agentInitialised();
}
/**
* Obtains a DFAgentDescription array that describes the different roles an
* agent can play
*
*@return Roles played
*/
public DFAgentDescription[ ] getDescription() {
DFAgentDescription[] result=null;
Vector playedRoles=new Vector();
DFAgentDescription dfd=null;
dfd = new DFAgentDescription();
ServiceDescription sd=null;
dfd.setName(getAID());
sd = new ServiceDescription();
sd.setName(getLocalName() + "-sub-df");
sd.setType("Role0");
sd.setOwnership("JADE");
dfd.addServices(sd);
playedRoles.add(dfd);
result=new DFAgentDescription[playedRoles.size()];
playedRoles.toArray(result);
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy