Revision: 21 Author: luca.cominardi@xxxxxxxxx Date: Thu Oct 22 01:53:27 2009 Log: [No log message] http://code.google.com/p/cooperativefsm/source/detail?r=21 Modified: /trunk/cooperativefsm/src/cooperativefsm/Fsm.java /trunk/cooperativefsm/src/cooperativefsm/InputXML.java /trunk/cooperativefsm/src/cooperativefsm/Main.java /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java /trunk/cooperativefsm/src/cooperativefsm/Transizione.java =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Fsm.java Wed Oct 21 13:08:05 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Fsm.java Thu Oct 22 01:53:27 2009
@@ -113,6 +113,7 @@ { s = s + transizioni.get(i).ToString(); } + s+="\n"; return s; } =======================================--- /trunk/cooperativefsm/src/cooperativefsm/InputXML.java Wed Oct 21 13:21:47 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/InputXML.java Thu Oct 22 01:53:27 2009
@@ -26,18 +26,19 @@ public class InputXML extends Input { + //Variabili globali utili per la costruzione della simulazioneprivate 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;+ //Variabile di appoggio per verificare se sono già state inserite delle relazioni
private boolean rel=true; /** * * @param URI - * è il percorso del file xml da caricre - * è il costruttore della classe InputXML + * è il percorso del file xml da caricare * @throws SAXException * @throws IOException * @throws ParserConfigurationException @@ -65,7 +66,7 @@ /** * * @param list - * @return lo stato iniziale della simulazione + * @return lo stato iniziale della simulazione. * Metodo eriditato dalla classe Input */ public @Override StatoCorrente leggiStatoIniziale(Vector<Fsm> list) @@ -119,10 +120,12 @@ */ private Fsm insFSM(Node node) {+ //booleani per verificare se sono stati inseriti gli stati, il nome, le transizioni e lo stato corrente
boolean stati=true; boolean name=true; boolean trans=true; boolean stCor=true; + String id = ""; Vector<Stato> listaS = new Vector<Stato>(); Vector<Transizione> listaT = new Vector<Transizione>(); @@ -364,12 +367,15 @@ { inizRel(); } - + //Estraggo tutti i nodi figli del nodo passato come parametro NodeList nl = node.getChildNodes();+ //Vector contenente array, ogni array ha 2 elementi: il primo è l'id della fsm, il secondo l'id della transizione
Vector<Integer[]> ind = new Vector<Integer[]>();+ //Vector d'appoggio usato per riordinare il vector ind usando come criterio l'id delle fsm contenute nel primo elemento dell'array
Vector<Integer[]> app = new Vector<Integer[]>(); String type="";+ //Faccio passare tutti gli elementi del nodo e prendo solo quelli che hanno il nome transval
for(int i=0, cnt=nl.getLength(); i<cnt; i++) { String test=nl.item(i).getNodeName(); @@ -378,6 +384,7 @@ { try { + //Inserisco una transizione all'interno del vector ind ind.add(insTRANSVAL(nl.item(i))); } catch(IndexOutOfBoundsException e) @@ -391,6 +398,7 @@ } }+ //Faccio passare tutti gli elementi del nodo cercando quello con nome type
for(int i=0, cnt=nl.getLength(); i<cnt; i++) { String test=nl.item(i).getNodeName(); @@ -402,18 +410,16 @@ } }+ //Faccio passare tutto il vector ind e lo riordino in base all'id delle fsm
for(int i=0; i<ind.size(); i++) {//System.out.println("Ind fsm: " + ind.get(i)[0] + "\tInd tr: " + ind.get(i)[1]);
for(int j=0; j<ind.size(); j++) { - if(i!=j) - { - if(ind.get(i)[0]==ind.get(j)[0]) - {- System.out.println("-- Non è possibile inserire una relazione tra due transizioni appartenenti alla stessa macchina!!! --");
- ind.get(-1);//per uscire dal programma - } + if(ind.get(i)[0]==ind.get(j)[0] && i!=j) + {+ System.out.println("-- Non è possibile inserire una relazione tra due transizioni appartenenti alla stessa macchina!!! --");
+ ind.get(-1);//per uscire dal programma } int p=ind.get(j)[0]; if(i==p) @@ -440,6 +446,7 @@ /** * * @param node+ * @return ritorna un array contenente nel primo elemento l'id della fsm, nel secondo l'id della transizione
*/ private Integer[] insTRANSVAL(Node node) { @@ -448,6 +455,7 @@ String idfsm = ""; String idtr = "";+ //faccio passare tutti gli elemtni del nodo cercando quello con nome fsmval
for(int i=0, cnt=nl.getLength(); i<cnt; i++) { String test=nl.item(i).getNodeName(); @@ -457,6 +465,7 @@ idfsm = nl.item(i).getFirstChild().getNodeValue(); } }+ //faccio passare tutti gli elemtni del nodo cercando quello con nome idval
for(int i=0, cnt=nl.getLength(); i<cnt; i++) { String test=nl.item(i).getNodeName(); @@ -466,7 +475,9 @@ idtr = nl.item(i).getFirstChild().getNodeValue(); } } + //ad a[0] assegno l'id della fsm che ha nome idfsm a[0] = getFsmIndexById(idfsm);+ //ad a[1] assengo l'id della transizione che ha nome idtr e fa parte della fsm identificata da a[0]
a[1] = getTrIdByName(idtr, a[0]); return a; @@ -474,48 +485,52 @@ private void inizRel() {+ //inizializzo il doppio array relazioniTransizioni[][] con le dimensionsioni x e y
int x = listaFsm.get(0).getNumTr(); int y = listaFsm.get(1).getNumTr(); relazioniTransizioni = new Simulazione.Relazione [x][y]; + //riempo il doppio array con tutte relazioni asincrone for(int i=0; i<x; i++) for(int j=0; j<y; j++) relazioniTransizioni[i][j]=Simulazione.Relazione.ASINCRONA; -+ //imposto il booleano rel a false, il doppio array è stato inizializzato e non c'è più bisogno di invocare questo metodo
rel=false; } /** * * @param name * @param indexFsm - * @return+ * @return l'indice della transizione identificata da name all'interno della fsm identificata da indexFsm
*/private int getTrIdByName(String name, int indexFsm) throws IndexOutOfBoundsException, NullPointerException
{ Vector<Transizione> lT= listaFsm.get(indexFsm).getTransizioni(); int k=-1; -+ //faccio passare tutte le transizioni cercando quella con nome uguale a name
for(int i=0; i<lT.size(); i++) { if(lT.get(i).getNome().equalsIgnoreCase(name)) k=i; }+ //Se non è stata trovata la transizione ritorno -1 altrimenti ritorno l'indice della transizione all'interno del vector
return k; } /** * * @param id - * @return+ * @return l'indice della fsm identificata da id all'interno di listaFsm
*/private int getFsmIndexById(String id) throws IndexOutOfBoundsException, NullPointerException
{ int k = -1; -+ //faccio passare tutte le fsm cercando quella con id uguale a all'id della fsm
for(int i=0; i<listaFsm.size(); i++) { if(listaFsm.get(i).getId().equalsIgnoreCase(id)) k=i; }+ //Se non è stata trovata la fsm ritorno -1 altrimenti ritorno l'indice della fsm all'interno di listaFsm
return k; } /** =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Main.java Wed Oct 21 13:21:47 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Main.java Thu Oct 22 01:53:27 2009
@@ -29,13 +29,15 @@ final String [] SCELTAINPUT = {"da tastiera","da file xml"}; final String MESS_FINALE = "CIAO!";final String XML_NOT = "-- File xml non formattato correttamente!!! --";
+ final String XML_DEF = "fsm.xml"; MyMenu menuInput = new MyMenu( TIPOINPUT , SCELTAINPUT ); boolean continua = true; - Input in = null; + Simulazione s = null; while(continua) { + Input in = null; int selezione = menuInput.scegli(); switch (selezione) @@ -44,38 +46,43 @@ break; } case 2: {- String url=Servizio.leggiString("Inserire il percorso del file xml da leggere (fsm.xml): "); + String url=Servizio.leggiString("Inserire il percorso del file xml da leggere (" + XML_DEF + ")> ");
+ if(url.equals("")) + url=XML_DEF; try {- in = new InputXML(url); //l'uri del file xml dovrà essere passato da tastiera
- break; - } catch (SAXException ex) {+ in = new InputXML(url); //l'uri del file xml dovrà essere passato da tastiera, invio per il default + System.out.println("-- Simulazione creata con successo!!! --");
+ s = in.leggiSimulazione(); + System.out.println(s.ToString()); + } catch (Exception ex) { System.out.println(XML_NOT); - } catch (IOException ex) {- System.out.println("-- Il file specificato non esiste!!! --"); - //Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
- } catch (ParserConfigurationException ex) { - System.out.println(XML_NOT);- //Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
- } catch (NullPointerException q) { - System.out.println(XML_NOT); - } catch (ArrayIndexOutOfBoundsException t) { - System.out.println(XML_NOT); +// } catch (IOException ex) {+// System.out.println("-- Il file specificato non esiste!!! --"); +// //Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
+// } catch (ParserConfigurationException ex) { +// System.out.println(XML_NOT);+// //Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
+// } catch (NullPointerException q) { +// System.out.println(XML_NOT); +// } catch (ArrayIndexOutOfBoundsException t) { +// System.out.println(XML_NOT); } break; } case 0: { System.out.println(MESS_FINALE); - System.exit(0); + //System.exit(0); + continua=false; } } }- Simulazione s = in.leggiSimulazione(); //leggiSimulazione è un metodo della classe Input,
+ //leggiSimulazione è un metodo della classe Input,//da cui ereditano le classi InputTast e InputXML
//while (!fineProgramma) - { + // { //fineProgramma = s.eseguiIterazione(); - } + // } //System.out.println(s.getListaFsm().get(0).ToString()); //System.out.println(s.getListaFsm().get(1).ToString()); =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java Wed Oct 21 13:08:05 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java Thu Oct 22 01:53:27 2009
@@ -77,5 +77,20 @@ return true; } + + public String ToString() + { + String s = ""; + for(int i=0; i<listaFsm.size(); i++) + { + s+=listaFsm.get(i).ToString(); + } + s+="\nRelazioni tra transizioni:\n" + + "Fsm1\tFsm2\tTipo\n"; + for(int i=0; i<relazioniTransizioni.length; i++) + for(int j=0; j<relazioniTransizioni[0].length; j++)+ s+="id: " + i + "\tid: " + j + "\t" + relazioniTransizioni[i][j]+"\n";
+ return s; + } } =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Transizione.java Wed Oct 21 01:53:14 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Transizione.java Thu Oct 22 01:53:27 2009
@@ -21,6 +21,7 @@ /*** Costruttore di una transizione a partire da due stati di una stessa fsm
* + * @param _id * @param _stato1 * @param _stato2 */ @@ -34,9 +35,9 @@ public String ToString() { - String s = ("Transizione numero: " + id + "\nNome: " + nome + - "\nDallo stato " + stato1.getId() + - " allo stato " + stato2.getId()); + String s = ("\nTransizione numero: " + id + "\tNome:\t" + nome + + "\nDallo stato:\t" + stato1.getId() + + "\tallo stato: " + stato2.getId()); return s; }