hi all ......
i have a problem in buer code ...
i make some changes in Book buyer Agent ... & I have a problem in GUI
when execute this code there is nothing appear in GUI interface ...
thanks
////////////////
code...................................
/*************************BuyerAgent**************************\
import jade.core.Agent;
import jade.core.AID;
import jade.core.behaviours.*;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
import jade.domain.DFService;
import jade.domain.FIPAException;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.domain.FIPAAgentManagement.ServiceDescription;
public class BookBuyerAgent extends Agent {
private String targetBookTitle;
private BookBuyerGui myGui;
private AID[] sellerAgents;
private AID bankAgent;
private String MyBalance;
protected void setup() {
System.out.println("Hallo! Buyer-agent "+getAID().getName()+" is ready.");
myGui = new BookBuyerGuiImpl();
myGui.setAgent(this);
myGui.show();
targetBookTitle = (String) args[0];
myGui.notifyUser("Target book is "+targetBookTitle);
addBehaviour(new CreateAccount());
addBehaviour(new TickerBehaviour(this, 1000) {
protected void onTick() {
myGui.notifyUser("Trying to buy "+targetBookTitle);
DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("book-selling");
template.addServices(sd);
try {
DFAgentDescription[] result = DFService.search(myAgent, template);
myGui.notifyUser("Found the following seller agents:");
sellerAgents = new AID[result.length];
for (int i = 0; i < result.length; ++i) {
sellerAgents[i] = result[i].getName();
myGui.notifyUser(sellerAgents[i].getName());
}
}
catch (FIPAException fe) {
fe.printStackTrace();
}
myAgent.addBehaviour(new RequestPerformer());
}
} );
}
}
protected void takeDown() {
System.out.println("Buyer-agent "+getAID().getName()+" terminating.");
}
private class CreateAccount extends OneShotBehaviour {
private MessageTemplate mt;
private ACLMessage reply;
String myID="";
public void action() {
myGui.notifyUser("Trying to Search Bank Agent ");
DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("BANK_AGENT");
template.addServices(sd);
try {
DFAgentDescription[] result = DFService.search(myAgent, template);
myGui.notifyUser("Bank Agent Found is :");
for (int i = 0; i < result.length; ++i) {
bankAgent= result[i].getName();
myGui.notifyUser(bankAgent.getName());
}
ACLMessage request = new ACLMessage(ACLMessage.REQUEST);
request.addReceiver(bankAgent);
request.setContent("b");
myAgent.send(request);
mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
for(;;){
reply = myAgent.receive(mt);
if(reply!=null)
break;
}
if (reply != null) {
if (reply.getPerformative() == ACLMessage.INFORM) {
myID = reply.getContent();
System.out.println("The ID Received From Bank Agent is: "+myID.toString());
MyBalance=getBalance();
System.out.println("My Balance Received from bank is ="+MyBalance.toString());
}
else
System.out.println("Reply Performative is NULL ");
}
else
System.out.println("Reply Messege is NULL ");
start();
}
catch (FIPAException fe) {
fe.printStackTrace();
}
}
public String getBalance(){
String balance="";
ACLMessage request = new ACLMessage(ACLMessage.QUERY_REF);
request.addReceiver(bankAgent);
request.setContent("");
request.setConversationId("balance");
request.setReplyWith("QUERY_REF"+System.currentTimeMillis());
myAgent.send(request);
mt = MessageTemplate.and(MessageTemplate.MatchConversationId("balance"),
MessageTemplate.MatchInReplyTo(request.getReplyWith()));
for(;;){
reply = myAgent.receive(mt);
if(reply!=null)
break;
}
if (reply != null) {
if (reply.getPerformative() == ACLMessage.INFORM) {
balance = reply.getContent();
}
else
System.out.println("Reply Messege of Balance is NULL ");
}
else
System.out.println("Reply Performative of Balance is not INFORM ");
return balance;
}
public void start(){
mt=MessageTemplate.MatchPerformative(ACLMessage.INFORM);
ACLMessage start = myAgent.receive(mt);
if (start != null) {
String starts = (String) start.getContent();
System.out.println( myAgent.getLocalName() + " <- " +starts);
}
}
}
private class RequestPerformer extends Behaviour {
private AID bestSeller;
private int bestPrice;
private int repliesCnt = 0;
private MessageTemplate mt;
private int step = 0;
private int quantity;
private int mony;
private String rbalance="";
public void action() {
switch (step) {
case 0:
ACLMessage cfp = new ACLMessage(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.MatchInReplyTo(cfp.getReplyWith()));
step = 1;
break;
case 1:
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:
ACLMessage order = new ACLMessage(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.MatchInReplyTo(order.getReplyWith()));
step = 3;
break;
case 3:
reply = myAgent.receive(mt);
if (reply != null) {
if (reply.getPerformative() == ACLMessage.INFORM) {
System.out.println(targetBookTitle+" successfully purchased from agent "+reply.getSender().getName());
System.out.println("Price = "+bestPrice);
myAgent.doDelete();
ACLMessage Transefer = new ACLMessage(ACLMessage.QUERY_REF);
Transefer.addReceiver(bankAgent);
Transefer.setContent("1,"+bestSeller.getName()+","+bestPrice);
Transefer.setConversationId("Transefer");
myAgent.send(Transefer);
System.out.println("send transfer to\t"+bankAgent.getLocalName()+Transefer.getContent()+" to buy"+targetBookTitle+"\t mony"+bestPrice);
mt = MessageTemplate.and(MessageTemplate.MatchConversationId("Transefer"),
MessageTemplate.MatchPerformative(ACLMessage.INFORM));
MessageTemplate.MatchInReplyTo(Transefer.getReplyWith());
for(;;){
reply = myAgent.receive(mt);
if(reply!=null)
break;
}
if (reply != null) {
if (reply.getPerformative() == ACLMessage.INFORM) {
rbalance = reply.getContent();
System.out.println("The ID Received From Bank Agent is: "+rbalance.toString());
MyBalance=getBalance();
System.out.println("My Balance Received from bank is ="+MyBalance.toString());
}
else
System.out.println("Reply Performative is NULL ");
}
else
System.out.println("Reply Messege is NULL ");
}
else {
System.out.println("Attempt failed: requested book already sold.");
}
step = 4;
}
else {
block();
}
break;
}
}
public String getBalance(){
String balance="";
ACLMessage reply;
ACLMessage request = new ACLMessage(ACLMessage.QUERY_REF);
request.addReceiver(bankAgent);
request.setContent("");
request.setConversationId("balance");
request.setReplyWith("QUERY_REF"+System.currentTimeMillis());
myAgent.send(request);
mt = MessageTemplate.and(MessageTemplate.MatchConversationId("balance"),
MessageTemplate.MatchInReplyTo(request.getReplyWith()));
for(;;){
reply = myAgent.receive(mt);
if(reply!=null)
break;
}
if (reply != null) {
if (reply.getPerformative() == ACLMessage.INFORM) {
balance = reply.getContent();
}
else
System.out.println("Reply Messege of Balance is NULL ");
}
else
System.out.println("Reply Performative of Balance is not INFORM ");
return balance;
}
public boolean done() {
if (step == 2 && bestSeller == null) {
System.out.println("Attempt failed: "+targetBookTitle+" not available for sale");
}
return ((step == 2 && bestSeller == null) || step == 4);
}
}
}
/*****************************BookBuyerGuiImpl********************************\
import jade.gui.TimeChooser;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.Date;
/**
J2SE (Swing-based) implementation of the GUI of the agent that
tries to buy books on behalf of its user
*/
public class BookBuyerGuiImpl extends JFrame implements BookBuyerGui {
private BookBuyerAgent myAgent;
private JTextField titleTF, desiredCostTF, maxCostTF, deadlineTF;
private JButton setDeadlineB;
private JButton setCCB, buyB, resetB, exitB;
private JTextArea logTA;
//private Date deadline;
public BookBuyerGuiImpl() {
super();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
myAgent.doDelete();
}
} );
JPanel rootPanel = new JPanel();
rootPanel.setLayout(new GridBagLayout());
rootPanel.setMinimumSize(new Dimension(330, 125));
rootPanel.setPreferredSize(new Dimension(330, 125));
///////////
// Line 0
///////////
JLabel l = new JLabel("Book to buy:");
l.setHorizontalAlignment(SwingConstants.LEFT);
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(5, 3, 0, 3);
rootPanel.add(l, gridBagConstraints);
titleTF = new JTextField(64);
titleTF.setMinimumSize(new Dimension(222, 20));
titleTF.setPreferredSize(new Dimension(222, 20));
gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.anchor = GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new Insets(5, 3, 0, 3);
rootPanel.add(titleTF, gridBagConstraints);
rootPanel.setBorder(new BevelBorder(BevelBorder.LOWERED));
getContentPane().add(rootPanel, BorderLayout.NORTH);
logTA = new JTextArea();
logTA.setEnabled(false);
JScrollPane jsp = new JScrollPane(logTA);
jsp.setMinimumSize(new Dimension(300, 180));
jsp.setPreferredSize(new Dimension(300, 180));
JPanel p = new JPanel();
p.setBorder(new BevelBorder(BevelBorder.LOWERED));
p.add(jsp);
getContentPane().add(p, BorderLayout.CENTER);
p = new JPanel();
buyB = new JButton("Buy");
buyB.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String targetBookTitle = titleTF.getText().trim();
//String title = titleField.getText().trim();
//String quantity = quantityTF.getText().trim();
//myAgent.updateCatalogue(targetBookTitle, Integer.parseInt(quantity));
titleTF.setText("");
//quantityTF.setText("");
// int desiredCost = -1;
//int maxCost = -1;
if (targetBookTitle != null && targetBookTitle.length() > 0) {
// if (quantity != null && quantity.length() > 0) {
}
else {
// No book title specified
JOptionPane.showMessageDialog(BookBuyerGuiImpl.this, "No book title specified", "WARNING", JOptionPane.WARNING_MESSAGE);
}
}
} );
resetB = new JButton("Reset");
resetB.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
titleTF.setText("");
desiredCostTF.setText("");
maxCostTF.setText("");
deadlineTF.setText("");
// deadline = null;
}
} );
exitB = new JButton("Exit");
exitB.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
myAgent.doDelete();
}
} );
buyB.setPreferredSize(resetB.getPreferredSize());
exitB.setPreferredSize(resetB.getPreferredSize());
p.add(buyB);
p.add(resetB);
p.add(exitB);
p.setBorder(new BevelBorder(BevelBorder.LOWERED));
getContentPane().add(p, BorderLayout.SOUTH);
pack();
setResizable(false);
}
public void setAgent(BookBuyerAgent a) {
myAgent = a;
setTitle(myAgent.getName());
}
public void notifyUser(String message) {
logTA.append(message+"\n");
}
}