Revision: 17 Author: luca.cominardi@xxxxxxxxx Date: Wed Oct 21 01:53:14 2009 Log: [No log message] http://code.google.com/p/cooperativefsm/source/detail?r=17 Modified: /trunk/cooperativefsm/src/cooperativefsm/InputTast.java /trunk/cooperativefsm/src/cooperativefsm/InputXML.java /trunk/cooperativefsm/src/cooperativefsm/Transizione.java =======================================--- /trunk/cooperativefsm/src/cooperativefsm/InputTast.java Mon Oct 19 07:00:40 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/InputTast.java Wed Oct 21 01:53:14 2009
@@ -119,16 +119,16 @@ public void inizializzaTrans (Fsm x) {boolean continua = this.ciSonoTrans(); //metodo che verrà sovrascritto dalle sottoclassi
- int k = 0; + int k=0; while (continua) {Stato sorgente = this.leggiStatoConMax("sorgente", x.getNumStati()-1); Stato destinazione = this.leggiStatoConMax("destinazione", x.getNumStati()-1);
- Transizione t = new Transizione (Integer.toString(k),sorgente,destinazione);
+ Transizione t = new Transizione (k,sorgente,destinazione); x.addTrans(t); - System.out.println("Transizione inserita correttamente!"); k++; + System.out.println("Transizione inserita correttamente!"); continua = this.ciSonoTrans(); }//while } =======================================--- /trunk/cooperativefsm/src/cooperativefsm/InputXML.java Mon Oct 19 07:00:40 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/InputXML.java Wed Oct 21 01:53:14 2009
@@ -7,7 +7,7 @@ /** * - * @author Renato + * @author Cominardi Luca */ import java.io.File; @@ -25,19 +25,18 @@ public class InputXML extends Input {- private Simulazione.Relazione relazioniTransizioni[][]; //Relazione è un tipo enum che definisce i tipi di relazione
- private Vector<Fsm> listaFsm = new Vector<Fsm>(); - private StatoCorrente statoIniziale = new StatoCorrente(); - private Document doc = null; - - public @Override Simulazione leggiSimulazione() - {- return new Simulazione(listaFsm, relazioniTransizioni, statoIniziale);
- } -- public @Override StatoCorrente leggiStatoIniziale(Vector<Fsm> list) {return new StatoCorrente();}
- - //costruttore di InputXML+ private Simulazione.Relazione relazioniTransizioni[][]; //Relazione è un tipo enum che definisce i tipi di relazione
+ private Vector<Fsm> listaFsm = new Vector<Fsm>(); + private StatoCorrente statoIniziale = new StatoCorrente(); + private Vector<Stato> statoCur = new Vector<Stato>(); + private Document doc = null; + + /** + * + * @param URI + * @param è il percorso del file xml da caricre + * @return è il costruttore della classe InputXML + */ public InputXML(String URI) { //provo a leggere il file e fare il parser xml @@ -48,8 +47,12 @@ } catch(Exception error) { + System.out.println("File xml non formattato correttamente"); error.printStackTrace(); }+ //controllo che siano state create almeno 2 fsm prima di settare lo stato corrente della simulazione
+ if(statoCur.size()>1) + statoIniziale.setStati(statoCur.get(0), statoCur.get(1)); /* System.out.println("Le fsm sono: " + listaFsm.size()); System.out.println("Stati fsm1: " + listaFsm.get(0).getNumStati()); @@ -59,17 +62,43 @@ */ }- //creo una nuova instanza di Simulazione facendo passare tutti i nodi presenti nel file
+ /** + * + * @return una nuova istanza di simulazione + * Metodo eriditato dalla classe Input + */ + public @Override Simulazione leggiSimulazione() + {+ return new Simulazione(listaFsm, relazioniTransizioni, statoIniziale);
+ } + + /** + * + * @param list + * @return lo stato iniziale della simulazione + * Metodo eriditato dalla classe Input + */ + public @Override StatoCorrente leggiStatoIniziale(Vector<Fsm> list) + { + return statoIniziale; + } + + /** + * + * @param node + * @param level+ * Serve per far passare tutti i nodi del file xml e invocare il metodo appropriato in base al tipo di oggetto
+ */ private void insSIM(Node node, int level) { + //Estraggo tutti i nodi figli del nodo passato come parametro NodeList nl = node.getChildNodes();+ //for che fa passare tutti i nodi figli del nodo passato come parametro
for(int i=0, cnt=nl.getLength(); i<cnt; i++) { + //prendo il nome del nodo (identificatore tag) String test=nl.item(i).getNodeName(); - //System.out.println(test); - //System.out.println(nl.item(i).getNodeName()); - //System.out.println(nl.item(i).getNodeType());//Se è definita una fsm la leggo e la aggiungo alla lista delle fsm
if(test.equalsIgnoreCase("fsm")) { @@ -85,6 +114,12 @@ } } + /** + * + * @param node + * @return una istanza di Fsm + * Serve per creare e inizializzare una Fsm + */ private Fsm insFSM(Node node) { boolean stati=true; @@ -94,17 +129,23 @@ Vector<Stato> listaS = new Vector<Stato>(); Vector<Transizione> listaT = new Vector<Transizione>(); + //Estraggo tutti i nodi figli del nodo passato come parametro NodeList nl = node.getChildNodes(); - //prima controllo il name e il numero di stati + //Prima controllo il name e il numero di stati+ //Prima devo creare gli stati per poter creare poi le transizioni che si riferiscono agli stati
for(int i=0, cnt=nl.getLength(); i<cnt; i++) { + //prendo il nome del nodo (identificatore tag) String test=nl.item(i).getNodeName(); if(test.equalsIgnoreCase("name")) { + //Se è presente un tag "name" imposto name=false name=false; + //Prendo il valore del tag name id = nl.item(i).getFirstChild().getNodeValue();+ //Controllo che non ci sia già un'altra fsm con lo stesso id
for(int j=0; j<listaFsm.size(); j++) { if(id.equals(listaFsm.get(j).getId())) @@ -116,10 +157,13 @@ } else if(test.equalsIgnoreCase("states")) { + //Se è presente un tag "states" imposto stati=false stati=false; try {+ //Faccio un parse da String a Int per il numero di stati int states = Integer.parseInt(nl.item(i).getFirstChild().getNodeValue()); + //Aggiungo un numero di stati pari a quanto definito in states
for(i=0; i<states; i++) { Stato s = new Stato(i+1); @@ -132,28 +176,41 @@ } } }//end for - //poi controllo le transizioni + //Ora posso creare le transizioni for(int i=0, cnt=nl.getLength(); i<cnt; i++) { + //prendo il nome del nodo (identificatore tag) String test=nl.item(i).getNodeName(); if(test.equalsIgnoreCase("transition")) { + //Se è presente un tag "transition" imposto trans=false trans=false;+ //Leggo e aggiungo una transizione alla lista delle transizioni
listaT.add(insTRANS(nl.item(i), listaS, listaT)); } else if(test.equalsIgnoreCase("current")) { - //TODO finire l'impostazione dello StatoCorrente try {+ //Faccio un parse da String a Int per il numero dello stato corrente int stato = Integer.parseInt(nl.item(i).getFirstChild().getNodeValue()); + //Controllo che il numero dello stato corrente non sia maggiore del numero massimo degli stati
if(stato>listaS.size())System.out.println("Il numero dello stato corrente non può superare il numero totale degli stati");
else { - //Stato s1=getStatoById(stato, listaS); - //System.out.println(s1.ToString());+ //Estraggo dalla lista degli stati l'oggetto Stato identificato dall'id
+ Stato scurrent=getStatoById(stato, listaS); + if(scurrent==null) + {+ System.out.println("Lo stato corrente è nullo");
+ } + else + {+ //Aggiungo lo stato corrente di questa fsm al vector degli stati correnti
+ statoCur.add(scurrent); + } } } catch(NumberFormatException ne) @@ -162,6 +219,7 @@ } } } + //Messaggi di errore se non sono stati dichiarati alcuni tag if(name) { System.out.println("Non è stato definito l'id per una fsm"); @@ -174,29 +232,44 @@ {System.out.println("Non è stata definita alcuna transizione per una fsm");
} + //Creo la fsm Fsm f = new Fsm(id, listaS, listaT); return f; } + /** + * + * @param node + * @param lS + * @param lT + * @return una transizione + * Serve per creare e inizializzare una transizione di una fsm + */private Transizione insTRANS(Node node, Vector<Stato> lS, Vector<Transizione> lT)
{ + //Estraggo tutti i nodi figli del nodo passato come parametro NodeList nl = node.getChildNodes(); - String id = ""; + + String nome = ""; Stato s1 = null; Stato s2 = null; int length = 0; + //Faccio passare tutti i tag figli della transizione for(int i=0, cnt=nl.getLength(); i<cnt; i++) { + //prendo il nome del nodo (identificatore tag) String test=nl.item(i).getNodeName(); if(test.equalsIgnoreCase("id")) { - id = nl.item(i).getFirstChild().getNodeValue(); + //Prendo il valore del tag id + nome = nl.item(i).getFirstChild().getNodeValue();+ //Controllo che non ci siano due transizioni con lo stesso id
for(int j=0; j<lT.size(); j++) { - if(id.equals(lT.get(j).getId())) + if(nome.equals(lT.get(j).getNome())) {System.out.println("Due transizioni definite con lo stesso id!!!");
//TODO Uscire dal programma @@ -207,13 +280,15 @@ { try {+ //Faccio un parse da String a int per il numero dello stato int stato = Integer.parseInt(nl.item(i).getFirstChild().getNodeValue()); + //Controllo che il numero dello stato non sia maggiore del numero degli stati della fsm
if(stato>lS.size())System.out.println("Il numero dello stato non può superare il numero totale degli stati");
else {+ //Estraggo dalla lista degli stati l'oggetto Stato identificato dall'id
s1=getStatoById(stato, lS); - //System.out.println(s1.ToString()); } } catch(NumberFormatException ne) @@ -225,11 +300,14 @@ { try {+ //Faccio un parse da String a int per il numero dello stato int stato = Integer.parseInt(nl.item(i).getFirstChild().getNodeValue()); + //Controllo che il numero dello stato non sia maggiore del numero degli stati della fsm
if(stato>lS.size())System.out.println("Il numero dello stato non può superare il numero totale degli stati");
else {+ //Estraggo dalla lista degli stati l'oggetto Stato identificato dall'id
s2=getStatoById(stato, lS); } } @@ -244,14 +322,30 @@System.out.println("length: " + nl.item(i).getFirstChild().getNodeValue());
}*/ } - Transizione T = new Transizione(id,s1,s2); - s1.addTransUscente(T); + //Creo una istanza di Transizione + Transizione T = null;+ //Prima di inizializzare T controllo che gli stati s1 e s2 non siano nulli
+ if(s1!=null && s2!=null) + { + T = new Transizione(lT.size(),s1,s2); + //Setto il nome simbolico della transizione + T.setNome(nome);+ //Aggiungo allo stato sorgente della transizione la transizione stessa come transizione uscente
+ s1.addTransUscente(T); + } return T; } + /** + * + * @param id + * @param lS+ * @return lo stato identificato dall'id all'interno della lista di stati passata per parametro
+ */ private Stato getStatoById(int id, Vector<Stato> lS) { Stato k = null;+ //Faccio passare tutti gli stati e controllo se è presente l'id passato come parametro
for(int i=0; i<lS.size(); i++) { Stato p = lS.get(i); @@ -261,8 +355,16 @@ return k; } + /** + * @param node + * Serve per creare e inizializzare una relazione tra transizioni + */ private void insREL(Node node) { + int x = listaFsm.get(0).getNumTr(); + int y = listaFsm.get(1).getNumTr();+ Simulazione.Relazione relazioniTransizioni[][] = (new Simulazione.Relazione [x+1][y+1]);
+ NodeList nl = node.getChildNodes(); for(int i=0, cnt=nl.getLength(); i<cnt; i++) @@ -276,7 +378,7 @@ } } - public void insTRANSVAL(Node node) + private void insTRANSVAL(Node node) { NodeList nl = node.getChildNodes(); @@ -296,7 +398,14 @@ } - + /** + * + * @param file+ * @return un oggetto di tipo Document, è un albero contenente tutti i nodi xml
+ * @throws SAXException + * @throws IOException + * @throws ParserConfigurationException + */public Document parserXML(File file) throws SAXException, IOException, ParserConfigurationException
{return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);
=======================================--- /trunk/cooperativefsm/src/cooperativefsm/Transizione.java Mon Oct 19 07:00:40 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Transizione.java Wed Oct 21 01:53:14 2009
@@ -11,8 +11,8 @@ */ public class Transizione {- //private int id; //è il numero progressivo assegnato alla transizione, riferito alla fsm cui appartiene
- private String id;+ private int id; //è il numero progressivo assegnato alla transizione, riferito alla fsm cui appartiene
+ //private String id;private String nome; //identifica una certa transizione (attributo opzionale)
private Stato stato1; private Stato stato2; @@ -25,7 +25,7 @@ * @param _stato2 */ - public Transizione(String _id, Stato _stato1, Stato _stato2) + public Transizione(int _id, Stato _stato1, Stato _stato2) { id = _id; stato1 = _stato1; @@ -34,13 +34,23 @@ public String ToString() { - String s = ("Transizione numero: " + id + + String s = ("Transizione numero: " + id + "\nNome: " + nome + "\nDallo stato " + stato1.getId() + " allo stato " + stato2.getId()); return s; } - public String getId() + public void setNome(String _nome) + { + nome = _nome; + } + + public String getNome() + { + return nome; + } + + public int getId() { return id; }