Revision: 9 Author: svanerac@xxxxxxxxx Date: Sat Oct 3 08:01:59 2009 Log: Struttura delle classi quasi definitiva, anche se di fatto non è ancora stato implementato niente http://code.google.com/p/cooperativefsm/source/detail?r=9 Added: /trunk/cooperativefsm/src/cooperativefsm/Input.java /trunk/cooperativefsm/src/cooperativefsm/InputTast.java /trunk/cooperativefsm/src/cooperativefsm/InputXML.java /trunk/cooperativefsm/src/cooperativefsm/MyMenu.java /trunk/cooperativefsm/src/cooperativefsm/RelazioneTransizioni.java /trunk/cooperativefsm/src/cooperativefsm/Servizio.java /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java /trunk/cooperativefsm/src/cooperativefsm/StatoCorrente.java Deleted: /trunk/cooperativefsm/src/cooperativefsm/Init.java Modified: /trunk/cooperativefsm/src/cooperativefsm/Fsm.java /trunk/cooperativefsm/src/cooperativefsm/Main.java /trunk/cooperativefsm/src/cooperativefsm/Stato.java ======================================= --- /dev/null+++ /trunk/cooperativefsm/src/cooperativefsm/Input.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,168 @@ +package cooperativefsm; + +/** + * + * @author Renato + */ +import java.util.Vector; +import java.lang.*; + + +public class Input { ++ //Questi attributi sono in realtà variabili di appoggio che servono ai metodi (astatti)
+ public Vector listaS; + public Vector listaT; + public Vector listaR; + public Vector listaMacchine; + + + /* + Metodo che inizializza una vera e propria sessione di simulazione + + */ + public Simulazione leggiSimulazione() + { + int numFsm=2; + int i = 0; + for(i=0; i<numFsm; i++) + { + Fsm fsm = creaFsm (Integer.toString(i)); + listaMacchine.add(fsm); + } + + //Lettura stato iniziale + StatoCorrente statoIniziale = leggiStatoIniziale(); + + //Lettura relazioni + listaR = leggiRelazioni(); + + //Controllo dei vincoli di correttezza della simulazione + if(!simulazioneCorretta() ) + { + //codice per comunicare l'errore all'utente + } ++ //L'interfaccia tra io e core è data da questa riga, è l'unico punto di incontro + return (new Simulazione(listaMacchine, listaR, statoIniziale));
+ } + + + + + /*+ *Metodo che controlla la correttezza delle informazione relative alla simulazione
+ * che sono state introdotte/lette + * + */ + public boolean simulazioneCorretta () + { + boolean correct = true; + + ////// + + return correct; + } + + + + + + /**+ * Metodo che crea la lista degli stati di una fsm (che però non esiste ancora) + * La lettura del numero di stati può essere effettuata da tastiera o da file xml
+ *+ * @param Serve per identificare la fsm nel file xml, oppure è il nome assegnatole da tastiera
+ */ + public void leggiStati (String nomeFsm) + { + listaS = new Vector(); + /*for (int i=0; i<numStati; i++) + { + Stato s = new Stato (i); + macch1.addStato(s); + } + */ + + } + + + + + + /**+ * Metodo che crea la lista delle transizioni di una fsm (che però non esiste ancora) + * La lettura delle transizioni può essere effettuata da tastiera o da file xml
+ *+ * @param Serve per identificare la fsm nel file xml, oppure è il nome assegnatole da tastiera
+ */ + public void leggiTransizioni (String nomeFsm) + { + listaT = new Vector(); + boolean ciSonoTrans= true; + + while (ciSonoTrans) + { + //Stato sorg,dest; + //Transizione t = new Transizione(sorg,dest); + //macch1.listaTrans.add(t); + } + + } + + + + + /*+ * Metodo che crea un'istanza di Fsm a partire dalla variabili globali che sono
+ * già state inizializzate + * @return la nuova istanza di Fsm + */ + + public Fsm creaFsm (String nome) + { + Fsm macchina= new Fsm (); + + macchina.id = nome; + macchina.listaStati = listaS; + macchina.listaTrans = listaT; + + return macchina; + } + + + + + + //ottiene dal parser lo stato iniziale e imposta lo stato corrente + //lo stato deve € al vettore macch1.listaStati --->controllo! + public StatoCorrente leggiStatoIniziale() + { + StatoCorrente s = new StatoCorrente (); + + //s.sCorrenteFsm1 = ; + //s.sCorrenteFsm2 = ; + + return s; + } + + + + /** + * Metodo che ricava le relazioni tra le transizioni delle 2 FSM+ * @return il vettore contenente le relazioni tra TUTTE le transizioni [...]
+ */ + public Vector leggiRelazioni () + { + Vector listaRelazioni = new Vector(); + + Transizione t1,t2; + //RelazioneTransizioni r = new RelazioneTransizioni (t1,t2); + //listaRelazioni.add(r); + + return listaRelazioni; + } + + + +} ======================================= --- /dev/null+++ /trunk/cooperativefsm/src/cooperativefsm/InputTast.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,10 @@ +package cooperativefsm; + +/** + * + * @author Renato + */ +public class InputTast extends Input +{ + //super. +} ======================================= --- /dev/null+++ /trunk/cooperativefsm/src/cooperativefsm/InputXML.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,19 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package cooperativefsm; + +/** + * + * @author Renato + */ +public class InputXML extends Input { + + public InputXML() + { + } + + +} ======================================= --- /dev/null+++ /trunk/cooperativefsm/src/cooperativefsm/MyMenu.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,55 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package cooperativefsm; + +/** + * + * @author Renato + */ +/* +Questa classe rappresenta un menu testuale generico a piu' voci +Si suppone che la voce per uscire sia sempre associata alla scelta 0 +e sia presentata in fondo al menu + +*/ +public class MyMenu +{ + final private static String CORNICE = "--------------------------------"; + final private static String VOCE_USCITA = "0\tEsci";+ final private static String RICHIESTA_INSERIMENTO = "Digita il numero dell'opzione desiderata > ";
+ + private String titolo; + private String [] voci; + + + public MyMenu (String titolo, String [] voci) + { + this.titolo = titolo; + this.voci = voci; + } + + public int scegli () + { + stampaMenu(); + return Servizio.leggiIntero(RICHIESTA_INSERIMENTO, 0, voci.length); + } + + public void stampaMenu () + { + System.out.println(CORNICE); + System.out.println(titolo); + System.out.println(CORNICE); + for (int i=0; i<voci.length; i++) + { + System.out.println( (i+1) + "\t" + voci[i]); + } + System.out.println(); + System.out.println(VOCE_USCITA); + System.out.println(); + } + +} + ======================================= --- /dev/null+++ /trunk/cooperativefsm/src/cooperativefsm/RelazioneTransizioni.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,22 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package cooperativefsm; + +/** + * + * @author Renato + */ +public class RelazioneTransizioni { + + public Transizione t1; + public Transizione t2; + + public RelazioneTransizioni (Transizione tran1, Transizione tran2) + { + t1=tran1; + t2=tran2; + } +} ======================================= --- /dev/null+++ /trunk/cooperativefsm/src/cooperativefsm/Servizio.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,199 @@ +package cooperativefsm; + +/** + * Classe di supporto per le Operazioni di Input/Output da tastiera + * @author Renato + */ +import java.util.Scanner; + + +public class Servizio { + private static Scanner lettore = creaScanner(); ++ private final static String ERRORE_FORMATO = "Attenzione: il dato inserito non e' nel formato corretto"; + private final static String ERRORE_MINIMO= "Attenzione: e' richiesto un valore maggiore o uguale a "; + private final static String ERRORE_STRINGA_VUOTA= "Attenzione: non hai inserito alcun carattere"; + private final static String ERRORE_MASSIMO= "Attenzione: e' richiesto un valore minore o uguale a "; + private final static String MESSAGGIO_AMMISSIBILI= "Attenzione: i caratteri ammissibili sono: ";
+ + private final static char RISPOSTA_SI='S'; + private final static char RISPOSTA_NO='N'; + + + + private static Scanner creaScanner () + { + Scanner creato = new Scanner(System.in); + creato.useDelimiter(System.getProperty("line.separator")); + return creato; + } + + public static String leggiStringa (String messaggio) + { + System.out.print(messaggio); + return lettore.next(); + } + + public static String leggiStringaNonVuota(String messaggio) + { + boolean finito=false; + String lettura = null; + do + { + lettura = leggiStringa(messaggio); + lettura = lettura.trim(); + if (lettura.length() > 0) + finito=true; + else + System.out.println(ERRORE_STRINGA_VUOTA); + } while (!finito); + + return lettura; + } + + + public static char leggiChar (String messaggio) + { + boolean finito = false; + char valoreLetto = '\0'; + do + { + System.out.print(messaggio); + String lettura = lettore.next(); + if (lettura.length() > 0) + { + valoreLetto = lettura.charAt(0); + finito = true; + } + else + { + System.out.println(ERRORE_STRINGA_VUOTA); + } + } while (!finito); + return valoreLetto; + } + + public static boolean yesOrNo(String messaggio) + { + String mioMessaggio = messaggio + "("+RISPOSTA_SI+"/"+RISPOSTA_NO+")";+ char valoreLetto = leggiUpperChar(mioMessaggio,String.valueOf(RISPOSTA_SI)+String.valueOf(RISPOSTA_NO));
+ + if (valoreLetto == RISPOSTA_SI) + return true; + else + return false; + } + + public static char leggiUpperChar (String messaggio, String ammissibili) + { + boolean finito = false; + char valoreLetto = '\0'; + do + { + valoreLetto = leggiChar(messaggio); + valoreLetto = Character.toUpperCase(valoreLetto); + if (ammissibili.indexOf(valoreLetto) != -1) + finito = true; + else + System.out.println(MESSAGGIO_AMMISSIBILI + ammissibili); + } while (!finito); + return valoreLetto; + } + + + public static int leggiIntero (String messaggio) + { + boolean finito = false; + int valoreLetto = 0; + do + { + System.out.print(messaggio); + if (lettore.hasNextInt()) + { + valoreLetto = lettore.nextInt(); + finito = true; + } + else + { + System.out.println(ERRORE_FORMATO); + String daButtare = lettore.next(); + } + } while (!finito); + return valoreLetto; + } + + public static int leggiInteroConMinimo(String messaggio, int minimo) + { + boolean finito = false; + int valoreLetto = 0; + do + { + valoreLetto = leggiIntero(messaggio); + if (valoreLetto >= minimo) + finito = true; + else + System.out.println(ERRORE_MINIMO + minimo); + } while (!finito); + + return valoreLetto; + } + + public static int leggiIntero(String messaggio, int minimo, int massimo) + { + boolean finito = false; + int valoreLetto = 0; + do + { + valoreLetto = leggiIntero(messaggio); + if (valoreLetto >= minimo && valoreLetto<= massimo) + finito = true; + else + if (valoreLetto < minimo) + System.out.println(ERRORE_MINIMO + minimo); + else + System.out.println(ERRORE_MASSIMO + massimo); + } while (!finito); + + return valoreLetto; + } + + + public static double leggiDouble (String messaggio) + { + boolean finito = false; + double valoreLetto = 0; + do + { + System.out.print(messaggio); + if (lettore.hasNextDouble()) + { + valoreLetto = lettore.nextDouble(); + finito = true; + } + else + { + System.out.println(ERRORE_FORMATO); + String daButtare = lettore.next(); + } + } while (!finito); + return valoreLetto; + } ++ public static double leggiDoubleConMinimo (String messaggio, double minimo)
+ { + boolean finito = false; + double valoreLetto = 0; + do + { + valoreLetto = leggiDouble(messaggio); + if (valoreLetto >= minimo) + finito = true; + else + System.out.println(ERRORE_MINIMO + minimo); + } while (!finito); + + return valoreLetto; + } + + +} ======================================= --- /dev/null+++ /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,43 @@ +package cooperativefsm; + +/** + * + * @author Renato + */ +import java.util.Vector; + + +public class Simulazione { + + //public Fsm fsm1; + //public Fsm fsm2; + public Vector listaFsm; ++ public Vector listaRelazioni; //lista statica che comprende TUTTE le possibili coppie di transizioni + public Vector listaRelazioniAbilitate; //lista dinamica che varia a seconda dello stato corrente
+ public StatoCorrente sCorrente; + + + + public Simulazione (Vector listaM, Vector listaRel, StatoCorrente sc) + { + listaFsm = listaM; + listaRelazioni = listaRel; + sCorrente = sc; + } + + + /** + * + * @return + */ + public boolean eseguiIterazione () + { + boolean fineProg = false; + + /////// + + return fineProg; + } + +} ======================================= --- /dev/null+++ /trunk/cooperativefsm/src/cooperativefsm/StatoCorrente.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,14 @@ +package cooperativefsm; + +/** + * + * @author Renato+ * La classe stato corrente definisce la situazione della simulazione in un certo istante
+ * + */ +public class StatoCorrente { + + public Stato sCorrenteFsm1; + public Stato sCorrenteFsm2; + +} =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Init.java Wed Sep 23 03:18:54 2009
+++ /dev/null @@ -1,48 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - -package cooperativefsm; - -/** - * - * @author Renato - */ --/*E' una classe che ha il compito di inizializzare una fsm a seconda del tipo di input (lettura di un file xml, - input dell'utente ecc.). Contiene un metodo init (che è invocato nel main) che legge i valori passati dal parser
- e li passa a sua volta al costruttore della classe fsm*/ - - -public class Init { - - public static Fsm init () { - - //legge da parser o da input utente - - Fsm macch1= new Fsm (); - - int numStati; - //ottiene dal parser il numero di stati della fsm - /*ciclo for che per tot volte: - crea un nuovo stato - aggiunge lo stato alla fsm */ - - for (int i=0; i<numStati; i++) { - Stato s = new Stato (i); - macch1.addStato(s); - } -- //ottiene dal parser lo stato iniziale che deve € al vettore macch1.listaStati --->controllare! - //imposta lo stato corrente: macch1.setStatoCorrente(statoIniziale);
- - - //ottiene dal parser le transizioni .... - - - return macch1; - - } - -} =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Fsm.java Wed Sep 23 03:18:54 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Fsm.java Sat Oct 3 08:01:59 2009
@@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package cooperativefsm; /** @@ -14,11 +9,13 @@ public class Fsm { + String id; + int numStati; + Stato sCorrente; //serve davvero??? Vector listaStati; Vector listaTrans; - int numStati; - Stato sCorrente; + public Fsm () { // costruttore di una macchina a stati finiti @@ -27,12 +24,13 @@ } - public void addStato(Stato s) { - //aggiunge uno stato al vector listaStati + ++ public void addStato(Stato s) { //aggiunge uno stato al vector listaStati
+ listaStati.add(s); } - public void setStatoCorrente(Stato s) { - //imposta il valore dello stato corrente+ public void setStatoCorrente(Stato s) { //imposta il valore dello stato corrente
sCorrente = s; } @@ -41,6 +39,12 @@ } + public Stato getStato (int indice) { + + Stato s = (Stato) listaStati.get(indice); + return s; + } + //settaTransizioniUscentiStati(); =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Main.java Wed Sep 23 03:14:02 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Main.java Sat Oct 3 08:01:59 2009
@@ -12,23 +12,47 @@ * * @author Cominardi Luca, Ferrari Alessandro, Svanera Carlo */ -public class Main { //è la classe che gestisce la simulazione + + +public class Main { /** * @param args the command line arguments */ + public static void main(String[] args) { - - //System.out.println("Hello World!"); - - // TODO code application logic here + + final String TIPOINPUT = "TIPO DI INPUT"; + final String [] SCELTAINPUT = {"da tastiera","da file xml"}; + final String MESS_FINALE = "CIAO!"; + + MyMenu menuInput = new MyMenu( TIPOINPUT , SCELTAINPUT ); + boolean fineProgramma=false; + + int selezione = menuInput.scegli(); + + Input in; + switch (selezione) + { + case 1: in = new InputTast(); + case 2: in = new InputXML(); + default: in = new Input(); + break; + } - Fsm fsm1,fsm2; - - - fsm1= Init.init();+ Simulazione s = in.leggiSimulazione(); //leggiSimulazione è un metodo della interfaccia Input, + //da cui ereditano le classi InputTast e InputXML
+ + while (!fineProgramma) + { + fineProgramma = s.eseguiIterazione(); + } + + + System.out.println(MESS_FINALE); } + } =======================================--- /trunk/cooperativefsm/src/cooperativefsm/Stato.java Wed Sep 23 03:18:54 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Stato.java Sat Oct 3 08:01:59 2009
@@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package cooperativefsm; /**