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); - } - } -}