package pikater; import jade.content.ContentElement; 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.basic.Action; import jade.content.onto.basic.Result; import jade.core.Agent; import jade.domain.DFService; import jade.domain.FIPAException; import jade.domain.FIPAAgentManagement.DFAgentDescription; import jade.domain.FIPAAgentManagement.FailureException; import jade.domain.FIPAAgentManagement.ServiceDescription; import jade.lang.acl.ACLMessage; import jade.lang.acl.MessageTemplate; import jade.proto.AchieveREResponder; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import pikater.ontology.messages.DataInstances; import pikater.ontology.messages.GetData; import pikater.ontology.messages.Instance; import pikater.ontology.messages.MessagesOntology; import pikater.ontology.messages.Metadata; import weka.core.Instances; public class Agent_ARFFReader extends Agent { /** * */ private static final long serialVersionUID = 7116837600070711675L; private Codec codec = new SLCodec(); private Ontology ontology = MessagesOntology.getInstance(); // File name private String fileName; // data read from file protected Instances data; // path to the file // private String path = "D:/diplomka/eclipse/diplomka/"; private String path = System.getProperty("user.dir") + System.getProperty("file.separator"); private boolean working = false; boolean ReadFromFile(String fileName) { if (fileName == null || fileName.length() == 0) { return false; } try { BufferedReader reader = new BufferedReader(new FileReader(fileName)); data = new Instances(reader); reader.close(); } catch (FileNotFoundException e) { e.printStackTrace(); System.out.println("Reading of data from file " + fileName + " failed."); return false; } catch (IOException e) { e.printStackTrace(); System.out.println("Reading of data from file " + fileName + " failed."); return false; } System.out.println("Reading of data from file " + fileName + " succesful."); return true; } @Override protected void setup() { getContentManager().registerLanguage(codec); getContentManager().registerOntology(ontology); // register with DF DFAgentDescription dfd = new DFAgentDescription(); ServiceDescription sd = new ServiceDescription(); sd.setType("ARFFReader"); sd.setName(getName()); dfd.setName(getAID()); dfd.addServices(sd); try { DFService.register(this, dfd); } catch (FIPAException e) { System.err.println(getLocalName() + " registration with DF unsucceeded. Reason: " + e.getMessage()); doDelete(); } MessageTemplate template = MessageTemplate .MatchPerformative(ACLMessage.REQUEST); addBehaviour(new GetDataResponder(this, template)); System.out.println("Agent " + getLocalName() + " is ready!"); } // end Setup protected ACLMessage sendData(ACLMessage request) { // responding message ACLMessage msgOut = request.createReply(); msgOut.setPerformative(ACLMessage.INFORM); try { ContentElement content = getContentManager() .extractContent(request); String file_name = ((GetData) ((Action) content).getAction()) .getFile_name(); DataInstances instances = new DataInstances(); // Read the file working = true; boolean file_read = ReadFromFile(file_name); working = false; if (!file_read) { throw new FailureException( "File haven't been read. Wrong file-name?"); } instances.fillWekaInstances(data); Metadata m = new Metadata(); m.setInternal_name(file_name); int ninst = instances.getInstances().size(); if (ninst > 0) { m.setNumber_of_attributes(((Instance) instances.getInstances() .iterator().next()).getValues().size()); } m.setNumber_of_instances(instances.getInstances().size()); // DataManagerService.saveMetadata(this, m); // Prepare the content Result result = new Result((Action) content, instances); try { getContentManager().fillContent(msgOut, result); } catch (CodecException ce) { ce.printStackTrace(); } catch (OntologyException oe) { oe.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } return msgOut; } // end SendData private class GetDataResponder extends AchieveREResponder { /** * */ private static final long serialVersionUID = 4340928332826216394L; public GetDataResponder(Agent a, MessageTemplate mt) { super(a, mt); } @Override protected ACLMessage prepareResponse(ACLMessage request) { ACLMessage agree = request.createReply(); agree.setPerformative(ACLMessage.AGREE); return agree; // return null; } // end prepareResponse @Override protected ACLMessage prepareResultNotification(ACLMessage request, ACLMessage response) { try { ContentElement content = getContentManager().extractContent( request); // GetData if (((Action) content).getAction() instanceof GetData) { return sendData(request); } } catch (CodecException ce) { ce.printStackTrace(); } catch (OntologyException oe) { oe.printStackTrace(); } ACLMessage notUnderstood = request.createReply(); notUnderstood.setPerformative(ACLMessage.NOT_UNDERSTOOD); return notUnderstood; } // end prepareResultNotification } }