/** FILE: fine.java **/
package SIMULA;
import java.awt.*;
import java.io.*;
// Referenced classes of package SIMULA:
// simulator
/*
* CLASS fine
*
* classe che riepiloga tutti i dati ricavati dalla simulazione in una finestra grafica
* inoltre aggiorna (o li crea) i file nella directory Statistiche che riguardano appunto
* le statistiche.
*/
class fine extends Frame
{
/*
* COSTRUTTORE
*
* calcola alcuni risultati
*/
fine(double d, double d1)
{
entro = true;
setTitle("Risultati della Simulazione");
resize(580, 560);
a = d;
b = d1;
minuti = (int)(simulator.millisecondi / 60000L);
secondi = (int)(simulator.millisecondi - (long)(minuti * 60000)) / 1000;
millesimi = (int)simulator.millisecondi % 1000;
protime = (int)simulator.millisecondi / (simulator.numparole * 2);
prominuti = protime / 60000;
prosecondi = (protime - prominuti * 60000) / 1000;
promillesimi = protime % 1000;
onesecpro = (2 * simulator.numparole * 1000) / (int)simulator.millisecondi;
risultati(); // aggiorna le statistiche
if(!simulator.nograp) // non visualizza l'oggetto se è settato -NOGRAPHICS
show();
}
/*
* METODO paint()
*
* visualizza i risultati
*/
public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawString("Simulazione by Caponi, Convertino e Federici", 50, 70);
g.setColor(Color.blue);
g.drawString("Il simulatore ha usato la politica " + simulator.politica, 50, 120);
rig = 180;
if(simulator.politica == "Personalizzata")
{
g.drawString("con tolleranza = " + simulator.tolleranza, 50, 140);
rig += 20;
}
g.drawString("ANALISI DEL FILE:", 50, rig - 20);
g.drawString("Ci sono " + simulator.numparole + " messaggi", 50, rig);
g.drawString("che variano tra " + simulator.piupiccola + " e " + simulator.piugrande + " caratteri", 50, rig + 20);
g.drawString("La loro lunghezza media \350 " + simulator.totcaratteri / simulator.numparole + " caratteri", 50, rig + 40);
g.drawString("IMPOSTAZIONI DEL SIMULATORE:", 50, rig + 80);
g.drawString("Il fattore Alpha \350 " + simulator.alpha, 50, rig + 100);
g.drawString("Il fattore Beta \350 " + simulator.beta, 50, rig + 120);
g.drawString("Ogni processo ha dormito un tempo a caso tra 0 e " + simulator.modulo + " millisecondi", 50, rig + 140);
g.drawString("RAPPORTO", 50, rig + 180);
g.drawString("Il tempo medio di esecuzione dei Mittenti \350 " + a, 50, rig + 200);
g.drawString("Il tempo medio di esecuzione dei Destinatari \350 " + b, 50, rig + 220);
g.drawString("Il tempo medio di esecuzione di tutti i processi \350 " + (a + b) / 2D, 50, rig + 240);
g.drawString("Il tempo medio di ATTESA di tutti i processi \350 " + ((a + b) - 2D) / 2D, 50, rig + 260);
g.drawString("Il tempo massimo impiegato da un processo Mittente \350 " + simulator.maxput, 50, rig + 280);
g.drawString("Il tempo massimo impiegato da un processo Destinatario \350 " + simulator.maxget, 50, rig + 300);
g.drawString("Il simulatore ha impiegato " + minuti + " minuti, " + secondi + " secondi e " + millesimi + " millisecondi", 50, rig + 320);
g.drawString("Un processo ha impiegato in media " + prominuti + " minuti, " + prosecondi + " secondi e " + promillesimi + " millisecondi", 50, rig + 340);
g.drawString("In un secondo verrebbero eseguiti mediamente " + onesecpro + " processi", 50, rig + 360);
if(entro)
{
setBounds(240, 80, 580, rig + 400);
entro = false;
}
}
/*
* METODO handleEvent() // RIDEFINIZIONE
*
* gestore degli eventi
*/
public boolean handleEvent(Event event)
{
if(event.id == 201) // se viene premuto la X
{
hide(); // chiudi la finestra
simulator.chiudi++;
}
return super.handleEvent(event);
}
/*
* SOVRACCARICO di METODI incolonna()
*
* dato un intero, un double, un float o una stringa restituisce una stringa di 9
* caratteri che lo rappresenta.
* visto che la lunghezza dei dati è variabile, per avere dei file di statistiche
* ordinati vogliamo da loro solo le prime 8 cifre (se le hanno)+ uno spazio.
*/
String incolonna(int i)
{
return incolonna(String.valueOf(i));
}
String incolonna(long l)
{
return incolonna(String.valueOf(l));
}
String incolonna(float f)
{
return incolonna(String.valueOf(f));
}
String incolonna(double d)
{
return incolonna(String.valueOf(d));
}
String incolonna(String s)
{
byte abyte0[] = new byte[9];
if(s.length() < 8)
s.getBytes(0, s.length(), abyte0, 0);
else
s.getBytes(0, 8, abyte0, 0);
return new String(abyte0, 0, 9);
}
/*
* METODO risultati()
*
* restituisce su dei file, nella directory Statistiche, i risultati della simulazione.
* il nome del file viene ricavato nel seguente modo ab-c_d-e-f.txt dove a=iniziale politica,
* b=tolleranza, c_d=alpha, e=beta e f=primi due caratteri del file.
*/
void risultati()
{
char ac[] = new char[simulator.nomefile.length()];
ac = simulator.nomefile.toCharArray();
String s = "Statistiche/" + simulator.politica.charAt(0);
s = s + simulator.tolleranza + "-" + (int)simulator.alpha + "_";
s = s + (int)((simulator.alpha - (float)(int)simulator.alpha) * 1000F) + "-" + simulator.beta;
s = s + "-" + new String(ac, 0, 2) + ".txt";
byte abyte0[];
try
{
FileInputStream fileinputstream = new FileInputStream(s);
abyte0 = new byte[fileinputstream.available()];
fileinputstream.read(abyte0);
fileinputstream.close();
}
catch(Exception _ex)
{
String s1 = "POLITICA TOLLER NOMEFILE ALPHA BETA PUTEXE GETEXE TOTEXE";
s1 = s1 + " TOTWAIT TOTREAL SINGREAL 1secPROC MAXPUT MAXGET";
abyte0 = new byte[s1.length()];
abyte0 = s1.getBytes();
}
try
{
FileOutputStream fileoutputstream = new FileOutputStream(s);
fileoutputstream.write(abyte0);
fileoutputstream.write(("\n" + incolonna(simulator.politica) + incolonna(simulator.tolleranza)).getBytes());
fileoutputstream.write((incolonna(simulator.nomefile)+incolonna(simulator.alpha)).getBytes());
fileoutputstream.write((incolonna(simulator.beta)+incolonna(a) + incolonna(b) + incolonna((a + b) / 2D)).getBytes());
fileoutputstream.write((incolonna(((a + b) - 2D) / 2D) + incolonna(simulator.millisecondi)).getBytes());
fileoutputstream.write((incolonna(protime) + incolonna(onesecpro) + incolonna(simulator.maxput)).getBytes());
fileoutputstream.write((incolonna(simulator.maxget)).getBytes());
fileoutputstream.close();
return;
}
catch(IOException _ex)
{
return;
}
}
/*
* VARIABILI
*/
double a;
double b;
int rig;
int minuti;
int secondi;
int millesimi;
int prominuti;
int prosecondi;
int promillesimi;
int protime;
int onesecpro;
boolean entro;
}