/*
* Semestralny projekt,
* Multiagentovy system JADE
* subor: Meteorolog.java
* autor: Patrik Bona <bona@intrak.sk>
* zadavatel: Ing. Marek Paralic, PhD.
* sk. rok: 2003/2004
* posledna zmena: 12. 1. 2004
*/
package pocasie;
import jade.core.Agent;
import jade.core.behaviours.*;
import jade.lang.acl.ACLMessage;
import jade.domain.FIPAException;
import jade.domain.DFService;
import jade.domain.FIPAAgentManagement.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.String;
/** Trieda implementuje agenta Meteorolog */
public class Meteorolog extends Agent {
private GUI gui;
private String mesto;
/** Metoda sluzi na inicializaciu agenta */
protected void setup() {
System.out.println("Hello, I am " +getAID().getName());
// kontrola zadanych argumentov
Object[] args = getArguments();
if(args == null || args.length != 1) {
System.out.println("Agent bol spusteny s nespravnymi argumentami !!!" + args.length);
doDelete();
return;
}
mesto = (String) args[0];
// pridanie spravania starajuceho
// sa o spracovanie sprav
addBehaviour(new SpracovanieSprav());
// registracia u DF agenta (yellow pages sluzba)
DFAgentDescription dfd = new DFAgentDescription();
dfd.setName(getAID());
ServiceDescription sd = new ServiceDescription();
sd.setType("stav-pocasia");
sd.setName("meteorologicky-stav-pocasia");
dfd.addServices(sd);
try {
DFService.register(this, dfd);
} catch (FIPAException fe){
fe.printStackTrace();
}
// zobrazenie grafickeho prostredia pre vstup udajov
gui = new GUI(this);
gui.show();
}
/** Metoda sa vola pri ukoncovani zivotu agenta */
protected void takeDown() {
// pokusime zrusit registraciu sluzieb
// u DF agenta
try {
DFService.deregister(this);
} catch (FIPAException fe) {
// fe.printStackTrace();
}
try {
gui.dispose();
} catch (Exception e) {
}
System.out.println(getAID().getName() + " terminated.");
}
/** Trieda implementuje pouzivatelske prostredie
* pre zadavanie stavu pocasia... */
private class GUI extends JFrame {
private JTextField stupneField, komentarField;
private Meteorolog myAgent;
/** Metoda vrati <code>String</code> udavajuci stav pocasia */
public String getStav() {
return mesto + "\t\t" + stupneField.getText() + " stupnov celzia \t(" + komentarField.getText() + ")";
}
GUI(Meteorolog m) {
super(mesto);
myAgent = m;
getContentPane().add(new JLabel(mesto),BorderLayout.NORTH);
JPanel p = new JPanel();
p.setLayout(new GridLayout(2,2));
p.add(new JLabel("Pocet stupnov:"));
stupneField = new JTextField(2);
p.add(stupneField);
p.add(new JLabel("Komentar:"));
komentarField = new JTextField(20);
p.add(komentarField);
getContentPane().add(p,BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
myAgent.doDelete();
}
} );
pack();
}
}
/** Trieda implementuje cyklicke spravanie,
* ktore sluzi na spracovanie sprav */
private class SpracovanieSprav extends CyclicBehaviour {
public void action() {
ACLMessage msg = myAgent.receive();
if(msg != null) { // ak prisla sprava tak ju spracujeme
//System.out.println(getAID().getName() + ": prijal som spravu od: " + msg.getSender().getName());
ACLMessage reply = msg.createReply();
// ak je obsha spravy retazec "pocasie" tak agent
// odpovie na spravu a posle aktualny stav pocasia
// inac odpovie spravou s performativou REFUSE
if(msg.getContent().compareTo("pocasie") == 0) {
reply.setPerformative(ACLMessage.INFORM);
reply.setContent(gui.getStav());
} else {
reply.setPerformative(ACLMessage.REFUSE);
}
send(reply);
} else { // ak nie, tak pozastavime vykonavanie spravania
// pokial nepride nejaka sprava
block();
}
}
}
}
syntax highlighted by Code2HTML, v. 0.9.1