package com.marinilli.b2.c9;
import javax.jnlp.*;
import java.io.*;
import java.net.URL;
/**
 * Chapter 10 - Installs native code and executes it
 * @author Mauro Marinilli
 * @version 1.0
 */
public class InstallWin {
  static ClassLoader loader;
  static boolean deleteTempFile = true;
  static final String tempFileName = "temp.bat";

  public static void main(String[] args) {
    if (args.length>0) {//checks whether to remove the temp file
      if (args[0].equalsIgnoreCase("leaveTempFile"))
        deleteTempFile = false;
    }
    loader = Thread.currentThread().getContextClassLoader();
    extractNativeResource("install.bat");
    executeNativeResource(tempFileName);

    if (deleteTempFile) {
      deleteTempFile(tempFileName);
    }
    System.out.println("installation terminated.");
    System.exit(0);
  }

  private static void extractNativeResource(String resourceName) {
    InputStream is = loader.getResourceAsStream(resourceName);
    FileOutputStream fos = null;
    try {
      fos = new FileOutputStream(tempFileName);
    } catch (IOException ioe) {
      System.out.println("creating temp file: "+ioe);
    }
    int c;
    try {
      while ((c = is.read()) != -1)
        fos.write(c);
      is.close();
      fos.close();
    } catch (IOException ioe) {
      System.out.println("extracting installer: "+ioe);
    }
  }

  private static void executeNativeResource(String fileName){
    try {
      Runtime.getRuntime().exec(fileName);
    } catch (IOException ioe) {
      System.out.println("executing installer: "+ioe);
    }
  }

  private static void deleteTempFile(String fileName){
    try {
      File f = new File(fileName);
      f.delete();
      System.out.println("temp file deleted.");
    } catch (Exception ioe) {
      System.out.println("deleting temp file: "+ioe);
    }
  }
}