diff --git a/build.xml b/build.xml
index c019c7d..9242354 100644
--- a/build.xml
+++ b/build.xml
@@ -20,7 +20,7 @@
-
+
diff --git a/src/TurboAgent.java b/src/AllAgent.java
similarity index 83%
rename from src/TurboAgent.java
rename to src/AllAgent.java
index 9150c07..2787829 100644
--- a/src/TurboAgent.java
+++ b/src/AllAgent.java
@@ -8,7 +8,7 @@ import jade.domain.FIPAAgentManagement.*;
import java.net.*;
import java.io.*;
-public class TurboAgent extends Agent
+public class AllAgent extends Agent
{
protected void setup ()
{
@@ -19,7 +19,7 @@ public class TurboAgent extends Agent
//service no 1
ServiceDescription sd1 = new ServiceDescription();
sd1.setType("answers");
- sd1.setName("bouvier");
+ sd1.setName("all");
//add them all
dfad.addServices(sd1);
@@ -33,7 +33,7 @@ public class TurboAgent extends Agent
ex.printStackTrace();
}
- addBehaviour(new BouvierCyclicBehaviour(this));
+ addBehaviour(new UniversalDICTCyclicBehaviour(this));
//doDelete();
}
protected void takeDown()
@@ -87,12 +87,12 @@ public class TurboAgent extends Agent
}
}
-class BouvierCyclicBehaviour extends CyclicBehaviour
+class UniversalDICTCyclicBehaviour extends CyclicBehaviour
{
- TurboAgent agent;
+ AllAgent agent;
- public BouvierCyclicBehaviour(TurboAgent agent)
+ public UniversalDICTCyclicBehaviour(AllAgent agent)
{
this.agent = agent;
}
@@ -100,7 +100,8 @@ class BouvierCyclicBehaviour extends CyclicBehaviour
public void action()
{
- MessageTemplate template = MessageTemplate.MatchOntology("bouvier");
+ MessageTemplate template = MessageTemplate.MatchAll();
+
ACLMessage message = agent.receive(template);
if (message == null)
{
@@ -115,7 +116,7 @@ class BouvierCyclicBehaviour extends CyclicBehaviour
String response = "";
try
{
- response = agent.makeRequest("bouvier",content);
+ response = agent.makeRequest(message.getOntology(), content);
}
catch (NumberFormatException ex)
{
diff --git a/src/MyAgent.java b/src/MyAgent.java
index c9e0684..786b7d3 100644
--- a/src/MyAgent.java
+++ b/src/MyAgent.java
@@ -76,8 +76,30 @@ class MyCyclicBehaviour extends CyclicBehaviour
dfad.addServices(sd);
try
{
+ // Searching for ontology specific service
DFAgentDescription[] result = DFService.search(myAgent, dfad);
- if (result.length == 0) myAgent.displayResponse("No service has been found ...");
+ if (result.length == 0)
+ {
+ myAgent.displayResponse("No ontology specific service has been found ...");
+
+ // Search for universal service
+ dfad.clearAllServices();
+ sd.setName("all");
+ dfad.addServices(sd);
+ result = DFService.search(myAgent, dfad);
+
+ if (result.length == 0) myAgent.displayResponse("No universal service has been found ...");
+ else
+ {
+ String foundAgent = result[0].getName().getLocalName();
+ myAgent.displayResponse("Agent " + foundAgent + " is universal service provider. Sending message to " + foundAgent);
+ ACLMessage forward = new ACLMessage(ACLMessage.REQUEST);
+ forward.addReceiver(new AID(foundAgent, AID.ISLOCALNAME));
+ forward.setContent(content);
+ forward.setOntology(ontology);
+ myAgent.send(forward);
+ }
+ }
else
{
String foundAgent = result[0].getName().getLocalName();
diff --git a/src/ServiceAgent.java b/src/ServiceAgent.java
deleted file mode 100644
index bf24655..0000000
--- a/src/ServiceAgent.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package jadelab1;
-
-import jade.core.*;
-import jade.core.behaviours.*;
-import jade.lang.acl.*;
-import jade.domain.*;
-import jade.domain.FIPAAgentManagement.*;
-import java.net.*;
-import java.io.*;
-
-public class ServiceAgent extends Agent
-{
- protected void setup ()
- {
- //services registration at DF
- DFAgentDescription dfad = new DFAgentDescription();
- dfad.setName(getAID());
-
- //service no 1
- ServiceDescription sd1 = new ServiceDescription();
- sd1.setType("answers");
- sd1.setName("wordnet");
- //service no 2
- ServiceDescription sd2 = new ServiceDescription();
- sd2.setType("answers");
- sd2.setName("dictionary");
- //service no 3
- ServiceDescription sd3 = new ServiceDescription();
- sd3.setType("answers");
- sd3.setName("gcide");
-
- //add them all
- dfad.addServices(sd1);
- dfad.addServices(sd2);
- dfad.addServices(sd3);
-
- try
- {
- DFService.register(this,dfad);
- }
- catch (FIPAException ex)
- {
- ex.printStackTrace();
- }
-
- addBehaviour(new WordnetCyclicBehaviour(this));
- addBehaviour(new DictionaryCyclicBehaviour(this));
- addBehaviour(new GCIDECyclicBehaviour(this));
- //doDelete();
- }
- protected void takeDown()
- {
- //services deregistration before termination
- try
- {
- DFService.deregister(this);
- }
- catch (FIPAException ex)
- {
- ex.printStackTrace();
- }
- }
- public String makeRequest(String serviceName, String word)
- {
- StringBuffer response = new StringBuffer();
- try
- {
- URL url;
- URLConnection urlConn;
- DataOutputStream printout;
- DataInputStream input;
- url = new URL("http://dict.org/bin/Dict");
- urlConn = url.openConnection();
- urlConn.setDoInput(true);
- urlConn.setDoOutput(true);
- urlConn.setUseCaches(false);
- urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
- String content = "Form=Dict1&Strategy=*&Database=" + URLEncoder.encode(serviceName) + "&Query=" + URLEncoder.encode(word) + "&submit=Submit+query";
- //forth
- printout = new DataOutputStream(urlConn.getOutputStream());
- printout.writeBytes(content);
- printout.flush();
- printout.close();
- //back
- input = new DataInputStream(urlConn.getInputStream());
- String str;
- while (null != ((str = input.readLine())))
- {
- response.append(str);
- }
- input.close();
- }
- catch (Exception ex)
- {
- System.out.println(ex.getMessage());
- }
- //cut what is unnecessary
- return response.substring(response.indexOf("
")+4, response.lastIndexOf("
"));
- }
-}
-
-class GCIDECyclicBehaviour extends CyclicBehaviour
-{
- ServiceAgent agent;
-
-
- public GCIDECyclicBehaviour(ServiceAgent agent)
- {
- this.agent = agent;
- }
-
-
- public void action()
- {
- MessageTemplate template = MessageTemplate.MatchOntology("gcide");
- ACLMessage message = agent.receive(template);
- if (message == null)
- {
- block();
- }
- else
- {
- //process the incoming message
- String content = message.getContent();
- ACLMessage reply = message.createReply();
- reply.setPerformative(ACLMessage.INFORM);
- String response = "";
- try
- {
- response = agent.makeRequest("gcide",content);
- }
- catch (NumberFormatException ex)
- {
- response = ex.getMessage();
- }
- reply.setContent(response);
- agent.send(reply);
- }
- }
-}
-
-class WordnetCyclicBehaviour extends CyclicBehaviour
-{
- ServiceAgent agent;
- public WordnetCyclicBehaviour(ServiceAgent agent)
- {
- this.agent = agent;
- }
- public void action()
- {
- MessageTemplate template = MessageTemplate.MatchOntology("wordnet");
- ACLMessage message = agent.receive(template);
- if (message == null)
- {
- block();
- }
- else
- {
- //process the incoming message
- String content = message.getContent();
- ACLMessage reply = message.createReply();
- reply.setPerformative(ACLMessage.INFORM);
- String response = "";
- try
- {
- response = agent.makeRequest("wn",content);
- }
- catch (NumberFormatException ex)
- {
- response = ex.getMessage();
- }
- reply.setContent(response);
- agent.send(reply);
- }
- }
-}
-
-class DictionaryCyclicBehaviour extends CyclicBehaviour
-{
- ServiceAgent agent;
- public DictionaryCyclicBehaviour(ServiceAgent agent)
- {
- this.agent = agent;
- }
- public void action()
- {
- MessageTemplate template = MessageTemplate.MatchOntology("dictionary");
- ACLMessage message = agent.receive(template);
- if (message == null)
- {
- block();
- }
- else
- {
- //process the incoming message
- String content = message.getContent();
- ACLMessage reply = message.createReply();
- reply.setPerformative(ACLMessage.INFORM);
- String response = "";
- try
- {
- response = agent.makeRequest("english", content);
- }
- catch (NumberFormatException ex)
- {
- response = ex.getMessage();
- }
- reply.setContent(response);
- agent.send(reply);
- }
- }
-}