24. // ONTOLOGIA GENERADA DESDE PROTEGE package policiaOntology; import jade.content.onto.*; //IMPORTS //... public class PoliciaOntology extends jade.content.onto.Ontology { //NOMBRE ONTOLOGIA public static final String ONTOLOGY_NAME = "policia"; // The singleton instance of this ontology private static ReflectiveIntrospector introspect = new ReflectiveIntrospector(); private static Ontology theInstance = new PoliciaOntology(); public static Ontology getInstance() { return theInstance; } // VOCABULARIO public static final String DISPONIBLE_TIEMPO="TIEMPO"; public static final String DISPONIBLE="Disponible"; public static final String NODISPONIBLE_MOTIVO="MOTIVO"; public static final String NODISPONIBLE="NoDisponible";
26. // PREDICADOS PredicateSchema ladronDetenidoSchema = new PredicateSchema(LADRONDETENIDO); add(ladronDetenidoSchema, policiaOntology.LadronDetenido.class); PredicateSchema noDisponibleSchema = new PredicateSchema(NODISPONIBLE); add(noDisponibleSchema, policiaOntology.NoDisponible.class); PredicateSchema disponibleSchema = new PredicateSchema(DISPONIBLE); add(disponibleSchema, policiaOntology.Disponible.class); // CAMPOS EN CONCEPTOS Y PREDICADOS (“slots”) ladronSchema.add(LADRON_DESCRIPCION, descripcionSchema, ObjectSchema.OPTIONAL); motivoSchema.add(MOTIVO_MOTIVO, (TermSchema)getSchema(BasicOntology.STRING), ObjectSchema.OPTIONAL); //...
27. // AGENTE “CLIENTE”, EN ESTE CASO EL TESTIGO DEL DELITO import policiaOntology.*; //Import de la ontologia en el directorio “policiaOntology” //Resto de imports import jade.content.lang.sl.*; //Import del lenguaje de contenido: SL public class Testigo extends Agent { //Se usara el lenguaje SL private Codec codec = new SLCodec(); private Ontology ontologia = PoliciaOntology.getInstance(); //... //Emision del mensaje ACLMessage msg = new ACLMessage(ACLMessage.REQUEST); //... // Se establece el protocolo de comunicaciones msg.setProtocol(FIPANames.InteractionProtocol.FIPA_REQUEST); // Se establece el lenguaje de contenido y la ontología del mensaje. msg.setLanguage(codec.getName()); msg.setOntology(ontologia.getName());
28. //... // Mostrar menu por pantalla //... // Crea la accion DetenerLadron con la descripcion dada DetenerLadron dl = new DetenerLadron(); // Registra el lenguaje de contenido y la ontologia utilizada getContentManager().registerLanguage(codec); getContentManager().registerOntology(ontologia); // Crea la accion a enviar asociándola a la acción DetenerLadron creada // necesitado por SL. Action a = new Action(getAID(), dl); // Rellena el mensaje ACL para que sea consistente con el lenguaje de contenido y la //ontologia getContentManager().fillContent(msg,a); //...
29. class ManejadorInitiator extends AchieveREInitiator{ public ManejadorInitiator(Agent a,ACLMessage msg) { super(a,msg); } protected void handleAgree(ACLMessage agree) { try{ // Decodifica el mensaje ACL recibido mediante el lenguaje de contenido y la ontologia actuales ContentElement ce = getContentManager().extractContent(agree); if (ce instanceof Disponible) { // Recibido un AGREE con contenido correcto Disponible disp = (Disponible) ce; // Transforma el contenido en el objeto predicado EstoyDisponible de la ontologia //...
30. protected void handleInform(ACLMessage inform) { try{ // Decodifica el mensaje ACL recibido mediante el lenguaje de contenido y la ontologia actuales ContentElement ce = getContentManager().extractContent(inform); if (ce instanceof LadronDetenido) { // Recibido un INFORM con contenido correcto LadronDetenido ld = (LadronDetenido) ce; // Transforma el contenido en el objeto predicado LadronDetenido de la ontologia //...
31. protected void handleRefuse(ACLMessage refuse) { try{ // Decodifica el mensaje ACL recibido mediante el lenguaje de contenido y la ontologia actuales ContentElement ce = getContentManager().extractContent(refuse); if (ce instanceof NoDisponible) { // Recibido un REFUSE con contenido correcto NoDisponible nd = (NoDisponible) ce; // Transforma el contenido en el objeto predicado NoDisponible de la ontologia //... protected void handleNotUnderstood(ACLMessage notUnderstood) { System.out.println("La comisaria " + notUnderstood.getSender().getName() + " no entiende el mensaje."); } //...
32. // AGENTE “SERVIDOR”, EN ESTE CASO LA COMSARIA import policiaOntology.*; //Import ontologia import jade.content.lang.Codec; import jade.content.lang.sl.SLCodec; //Import lenguaje SL //Resto imports public class Comisaria extends Agent { private Codec codec = new SLCodec(); private Ontology ontologia = PoliciaOntology.getInstance(); //... protected void setup() { // Crea una plantilla que solo acepte los mensajes ACL recibidos que utilizan el protocolo FIPA_REQUEST // Y ademas que sean del tipo REQUEST // Y ademas que esten codificados mediante el lenguaje de contenido SLCodec // Y que utilicen la ontologia policiaOntology
33. MessageTemplate protocolo = MessageTemplate.MatchProtocol(FIPANames.InteractionProtocol.FIPA_REQUEST); MessageTemplate performativa = MessageTemplate.MatchPerformative(ACLMessage.REQUEST); MessageTemplate lenguajeContenido = MessageTemplate.MatchLanguage(codec.getName()); MessageTemplate ontoTemplate = MessageTemplate.MatchOntology(ontologia.getName()); MessageTemplate plantilla = MessageTemplate.and(MessageTemplate.and(protocolo, performativa),MessageTemplate.and(lenguajeContenido, ontoTemplate)); // Registra el lenguaje de contenido y la ontologia en el gestor de contenidos getContentManager().registerLanguage(codec); getContentManager().registerOntology(ontologia);
34. class ManejadorResponder extends AchieveREResponder { public ManejadorResponder(Agent a,MessageTemplate mt) { super(a,mt); } protected ACLMessage prepareResponse(ACLMessage request) { ACLMessage respuesta = request.createReply(); try { // Decodifica el mensaje ACL recibido a un objeto de tipo Action mediante el lenguaje de contenido y la ontologia actuales Action a = (Action) myAgent.getContentManager().extractContent(request); // Recupera el objeto accion de la ontologia DetenerLadron dl = (DetenerLadron) a.getAction();
35. // Crea un predicado Disponible de la ontologia añadiandole el concepto TiempoLlegada TiempoLlegada tl = new TiempoLlegada(); tl.setTiempo((int)(Math.random()*10)); Disponible disp = new Disponible(); disp.setTIEMPO(tl); getContentManager().fillContent(respuesta,disp); protected ACLMessage prepareResultNotification(ACLMessage request,ACLMessage response) { // Si la policia fue a detener al ladron ACLMessage inform = request.createReply(); try { ContentElement ce = getContentManager().extractContent(response);
36. Disponible disp = (Disponible)ce; System.out.println("[Comisaria "+getLocalName()+"]: Hemos conseguido detener al ladron!!"); inform.setPerformative(ACLMessage.INFORM); Action a = (Action) myAgent.getContentManager().extractContent(request); DetenerLadron dl = (DetenerLadron) a.getAction(); // Crea un predicado LadronDetenido de la ontologia y le añade el ladron detenido LadronDetenido ld = new LadronDetenido(); ld.setLadron(dl.getLadron()); getContentManager().fillContent(inform,ld);