Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A....

23
Realizzare Sistemi Realizzare Sistemi Multi-Agente con Multi-Agente con JADE JADE - Seconda Parte - - Seconda Parte - Corso di Reti di Corso di Reti di Calcolatori Calcolatori A.A. 2004-2005 A.A. 2004-2005 Ing. Domenico Rosaci Ing. Domenico Rosaci

Transcript of Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A....

Page 1: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Realizzare Sistemi Multi-Realizzare Sistemi Multi-Agente con JADEAgente con JADE- Seconda Parte -- Seconda Parte -

Corso di Reti di CalcolatoriCorso di Reti di Calcolatori

A.A. 2004-2005A.A. 2004-2005

Ing. Domenico RosaciIng. Domenico Rosaci

Page 2: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

L’ambiente JBuilderL’ambiente JBuilder

Page 3: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Il componente jPanelIl componente jPanel

Page 4: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Il componente jDBTextIl componente jDBText

Page 5: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Il componente jButtonIl componente jButton

Page 6: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

jButton: il metodo actionPerformedjButton: il metodo actionPerformed

Page 7: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Dentro actionPerformedDentro actionPerformed // Button Registrati per aprire il pannello di registrazione// Button Registrati per aprire il pannello di registrazione void jButtonRegistrati_actionPerformed(ActionEvent e) {void jButtonRegistrati_actionPerformed(ActionEvent e) { jDbTextUserName.setText("");jDbTextUserName.setText(""); jPasswordField.setText("");jPasswordField.setText(""); cardLayout2.show(jPanelRegistrati,"jPanelRegistraDati");cardLayout2.show(jPanelRegistrati,"jPanelRegistraDati"); }}

Page 8: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

jPanel “Registra Dati”jPanel “Registra Dati”

