Agent Labs (JADE, JAVA, OWL)101525004 詹謹維 AgentLab1

Agent Labs (JADE, JAVA, OWL)101525004
詹謹維
AgentLab1
/*******************************************************************
Agent Lab1
此程式有兩個 Agent classes: (1) SimpleSender.java 和(2) SimpleReceiver.java,
Sender agent 對 Receiver agent 送出 agent communication language (ACL) message
(Hello),Receiver agent 收到 message 後回傳 Hello。
*******************************************************************/
/******************************************************************
SimpleSender
此 Agent 對 SimpleReceiver 送出一個 ACLMessage,內容為 Hello_Bob。
*******************************************************************/
importjava.io.InterruptedIOException;
importjava.io.IOException;
importjade.core.*;
importjade.core.behaviours.*;
importjade.lang.acl.*;
publicclassSimpleSenderextends Agent {
protectedvoid setup() {
addBehaviour(newSimpleBehaviour(this) {
privatebooleanfinished = false;
publicboolean done(){returnfinished;}
publicvoid action() {
System.out.println(getLocalName() +": about to inform bob hello");
doWait(5000);
ACLMessagemsg = newACLMessage(ACLMessage.INFORM);
msg.setSender(getAID());
AID id = newAID();
id.setName("[email protected]:1099/JADE");
id.addAddresses("http://140.115.155.2:7778/acc");
msg.addReceiver(id);
msg.setContent("Hello_Bob");
send(msg);
System.out.println(getLocalName() +": Send hello to bob");
ACLMessagere_msg = blockingReceive();
System.out.println(getLocalName() + ": received the following message : ");
System.out.println(re_msg.toString());
finished = true;
doDelete();
}
});
}
}
/******************************************************************
SimpleReceiver
此 Agent 接收 SimpleSender 送來的 ACLMessage 後,回傳一個 ACLMessage,內
容為 Hello Gary。
*******************************************************************/
importjade.core.*;
importjade.core.behaviours.*;
importjade.lang.acl.ACLMessage;
publicclassSimpleReceiverextends Agent {
protectedvoid setup() {
addBehaviour(newSimpleBehaviour(this) {
privatebooleanfinished = false;
publicboolean done(){returnfinished;}
publicvoid action() {
ACLMessagemsg = blockingReceive();
if (msg!= null){
System.out.println(getLocalName() + ": received the following message : ");
System.out.println(msg.toString());
ACLMessagesendback = newACLMessage(ACLMessage.INFORM);
sendback.setContent("Hello Gary");
sendback.addReceiver(msg.getSender());
send(sendback);
System.out.println(getLocalName() +": about to send back gary ");
finished = true;
doDelete();
}
else{
System.out.println(getLocalName() + ":No message received, Blocking the behavior till one is");
block();}} // end of action
}); // end of addBehaviour()
} // end of protected void setup()
} // end of SimpleReceiver class
Agent Lab2
/*******************************************************************
Agent Lab2 此程式有兩個 Agents: AgentLab2Sender.java(bob)及
AgentLab2Receiver.java(baz),目的為 Sender bob 對 Receiverbaz 利用 Template
送出”How are you?”的 ACL 訊息,Receiver 收到後確認為 baz 送出的訊息且內容
為”How are you?”則回傳”I’m fine”。
*******************************************************************/
/*******************************************************************
AgentLab2Sender
此 Agent 對 Receiver(baz)送出一個 ACLMessage,內容為”How are you?”,
且等待 Receiver 回傳訊息並且印出來。
*******************************************************************/
importjade.lang.acl.ACLMessage;
importjade.lang.acl.MessageTemplate;
importjava.io.*;
importjade.core.*;
importjade.core.behaviours.SimpleBehaviour;
importjade.core.behaviours.OneShotBehaviour;
importjade.lang.acl.*;
publicclassAgentLab2Senderextends Agent{
protectedvoid setup(){
addBehaviour(newOneShotBehaviour(this){
publicvoid action(){
System.out.println(getLocalName()+": about to send baz message");
ACLMessagemsg = newACLMessage(ACLMessage.INFORM);
msg.setSender(getAID());
AID id = newAID();
id.setLocalName("baz");
msg.addReceiver(id);
msg.setContent("How are you?");
send(msg);
System.out.println(getLocalName()+" Sending message to baz");
ACLMessagere_msg = blockingReceive();
System.out.println(getLocalName() + ": received the following message : ");
System.out.println(re_msg.toString());
}
}
);
}
}
/*******************************************************************
AgentLab2Receiver
此 Agent 接收來自 Sender(bob)的 ACLMessage,且確定內容為”How are
you?”,則回傳一個 ACLMessage 為”I’m fine.”。
*******************************************************************/
importjade.lang.acl.ACLMessage;
importjade.lang.acl.MessageTemplate;
importjava.io.*;
importjade.core.*;
importjade.core.behaviours.SimpleBehaviour;
importjade.core.behaviours.OneShotBehaviour;
importjade.lang.acl.*;
publicclassAgentLab2Receiverextends Agent{
classDoOneShotReceiveBehaviourextendsOneShotBehaviour{
privateMessageTemplatemessage_template = null;
publicDoOneShotReceiveBehaviour(Agent agent){
super(agent);
MessageTemplatematch_inform = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
AID id = newAID();
id.setLocalName("bob");
MessageTemplatematch_sender = MessageTemplate.MatchSender(id);
message_template = MessageTemplate.and(match_inform, match_sender);
}
publicvoid action(){
ACLMessagemsg = blockingReceive(message_template);
if(msg!=null){
if(msg.getContent().toString().equals("How are you?")){
System.out.println(getLocalName()+": received the following
message:");
System.out.println(msg.toString());
ACLMessagesendBack = newACLMessage(ACLMessage.INFORM);
sendBack.setContent("I'm fine.");
sendBack.addReceiver(msg.getSender());
send(sendBack);
System.out.println(getLocalName() + " sending back to bob...");
}
else{
System.out.println("I don't know what are you talking about.");
}
}
else{
System.out.println(getLocalName()+": no message recived.");
}
}
}
protectedvoid setup(){
DoOneShotReceiveBehaviourbehaviour = newDoOneShotReceiveBehaviour(this);
addBehaviour(behaviour);
}
}
Agent Lab3
/*******************************************************************
此 Lab3 分為兩個 Agents,AgentLab3Baz.java 及 AgentLab3Bob.java,
AgentLab3Baz.java 對 AgentLab3Bob.java 送出一個 ACLMessage 的 REQUEST,且
內容為”How are you?”,當 AgentLab3Bob.java 接收到訊息,若是確認內容為”How
are you?”且是由 AgentLab3Baz.java 送出的訊息,則回傳 AGREE;若是確認內容
為”How are you?”但是不是由 AgentLab3Baz.java 送出的,則回傳 REFUSE;若是
內容不為”How are you?”則回傳 NOT_UNDERSTOOD;當 AgentLab3Baz.java 再根
據回傳的狀態去 handleAgree, handleRefuse, handleNotUnderStood。
*******************************************************************/
/*******************************************************************
AgentLab3Baz.java
*******************************************************************/
importjava.io.InterruptedIOException;
importjava.io.IOException;
importjade.core.*;
importjade.core.behaviours.*;
importjade.lang.acl.*;
importjade.domain.FIPANames.InteractionProtocol;
importjade.proto.SimpleAchieveREInitiator;
importjava.util.Vector;
importjava.util.Enumeration;
publicclassAgentLab3Bazextends Agent{
staticclassDoRequestProtocolextendsSimpleAchieveREInitiator{
protectedDoRequestProtocol(Agent agent,ACLMessagemsg){super(agent,msg);}
protectedvoidhandleAgree(ACLMessagemsg){
System.out.println(myAgent.getLocalName()+": Bob said he's fine.");
}
protectedvoidhandleRefuse(ACLMessagemsg){
System.out.println(myAgent.getLocalName()+": Bob said Who are you?");
}
protectedvoidhandleNotUnderStood(ACLMessagemsg){
System.out.println(myAgent.getLocalName()+": Bob said I don't know what are you
talking about.");
}
}
protectedvoid setup(){
System.out.println(getLocalName()+": about to say How are you to bob.");
ACLMessagemsg = newACLMessage(ACLMessage.REQUEST);
AID id = newAID();
id.setLocalName("Bob");
msg.setSender(getAID());
msg.addReceiver(id);
msg.setContent("How are you?");
msg.setProtocol(InteractionProtocol.FIPA_REQUEST);
addBehaviour(newDoRequestProtocol(this,msg));
}
}
/*******************************************************************
AgentLab3Bob.java
*******************************************************************/
importjava.io.InterruptedIOException;
importjava.io.IOException;
importjade.core.*;
importjade.core.behaviours.*;
importjade.lang.acl.*;
importjade.domain.FIPANames.InteractionProtocol;
importjade.proto.SimpleAchieveREResponder;
importjava.util.Vector;
importjava.util.Enumeration;
publicclassAgentLab3Bobextends Agent{
staticclassDoRequestProtocolResponseextendsSimpleAchieveREResponder{
publicDoRequestProtocolResponse(Agent agent){
super(agent,createMessageTemplate(InteractionProtocol.FIPA_REQUEST));
}
protectedACLMessageprepareResponse(ACLMessagemsg){
ACLMessage response = msg.createReply();
if(msg.getContent()!=null&&msg.getContent().equals("How are you?")){
System.out.println(myAgent.getLocalName()+": "+
msg.getSender().getLocalName()+" sended me How are you?");
AID sender = msg.getSender();
if(sender.getLocalName().equals("Baz")){
response.setPerformative(ACLMessage.AGREE);
}
else{
response.setPerformative(ACLMessage.REFUSE);
}
}
else{
response.setPerformative(ACLMessage.NOT_UNDERSTOOD);
}
return response;
}
}
protectedvoid setup(){
addBehaviour(newDoRequestProtocolResponse(this));
}
}
Agent Lab4
/*******************************************************************
此 Lab4 分成兩個 Agents,AgentLab4Controller.java、AgentLab4MobileOne.java,
負責去跟 AMS 詢問可以移動的 Container,之後告知 AgentLab4MobileOne.java
移動至該 Container。
*******************************************************************/
/*******************************************************************
AgentLab4Controller.java
先 new 一個新的 Container,之後去跟 AMS 詢問可以移動的 Location,並
把 AMS 回傳的位置儲存下來,並且送出一個 MoveAction 給
AgentLab4MobileOne.java,使它移動至回傳的 Location。
*******************************************************************/
importjava.util.*;
importjava.io.*;
importjade.core.*;
importjade.core.behaviours.*;
importjade.core.Location;
importjade.lang.acl.*;
importjade.content.*;
importjade.content.lang.*;
import jade.content.lang.sl.*;
importjade.content.onto.basic.*;
importjade.domain.*;
importjade.domain.mobility.*;
importjade.domain.JADEAgentManagement.*;
importjade.gui.*;
importjade.domain.FIPANames.InteractionProtocol;
importjade.proto.SimpleAchieveREInitiator;
importjade.core.behaviours.OneShotBehaviour;
importjade.wrapper.AgentContainer;
publicclassAgentLab4Controllerextends Agent{
privateAgentContainerhome;
jade.core.Runtimeruntime = jade.core.Runtime.instance();
LinkedList<Location>location = newLinkedList<Location>();
protectedvoid setup(){
getContentManager().registerLanguage(newSLCodec());
getContentManager().registerOntology(MobilityOntology.getInstance());
addBehaviour(newOneShotBehaviour(this){
publicvoid action(){
try{
doWait(2000);
home = runtime.createAgentContainer(newProfileImpl());
Action action = newAction(getAMS(),newQueryPlatformLocationsAction());
ACLMessage request = newACLMessage(ACLMessage.REQUEST);
request.setLanguage(newSLCodec().getName());
request.setOntology(MobilityOntology.getInstance().getName());
getContentManager().fillContent(request,action);
request.addReceiver(action.getActor());
send(request);
ACLMessagerespone = blockingReceive();
ContentElementec = getContentManager().extractContent(respone);
Result result = (Result) ec;
jade.util.leap.Iterator it = result.getItems().iterator();
while(it.hasNext()){
Location loc = (Location) it.next();
System.out.println(loc);
location.add(loc);
}
Location destination = location.get(1);
MobileAgentDescription mad = newMobileAgentDescription();
AID id = newAID();
id.setLocalName("Bob");
mad.setName(id);
mad.setDestination(destination);
MoveAction ma = newMoveAction();
ma.setMobileAgentDescription(mad);
sendRequest(new Action(id,ma));
}catch(Exception ex){ex.printStackTrace();}
}
});
}
voidsendRequest(Action action){
ACLMessagerequestToMove = newACLMessage(ACLMessage.REQUEST);
requestToMove.setLanguage(newSLCodec().getName());
requestToMove.setOntology(MobilityOntology.getInstance().getName());
try{
getContentManager().fillContent(requestToMove,action);
requestToMove.addReceiver(action.getActor());
send(requestToMove);
}catch(Exception ex){ex.printStackTrace();}
}
}
/*******************************************************************
AgentLab4MobileOne.java
接收到來自 AgentLab4Controller.java 的要求並且確認身分後,使用
MoveAction 移動至 AgentLab4Controller.java 所要求的 Location。
*******************************************************************/
importjava.util.*;
importjava.io.*;
importjade.core.*;
importjade.core.behaviours.*;
importjade.core.Location;
importjade.lang.acl.*;
importjade.content.*;
importjade.content.lang.*;
import jade.content.lang.sl.*;
importjade.content.onto.basic.*;
importjade.domain.*;
importjade.domain.mobility.*;
importjade.domain.JADEAgentManagement.*;
importjade.gui.*;
importjade.domain.FIPANames.InteractionProtocol;
importjade.proto.SimpleAchieveREInitiator;
importjade.core.behaviours.OneShotBehaviour;
importjade.wrapper.AgentContainer;
publicclassAgentLab4MobileOneextends Agent{
private AID controller = new AID();
private Location destination;
voidinit(){
destination =here();
getContentManager().registerLanguage(newSLCodec());
getContentManager().registerOntology(MobilityOntology.getInstance());
}
protectedvoidbeforeMove(){
System.out.println("1.I am at the location :" + destination.getName());
}
protectedvoidafterMove(){
init();
System.out.println("2.I am at the lacation :"+ destination.getName());
}
protectedvoid setup(){
controller.setLocalName("Baz");
init();
addBehaviour(newOneShotBehaviour(this){
publicvoid action(){
ACLMessagemsg = blockingReceive(MessageTemplate.MatchSender(controller));
if(msg == null){block();return;}
if(msg.getPerformative() == ACLMessage.REQUEST){
try{
ContentElement content =
getContentManager().extractContent(msg);
Concept concept=((Action)content).getAction();
if(concept instanceofMoveAction){
MoveAction ma = (MoveAction) concept;
Location loc
=ma.getMobileAgentDescription().getDestination();
if(loc!=null) doMove(loc);
}
}catch(Exception ex){ex.printStackTrace();}
}
}
});
}
}
Agent Lab5
/*******************************************************************
此 Lab5 分為兩個 Agent,AgentLab5Ticker.java、AgentLab5Waker.java,
分別使用 TickerBehaviour 與 WakerBehaviour。
*******************************************************************/
/*******************************************************************
AgentLab5Ticker.java
實作 TickerBehaviour,設定每半秒皆會印出”Ticker tick”的字串。
*******************************************************************/
importjade.core.*;
importjade.core.behaviours.TickerBehaviour;
publicclassAgentLab5Tickerextends Agent{
publicvoid setup(){
addBehaviour(newTickerBehaviour(this,500){
publicvoidonTick(){
System.out.println("Ticker tick");
}
});
}
}
/*******************************************************************
AgentLab5Waker.java
實作 WakerBehaviour,設定程式執行一秒後會印出”Waker wake up”的字
串。
*******************************************************************/
importjade.core.*;
importjade.core.behaviours.WakerBehaviour;
publicclassAgentLab5Wakerextends Agent{
publicvoid setup(){
addBehaviour(newWakerBehaviour(this,1000){
protectedvoidonWake(){
System.out.println("Waker wake up");
}
});
}
}
Agent Lab6
/*******************************************************************
此 Lab 分為兩個 Agent,一個 GUI class,分別為 AgentLab6BuyerAgent.java、
AgentLab6Seller.java 和 BookSellerGui.java,AgentLab6BuyerAgent.java 想要買從
參數傳入書名的書,會與 DF 詢問有哪些 Seller 之後分別送出 cfp 的訊息,並且
等待 seller 回傳價錢,BuyerAgent 會選擇比較便宜的 Seller 並且送出
ACCEPT_PROPOSAL,並買下那本書。
*******************************************************************/
/*******************************************************************
AgentLab6BuyerAgent.java
*******************************************************************/
importjade.core.*;
importjade.core.behaviours.*;
importjade.domain.DFService;
importjade.domain.*;
importjade.domain.FIPAAgentManagement.*;
importjade.lang.acl.*;
publicclassAgentLab6BuyerAgentextends Agent{
private String targetBookTitle;
private AID[] sellerAgents ;
protectedvoid setup(){
System.out.println("Hello! Buyer-agent"+getAID().getName()+"is ready.");
Object[] args = getArguments();
if(args != null&&args.length>0){
targetBookTitle = (String) args[0];
System.out.println("Trying to buy " + targetBookTitle);
addBehaviour(newTickerBehaviour(this,30000){
protectedvoidonTick(){
DFAgentDescription template = newDFAgentDescription();
ServiceDescriptionsd = newServiceDescription();
sd.setType("book-selling");
template.addServices(sd);
try{
DFAgentDescription[] result =
DFService.search(myAgent,template);
sellerAgents = new AID[result.length];
for(int i = 0 ; i <result.length ; i++){
sellerAgents[i] = result[i].getName();
}
}catch(FIPAExceptionfe){
fe.printStackTrace();
}
myAgent.addBehaviour(newRequestPerformer());
}
});
}
else{
System.out.println("No book title specified");
doDelete();
}
}
protectedvoidtakeDown(){
System.out.println("Buyer-agent"+getAID().getName()+"terminating");
}
privateclassRequestPerformerextendsBehaviour{
private AID bestSeller;
privateintbestPrice;
privateintrepliesCnt = 0;
privateMessageTemplatemt ;
privateintstep = 0;
publicvoid action(){
switch(step){
case 0:
// Send the cfp to all sellers
ACLMessagecfp = newACLMessage(ACLMessage.CFP);
for(int i = 0 ; i<sellerAgents.length ; i++){
cfp.addReceiver(sellerAgents[i]);
}
cfp.setContent(targetBookTitle);
cfp.setConversationId("book-trade");
cfp.setReplyWith("cfp"+System.currentTimeMillis());
myAgent.send(cfp);
mt =
MessageTemplate.and(MessageTemplate.MatchConversationId("book-trade"),MessageTemplate.MatchInR
eplyTo(cfp.getReplyWith()));
step = 1;
break;
case 1:
// Receive all proposals/refusals from seller agents
ACLMessage reply = myAgent.receive(mt);
if(reply != null){
if(reply.getPerformative() == ACLMessage.PROPOSE){
int price = Integer.parseInt(reply.getContent());
if(bestSeller == null || price <bestPrice){
bestPrice = price;
bestSeller = reply.getSender();
}
}
repliesCnt++;
if(repliesCnt>= sellerAgents.length){
step = 2;
}
}
else{
block();
}
break;
case 2:
// Send the purchase order to the seller that provided the best offer
ACLMessage order = newACLMessage(ACLMessage.ACCEPT_PROPOSAL);
order.addReceiver(bestSeller);
order.setContent(targetBookTitle);
order.setConversationId("book-trade");
order.setReplyWith("order"+System.currentTimeMillis());
myAgent.send(order);
mt =
MessageTemplate.and(MessageTemplate.MatchConversationId("book-trade"),MessageTemplate.MatchInR
eplyTo(order.getReplyWith()));
step = 3;
break;
case 3:
// Receive the purchase order reply
reply = myAgent.receive(mt);
if(reply != null){
if(reply.getPerformative() == ACLMessage.INFORM){
System.out.println(targetBookTitle +" successfully
purchased.");
System.out.println("Price = "+bestPrice);
System.out.println("Seller is " + reply.getSender().getName());
myAgent.doDelete();
}
step = 4;
}
else{
block();
}
break;
}
}
publicboolean done(){
return ((step == 2 &&bestSeller == null) || step == 4);
}
}
}
/*******************************************************************
AgentLab6SellerAgent.java
*******************************************************************/
importjade.core.*;
importjade.core.behaviours.*;
importjade.domain.DFService;
importjade.domain.*;
importjade.domain.FIPAAgentManagement.*;
importjade.lang.acl.*;
importjava.util.*;
publicclassAgentLab6SellerAgentextends Agent{
privateHashtablecatalogue;
privateBookSellerGuimyGui;
protectedvoid setup(){
catalogue = newHashtable();
myGui = newBookSellerGui(this);
myGui.show();
DFAgentDescriptiondfd = newDFAgentDescription();
dfd.setName(getAID());
ServiceDescriptionsd = newServiceDescription();
sd.setType("book-selling");
sd.setName("JADE-book-trading");
dfd.addServices(sd);
try{
DFService.register(this,dfd);
}catch(FIPAExceptionfe){
fe.printStackTrace();
}
catalogue = newHashtable();
addBehaviour(newOfferRequestsServer());
addBehaviour(newPurchaseOrderServer());
}
protectedvoidtakeDown(){
try{
DFService.deregister(this);
}catch(FIPAExceptionfe){
fe.printStackTrace();
}
System.out.println("Seller-agent "+getAID().getName()+" terminating");
}
publicvoidupdateCatalogue(final String title, finalint price) {
addBehaviour(newOneShotBehaviour() {
publicvoid action() {
catalogue.put(title, new Integer(price));
}
} );
}
privateclassOfferRequestsServerextendsCyclicBehaviour{
privateMessageTemplatemt;
publicvoid action(){
mt = MessageTemplate.MatchPerformative(ACLMessage.CFP);
ACLMessagemsg = myAgent.receive(mt);
if(msg != null){
String title = msg.getContent();
ACLMessage reply = msg.createReply();
Integer price = (Integer) catalogue.get(title);
if(price != null){
reply.setPerformative(ACLMessage.PROPOSE);
reply.setContent(String.valueOf(price.intValue()));
}
else{
reply.setPerformative(ACLMessage.REFUSE);
reply.setContent("not-available");
}
myAgent.send(reply);
}
}
}
privateclassPurchaseOrderServerextendsCyclicBehaviour{
privateMessageTemplatemt;
publicvoid action(){
mt = MessageTemplate.MatchPerformative(ACLMessage.ACCEPT_PROPOSAL);
ACLMessagemsg = myAgent.receive(mt);
if(msg != null ){
ACLMessage reply = msg.createReply();
reply.setPerformative(ACLMessage.INFORM);
reply.setContent("Purchase complete");
myAgent.send(reply);
}
}
}
}
/*******************************************************************
BookSellerGui.java
*******************************************************************/
importjade.core.AID;
importjade.core.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
/**
@authorGiovanniCaire- TILAB
*/
classBookSellerGuiextendsJFrame {
private AgentLab6SellerAgent myAgent;
privateJTextFieldtitleField, priceField;
BookSellerGui(AgentLab6SellerAgent a) {
super(a.getLocalName());
myAgent = a;
JPanel p = newJPanel();
p.setLayout(newGridLayout(2, 2));
p.add(newJLabel("Book title:"));
titleField = newJTextField(15);
p.add(titleField);
p.add(newJLabel("Price:"));
priceField = newJTextField(15);
p.add(priceField);
getContentPane().add(p, BorderLayout.CENTER);
JButtonaddButton = newJButton("Add");
addButton.addActionListener(newActionListener() {
publicvoidactionPerformed(ActionEventev) {
try {
String title = titleField.getText().trim();
String price = priceField.getText().trim();
myAgent.updateCatalogue(title, Integer.parseInt(price));
titleField.setText("");
priceField.setText("");
}
catch (Exception e) {
JOptionPane.showMessageDialog(BookSellerGui.this, "Invalid values.
"+e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
} );
p = newJPanel();
p.add(addButton);
getContentPane().add(p, BorderLayout.SOUTH);
// Make the agent terminate when the user closes
// the GUI using the button on the upper right corner
addWindowListener(new WindowAdapter() {
publicvoidwindowClosing(WindowEvent e) {
myAgent.doDelete();
}
} );
setResizable(false);
}
publicvoid show() {
pack();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
intcenterX = (int)screenSize.getWidth() / 2;
intcenterY = (int)screenSize.getHeight() / 2;
setLocation(centerX - getWidth() / 2, centerY - getHeight() / 2);
super.show();
}
}
Agent Lab7
/*******************************************************************
此 Lab 為實作 ProtégéTutorial 的範例。
*******************************************************************/
Agent Lab8
/*******************************************************************
此 Lab 實作對 OWL 檔案的存取,一個 AgentLab8.java,此 Agent 去對 Lab8.owl
存取裡面 individual 的 Datatype Property 的資料,並且修改後存回 Lab8.owl。
*******************************************************************/
/*******************************************************************
AgentLab8.java
此 Agent 對 Lab8.owl 做存取的動作,Lab8 裡面有兩個 People(Class)的
individual,這個 individual 有一個 Datatype Property 叫做 hasID,此 Agent 第一
個 OneShotBehaviours 讀取 hasID 這個 property 做修改,之後存入叫
NEWLab8.owl 的檔案,第二個 OneShotBehaviour 去讀取 NEWLab8.owl 檔案,看
是否有正確的修改 hasID。
*******************************************************************/
import java.io.*;
importjava.util.*;
importjava.lang.reflect.Field;
importcom.hp.hpl.jena.rdf.model.RDFWriter;
importedu.stanford.smi.protegex.owl.model.OWLModel;
importedu.stanford.smi.protegex.owl.ProtegeOWL;
importedu.stanford.smi.protegex.owl.model.OWLDatatypeProperty;
importedu.stanford.smi.protegex.owl.model.OWLIndividual;
import edu.stanford.smi.protegex.owl.writer.rdfxml.rdfwriter.OWLModelWriter;
importjade.core.*;
importjade.core.behaviours.*;
publicclassAgentLab8extends Agent{
protectedvoid setup(){
addBehaviour(newOneShotBehaviour(this){
publicvoid action(){
OWLModelowlModel = null;
Collection<OWLDatatypeProperty> properties = null;
try{
owlModel =
ProtegeOWL.createJenaOWLModelFromInputStream(newFileInputStream("Lab8.owl"));
}catch(Exception e){
System.out.println(e.getStackTrace());
}
properties = owlModel.getUserDefinedOWLDatatypeProperties();
Collection<OWLIndividual>dataInstances = owlModel.getOWLIndividuals();
Iterator<OWLIndividual>dataIterator = dataInstances.iterator();
while(dataIterator.hasNext()){
OWLIndividual individual = dataIterator.next();
Iterator<OWLDatatypeProperty>propertyIterator =
properties.iterator();
while(propertyIterator.hasNext()){
OWLDatatypeProperty property = propertyIterator.next();
System.out.println(individual.getLocalName()+"
"+property.getLocalName()+":"+individual.getPropertyValue(property));
if(individual.getLocalName().equals("John")){
System.out.println("Changing John's ID to 123");
individual.setPropertyValue(property, "123");
}
}
}
try{
FileOutputStreamoutFile = newFileOutputStream("NEWLab8.owl");
Writer out = newOutputStreamWriter(outFile,"UTF-8");
OWLModelWriteromw = newOWLModelWriter(owlModel,
owlModel.getTripleStoreModel().getActiveTripleStore(),out);
omw.write();
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
});
addBehaviour(newOneShotBehaviour(this){
publicvoid action(){
OWLModelowlModel = null;
Collection<OWLDatatypeProperty> properties = null;
try{
owlModel =
ProtegeOWL.createJenaOWLModelFromInputStream(newFileInputStream("NEWLab8.owl"));
}catch(Exception e){
System.out.println(e.getStackTrace());
}
properties = owlModel.getUserDefinedOWLDatatypeProperties();
Collection<OWLIndividual>dataInstances = owlModel.getOWLIndividuals();
Iterator<OWLIndividual>dataIterator = dataInstances.iterator();
while(dataIterator.hasNext()){
OWLIndividual individual = dataIterator.next();
Iterator<OWLDatatypeProperty>propertyIterator =
properties.iterator();
while(propertyIterator.hasNext()){
OWLDatatypeProperty property = propertyIterator.next();
System.out.println(individual.getLocalName()+"
"+property.getLocalName()+":"+individual.getPropertyValue(property));
}
}
}
});
}
}