package pikater; import jade.content.lang.Codec; import jade.content.lang.Codec.CodecException; import jade.content.lang.sl.SLCodec; import jade.content.onto.Ontology; import jade.content.onto.OntologyException; import jade.content.onto.UngroundedException; import jade.content.onto.basic.Action; import jade.content.onto.basic.Result; import jade.core.AID; import jade.domain.DFService; import jade.domain.FIPAException; import jade.domain.FIPANames; import jade.domain.FIPAService; import jade.domain.FIPAAgentManagement.DFAgentDescription; import jade.domain.FIPAAgentManagement.FailureException; import jade.domain.FIPAAgentManagement.NotUnderstoodException; import jade.domain.FIPAAgentManagement.Property; import jade.domain.FIPAAgentManagement.RefuseException; import jade.domain.FIPAAgentManagement.ServiceDescription; import jade.gui.GuiEvent; import jade.lang.acl.ACLMessage; import jade.lang.acl.MessageTemplate; import jade.proto.AchieveREResponder; import jade.util.leap.ArrayList; import jade.util.leap.Iterator; import jade.util.leap.List; import java.util.Vector; import pikater.ontology.messages.Agent; import pikater.ontology.messages.Option; import pikater.ontology.messages.Problem; import pikater.ontology.messages.Results; import pikater.ontology.messages.Task; import pikater.ontology.webservices.GetAgents; import pikater.ontology.webservices.GetOptions; import pikater.ontology.webservices.GetResults; import pikater.ontology.webservices.SetProblem; import pikater.ontology.webservices.WS_Ontology; import pikater.ontology.webservices.WS_Results; public class Agent_GUI_WS extends Agent_GUI { private static final long serialVersionUID = -5322630455326259706L; private jade.util.leap.LinkedList results = new jade.util.leap.LinkedList(); private Codec codec; private Ontology wsOntology; private Ontology messagesOntology; @Override protected void displayResult(ACLMessage inform) { displayPartialResult(inform); System.out.println("Displaying the result ;)"); } @Override protected String getAgentType() { return "WS GUI Agent"; } @Override protected void mySetup() { wsOntology = pikater.ontology.webservices.WS_Ontology.getInstance(); messagesOntology = pikater.ontology.messages.MessagesOntology .getInstance(); codec = new SLCodec(); getContentManager().registerOntology(wsOntology); getContentManager().registerOntology(messagesOntology); DFAgentDescription df = new DFAgentDescription(); df.setName(this.getAID()); // TODO: fix this try { df = DFService.search(this, df)[0]; } catch (FIPAException e) { e.printStackTrace(); } ServiceDescription sd = new ServiceDescription(); sd .addOntologies(pikater.ontology.webservices.WS_Ontology.ONTOLOGY_NAME); sd.addLanguages(codec.getName()); sd.addProtocols(FIPANames.InteractionProtocol.FIPA_REQUEST); sd.addProperties(new Property("wsig", "true")); sd.setType("WS_GUI_Agent"); sd.setName("WS_GUI"); df.addOntologies(wsOntology.getName()); df.addServices(sd); try { DFService.modify(this, df); } catch (FIPAException e) { e.printStackTrace(); } MessageTemplate mt = MessageTemplate .MatchOntology(WS_Ontology.ONTOLOGY_NAME); addBehaviour(new AchieveREResponder(this, mt) { /** * */ private static final long serialVersionUID = -5929855198528929475L; @Override protected ACLMessage prepareResponse(ACLMessage request) throws NotUnderstoodException, RefuseException { return null; } @Override protected ACLMessage handleRequest(ACLMessage request) { try { System.err.print("Agent " + myAgent.getName() + ":"); Action a = (Action) getContentManager().extractContent( request); if (a.getAction() instanceof SetProblem) { SetProblem sp = (SetProblem) (a.getAction()); jade.util.leap.Iterator it = sp.getFileNames() .iterator(); int problemID = createNewProblem("30000"); while (it.hasNext()) { String s = (String) it.next(); addDatasetToProblem(problemID, s, s, null, null); } it = sp.getAgentDescriptions().iterator(); try { while (it.hasNext()) { String[] params = ((String) it.next()).split( "[ ]+", 2); addAgentToProblem(problemID, null, params[0], params[1]); } } catch (FailureException e) { e.printStackTrace(); } ACLMessage response = request.createReply(); response.setPerformative(ACLMessage.INFORM); response.setContent("OK"); return response; } else if (a.getAction() instanceof GetAgents) { // String[] agents = getComputingAgents(); Vector<String> agents = offerAgentTypes(); jade.util.leap.ArrayList agentsList = new ArrayList(); for (String s : agents) { agentsList.add(s); } ACLMessage response = request.createReply(); response.setPerformative(ACLMessage.INFORM); Result r = new Result(a.getAction(), agentsList); getContentManager().fillContent(response, r); return response; } else if (a.getAction() instanceof GetResults) { ACLMessage response = request.createReply(); response.setPerformative(ACLMessage.INFORM); ArrayList res = new ArrayList(); Iterator it = results.iterator(); while (it.hasNext()) { Results r = (Results) it.next(); Iterator rit = r.getResults().iterator(); while (rit.hasNext()) { Task t = (Task) rit.next(); WS_Results wres = new WS_Results(); wres.setOptions(t.getAgent().optionsToString()); wres .setErrorRate(t.getResult() .getError_rate()); // wres.setPctIncorrect(t.getResult().getPct_incorrect()); res.add(wres); } } Result r = new Result(a.getAction(), res); getContentManager().fillContent(response, r); return response; } else if (a.getAction() instanceof GetOptions) { ACLMessage response = request.createReply(); GetOptions go = (GetOptions) a.getAction(); String agentName = getAgentByType(go.getAgentName()) .getLocalName(); Agent ag = onlyGetAgentOptions(agentName); if (ag == null) { response.setPerformative(ACLMessage.FAILURE); return response; } List mOptions = ag.getOptions(); ArrayList options = new ArrayList(); Iterator it = mOptions.iterator(); while (it.hasNext()) { pikater.ontology.messages.Option o = (pikater.ontology.messages.Option) it .next(); String name = o.getName(); String synopsis = o.getSynopsis(); String description = o.getDescription(); String value = o.getValue(); options .add(new pikater.ontology.webservices.Option( name, synopsis, description, value)); } response.setPerformative(ACLMessage.INFORM); Result r = new Result(a.getAction(), options); getContentManager().fillContent(response, r); return response; } } catch (UngroundedException e) { e.printStackTrace(); } catch (CodecException e) { e.printStackTrace(); } catch (OntologyException e) { e.printStackTrace(); } return null; } }); } private Agent onlyGetAgentOptions(String agent) { ACLMessage request = new ACLMessage(ACLMessage.REQUEST); request.addReceiver(new AID(agent, AID.ISLOCALNAME)); request.setProtocol(FIPANames.InteractionProtocol.FIPA_REQUEST); request.setLanguage(codec.getName()); request.setOntology(messagesOntology.getName()); pikater.ontology.messages.GetOptions get = new pikater.ontology.messages.GetOptions(); Action a = new Action(); a.setAction(get); a.setActor(this.getAID()); try { // Let JADE convert from Java objects to string getContentManager().fillContent(request, a); ACLMessage inform = FIPAService.doFipaRequestClient(this, request); if (inform == null) { return null; } Result r = (Result) getContentManager().extractContent(inform); return (Agent) r.getItems().get(0); } catch (CodecException ce) { ce.printStackTrace(); } catch (OntologyException oe) { oe.printStackTrace(); } catch (FIPAException fe) { fe.printStackTrace(); } return null; } @Override protected void displayPartialResult(ACLMessage inform) { try { Result r = (Result) getContentManager().extractContent(inform); results.add(r.getValue()); } catch (UngroundedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (CodecException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (OntologyException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void allOptionsReceived(int problemId) { sendProblem(problemId); } @Override protected void DisplayWrongOption(int problemGuiId, String agentName, String optionName, String errorMessage) { // TODO Auto-generated method stub } @Override protected void displayOptions(Problem problem, int performative) { // TODO Auto-generated method stub } private String optionsToWekaString(List options) { Iterator it = options.iterator(); String str = ""; while (it.hasNext()) { Option o = (Option) it.next(); str += "-" + o.getName() + " " + o.getValue() + " "; } return str.trim(); } @Override protected void onGuiEvent(GuiEvent arg0) { // TODO Auto-generated method stub } }