Page 9: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Entriamo del pulsante OKEntriamo del pulsante OK void jButtonInsertRegistrazione_actionPerformed(ActionEvent e) {void jButtonInsertRegistrazione_actionPerformed(ActionEvent e) { String Cognome = jdbTextFieldCognome.getText();String Cognome = jdbTextFieldCognome.getText(); String Nome = jdbTextFieldNome.getText();String Nome = jdbTextFieldNome.getText(); String Cdl = jdbTextFieldCdl.getText();String Cdl = jdbTextFieldCdl.getText(); String UserName = jdbTextFieldUserName.getText();String UserName = jdbTextFieldUserName.getText(); String Password = jPasswordFieldRegistra.getText();String Password = jPasswordFieldRegistra.getText();

parameterRowControllaRegistrazione.setString("Username", UserName);parameterRowControllaRegistrazione.setString("Username", UserName); queryDataSetParametriCorretti.executeQuery();queryDataSetParametriCorretti.executeQuery();

// UserName e Password diversi da quelli già presenti nel database// UserName e Password diversi da quelli già presenti nel database if (queryDataSetParametriCorretti.isEmpty()){if (queryDataSetParametriCorretti.isEmpty()){ parameterRowRegistrazione.setString("Cognome", Cognome);parameterRowRegistrazione.setString("Cognome", Cognome); parameterRowRegistrazione.setString("Nome", Nome);parameterRowRegistrazione.setString("Nome", Nome); parameterRowRegistrazione.setString("CorsodiLaurea", Cdl);parameterRowRegistrazione.setString("CorsodiLaurea", Cdl); parameterRowRegistrazione.setString("Username", UserName);parameterRowRegistrazione.setString("Username", UserName); parameterRowRegistrazione.setString("Password", Password);parameterRowRegistrazione.setString("Password", Password); try{try{ queryDataSetRegistrazione.executeQuery();queryDataSetRegistrazione.executeQuery(); }} catch (DataSetException ex) {catch (DataSetException ex) { }} jDbTextUserName.setText(UserName);jDbTextUserName.setText(UserName); jPasswordField.setText(Password);jPasswordField.setText(Password); cardLayout2.show(jPanelRegistrati,"jPanel8");cardLayout2.show(jPanelRegistrati,"jPanel8"); jButtonRegistrati.setEnabled(false);jButtonRegistrati.setEnabled(false); }} else{else{ DialogMsg Msg = new DialogMsg();DialogMsg Msg = new DialogMsg(); String Message="Attenzione. Username non utilizzabile";String Message="Attenzione. Username non utilizzabile"; Msg.SetMsg(Message);Msg.SetMsg(Message); Msg.Visible();Msg.Visible(); }} }}

Page 10: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Eseguire una query su un databaseEseguire una query su un database

Page 11: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

La parameter rowLa parameter row

Page 12: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Il DBMS jDataStoreIl DBMS jDataStore

Page 13: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Il collegamento remotoIl collegamento remoto

Page 14: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

La query per la registrazioneLa query per la registrazione

Page 15: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Il bottone “Entra”Il bottone “Entra” // Button Entra controlli su username e password// Button Entra controlli su username e password void jButtonEntra_actionPerformed(ActionEvent e) {void jButtonEntra_actionPerformed(ActionEvent e) { UserName = jDbTextUserName.getText();UserName = jDbTextUserName.getText(); Password = jPasswordField.getText();Password = jPasswordField.getText(); if (UserName.length()!=0 && Password.length()!=0){if (UserName.length()!=0 && Password.length()!=0){ parameterRowControllaRegistrazione.setString("Username", UserName);parameterRowControllaRegistrazione.setString("Username", UserName); parameterRowControllaRegistrazione.setString("Password", Password);parameterRowControllaRegistrazione.setString("Password", Password); // controlla se username e password sono corretti// controlla se username e password sono corretti queryDataSetControllaRegistrazione.executeQuery();queryDataSetControllaRegistrazione.executeQuery(); if (!queryDataSetControllaRegistrazione.isEmpty()){if (!queryDataSetControllaRegistrazione.isEmpty()){ cardLayout1.show(contentPane,"jTabbedPane1");cardLayout1.show(contentPane,"jTabbedPane1"); jLabelNomeUtente.setText("Nick Name: "+UserName);jLabelNomeUtente.setText("Nick Name: "+UserName); parameterRowMostraAppunti.setString("username",UserName);parameterRowMostraAppunti.setString("username",UserName); queryDataSetMostraAppunti.executeQuery();queryDataSetMostraAppunti.executeQuery(); Agente = new ClientAgent(UserName,this);Agente = new ClientAgent(UserName,this); Entrato=true;Entrato=true; }} else{else{ DialogMsg Msg = new DialogMsg();DialogMsg Msg = new DialogMsg(); String Message="Username e Password non riconosciuti. Se non sei registrato fallo ora!!";String Message="Username e Password non riconosciuti. Se non sei registrato fallo ora!!"; Msg.SetMsg(Message);Msg.SetMsg(Message); Msg.Visible();Msg.Visible(); jButtonRegistrati.setEnabled(true);jButtonRegistrati.setEnabled(true); }} }} else{else{ DialogMsg Msg = new DialogMsg();DialogMsg Msg = new DialogMsg(); String Message="Attenzione devi immettere username e password";String Message="Attenzione devi immettere username e password"; Msg.SetMsg(Message);Msg.SetMsg(Message); Msg.Visible();Msg.Visible(); }} }}

Page 16: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Mostrare gli appuntiMostrare gli appunti

Page 17: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Il bottone “Sfoglia”Il bottone “Sfoglia” void jButtonSfoglia_actionPerformed(ActionEvent e) {void jButtonSfoglia_actionPerformed(ActionEvent e) { if (JFileChooser.APPROVE_OPTION == jFileChooser1.showOpenDialog(this)) {if (JFileChooser.APPROVE_OPTION == jFileChooser1.showOpenDialog(this)) {

nome = jFileChooser1.getSelectedFile().getName();nome = jFileChooser1.getSelectedFile().getName(); percorso = jFileChooser1.getSelectedFile().getPath();percorso = jFileChooser1.getSelectedFile().getPath();

int lunghezza = nome.length();int lunghezza = nome.length(); int suffisso = 4;int suffisso = 4; int prefisso = lunghezza-suffisso;int prefisso = lunghezza-suffisso; nomefile = nome.substring(0,prefisso);nomefile = nome.substring(0,prefisso); estensione = nome.substring(prefisso+1,lunghezza);estensione = nome.substring(prefisso+1,lunghezza);

// Display the name of the opened directory+file in the TextField.// Display the name of the opened directory+file in the TextField. jdbTextFieldPathAppunto.setText(jFileChooser1.getSelectedFile().getPath());jdbTextFieldPathAppunto.setText(jFileChooser1.getSelectedFile().getPath()); // Code will need to go here to actually load text// Code will need to go here to actually load text // from file into TextArea.// from file into TextArea. }} }}

Page 18: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Il bottone “Share”Il bottone “Share” // Condivide l'appunto inserendolo nel database remoto// Condivide l'appunto inserendolo nel database remoto void jButtonShare_actionPerformed(ActionEvent e) {void jButtonShare_actionPerformed(ActionEvent e) { try {try { // change the values in the parameter row// change the values in the parameter row // and refresh the display// and refresh the display parameterRowRemoto.setString("percorso",percorso);parameterRowRemoto.setString("percorso",percorso); parameterRowRemoto.setString("file", nome);parameterRowRemoto.setString("file", nome); parameterRowRemoto.setString("titolo",nomefile);parameterRowRemoto.setString("titolo",nomefile); parameterRowRemoto.setString("formato",estensione);parameterRowRemoto.setString("formato",estensione); parameterRowRemoto.setString("dimensioni",jdbTextFieldDimensioneFile.getText());parameterRowRemoto.setString("dimensioni",jdbTextFieldDimensioneFile.getText()); parameterRowRemoto.setString("pagine",jdbTextFieldPagineFile.getText());parameterRowRemoto.setString("pagine",jdbTextFieldPagineFile.getText()); parameterRowRemoto.setString("materia",jdbTextFieldMateria.getText());parameterRowRemoto.setString("materia",jdbTextFieldMateria.getText()); parameterRowRemoto.setString("settore",jdbTextFieldSSD.getText());parameterRowRemoto.setString("settore",jdbTextFieldSSD.getText()); parameterRowRemoto.setString("annoacc",jdbTextFieldAnno.getText());parameterRowRemoto.setString("annoacc",jdbTextFieldAnno.getText()); parameterRowRemoto.setString("username",UserName);parameterRowRemoto.setString("username",UserName); queryDataSetInsertRemoto.executeQuery();queryDataSetInsertRemoto.executeQuery(); }} catch (DataSetException ex) {catch (DataSetException ex) { }} try{try{ parameterRowMostraAppunti.setString("username",UserName);parameterRowMostraAppunti.setString("username",UserName); queryDataSetMostraAppunti.executeQuery();queryDataSetMostraAppunti.executeQuery(); }} catch (DataSetException ex) {catch (DataSetException ex) { ex.printStackTrace(); }ex.printStackTrace(); } jdbTextFieldPathAppunto.setText("");jdbTextFieldPathAppunto.setText(""); jdbTextFieldDimensioneFile.setText("");jdbTextFieldDimensioneFile.setText(""); jdbTextFieldPagineFile.setText("");jdbTextFieldPagineFile.setText(""); jdbTextFieldMateria.setText("");jdbTextFieldMateria.setText(""); jdbTextFieldSSD.setText("");jdbTextFieldSSD.setText(""); jdbTextFieldAnno.setText("");jdbTextFieldAnno.setText(""); }}

Page 19: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

queryDataSetInsertRemotoqueryDataSetInsertRemoto

Page 20: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

La chatLa chat

Page 21: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Il bottone “utenti on line”Il bottone “utenti on line”

// Button CercaAgenti Cerca gli agenti attivi// Button CercaAgenti Cerca gli agenti attivi void jButtonCercaAgenti_actionPerformed(ActionEvent void jButtonCercaAgenti_actionPerformed(ActionEvent

e) {e) { FillAgentComboBox();FillAgentComboBox(); }}

Page 22: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Il metodo Il metodo FillAgentComboBox()FillAgentComboBox()

// Riempie il comboBox degli agenti attivi// Riempie il comboBox degli agenti attivi void FillAgentComboBox(){void FillAgentComboBox(){ String [][] Lista = Agente.searchAgents();String [][] Lista = Agente.searchAgents(); jComboBoxCercaAgenti.removeAllItems();jComboBoxCercaAgenti.removeAllItems(); for (int i=0; i<Lista.length; i++){for (int i=0; i<Lista.length; i++){ jComboBoxCercaAgenti.addItem(Lista [i] [0]);jComboBoxCercaAgenti.addItem(Lista [i] [0]); }} }}

Agente è l’oggetto creato al momento del login (vedi slide Agente è l’oggetto creato al momento del login (vedi slide 15)15)

Page 23: Realizzare Sistemi Multi- Agente con JADE - Seconda Parte - Corso di Reti di Calcolatori A.A. 2004-2005 Ing. Domenico Rosaci.

Agente.searchAgents()Agente.searchAgents() // Ricerca agenti attivi presso il DF// Ricerca agenti attivi presso il DF public String [][] searchAgents() {public String [][] searchAgents() {

DFAgentDescription dfd = new DFAgentDescription();DFAgentDescription dfd = new DFAgentDescription(); ServiceDescription sd = new ServiceDescription();ServiceDescription sd = new ServiceDescription(); AID DfName=getDefaultDF();AID DfName=getDefaultDF(); try {try { DFAgentDescription[] result = DFService.search(this, DfName, dfd);DFAgentDescription[] result = DFService.search(this, DfName, dfd); String [][] out= new String [result.length] [2];String [][] out= new String [result.length] [2]; for (int i=0; i<result.length; i++) {for (int i=0; i<result.length; i++) { out [i] [0] = result[i].getName().getLocalName();out [i] [0] = result[i].getName().getLocalName(); out [i] [1] = result[i].getName().getHap();out [i] [1] = result[i].getName().getHap(); }} return out;return out; }} catch (FIPAException e) {catch (FIPAException e) { return null;return null; }} }}