/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package servidor.utiles;

import java.io.*;
import servidor.*;

public class EjecutarExterno {
    
    public EjecutarExterno() {
    }
    
    public static void runScript(String programa) {
        try {
            Process proceso = Runtime.getRuntime().exec("WSCRIPT //nologo " + programa);
            proceso.waitFor();
        } catch(InterruptedException interruptedExc) {
            System.err.println("(runScript)" + interruptedExc.getMessage());
        } catch(Exception exc) {
            exc.printStackTrace();
        }
    }
    
    public static void runScript(String programa, String param) {
        runScript(programa + " " + param);
    }
    
    public static void reiniciarMedianteScript() {
        reiniciarMedianteScript("60000");
    }
    
    public static void reiniciarMedianteScript(String tiempo) {
        PrintWriter script;
        try {
            script = new PrintWriter(new FileOutputStream("reiniciaServidor.vbs"));
            script.println("On Error Resume Next");
            script.println("WScript.sleep " + tiempo);
            script.println("Set fs = CreateObject(\"Scripting.FileSystemObject\")");
            script.println("set shell = wscript.CreateObject(\"wscript.Shell\")");
//            if(!Configuracion.getConfiguracion().SQLExpress) {
//                script.println("shell.Run \"net stop sqlserveragent\", 4, true");
//                script.println("WScript.sleep 5000");
//            }
//            script.println("shell.Run \"net stop " + resolverNombreServicioSql() + "\", 4, true");
//            script.println("WScript.sleep 5000");
//            script.println("shell.Run \"net start " + resolverNombreServicioSql() + "\", 4, true");
//            script.println("WScript.sleep 20000");
             if(Configuracion.getConfiguracion().PathJava.length() > 3) {
                  script.println("shell.Run  \""+  Configuracion.getConfiguracion().PathJava+"javaw -jar servidor.jar\"");
             }
             else
             {
            script.println("shell.Run \"javaw -jar servidor.jar\"");
             }
            script.println("fs.DeleteFile \"reiniciaServidor.vbs\"");
            script.close();
         
            Runtime.getRuntime().exec("cscript reiniciaServidor.vbs");
            Global.main.cerrarAplicacionSinEsperar();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
   public static boolean reiniciarSqlserver(boolean log) {
      try {
         if(!Configuracion.getConfiguracion().SQLExpress) {
            Runtime.getRuntime().exec("net stop sqlserveragent");
         }
         Runtime.getRuntime().exec("net stop " + resolverNombreServicioSql() );
         Global.sleep(5000);
         Runtime.getRuntime().exec("net start " +resolverNombreServicioSql());
         Global.sleep(10000);
         return true;
      } catch (Exception exc) {
         if(log) {
            ServidorMain.logException("ERROR en reiniciarSqlServer ", exc);
         }
         return false;
      }
   }

   private static String resolverNombreServicioSql() {
       if(Configuracion.getConfiguracion().SQLExpress) {
           return "mssql$" + Configuracion.getConfiguracion().SQLInstanceName;
       } else {
           return "mssqlserver";
       }
   }
}
