// thread per l'avvio del nuovo master
import java.io.*;
import java.util.Enumeration;

public class InitMasterThread extends Thread {

  public InitMasterThread() {
    
  	super("InitMasterThread");
  }
    
  public void run() {
    File fs;
    PrintWriter outb;
  	
  	try { // salva la lista degli slaves in slavelst.txt
  		    fs=new File(ConstantsS.masterPath+"slavelst.txt");
  	      outb=new PrintWriter(new FileWriter(fs));
  	      outb.print(ConstantsS.sv.aliveToString());
  	      outb.println("*** lista slaves morti ***");
  	      outb.print(ConstantsS.sv.deadToString());
  	      outb.close();
  	      System.out.println("Slave$InitMasterThread.run(): "+ConstantsS.masterPath+"slavelst.txt salvato.");
  	      // salva la lista delle query pendenti sul master in cachem.txt
  	      fs=new File(ConstantsS.masterPath+"cachem.txt");
  	      outb=new PrintWriter(new FileWriter(fs));
  	      Enumeration en=ConstantsS.queryList.keys();
  	      while (en.hasMoreElements())
  	       { String k=(String)en.nextElement();
  	       	 outb.println(k);
  	         QueryListElem ql=(QueryListElem)ConstantsS.queryList.get(k);
  	         if (ql!=null) outb.println(ql.toString());
  	       }
  	      outb.close();
  	      System.out.println("Slave$InitMasterThread.run(): "+ConstantsS.masterPath+"cachem.txt salvato.");
  	      // salva il vecchio ip del master in ip_old.txt
  	      fs=new File(ConstantsS.masterPath+"ip_old.txt");
  	      outb=new PrintWriter(new FileWriter(fs));
  	      outb.println(ConstantsS.masterIP);
  	      outb.close();
  	      System.out.println("Slave$InitMasterThread.run(): "+ConstantsS.masterPath+"ip_old.txt salvato.");
  	      // avvia il nuovo master
  	      Runtime r=Runtime.getRuntime();
          Process p=r.exec(ConstantsS.startMasterCmd);
          System.out.println("Slave$InitMasterThread.run(): nuovo master avviato");
          
  	} catch(IOException ex) {
  	    System.out.println("Slave$InitMasterThread.run(): "+ex.toString());
  	  }
  }	
}