private void createOutputJar() {
    // Me make the .uninstaller directory
    String dest =
        IoHelper.translatePath(installdata.getInfo().getUninstallerPath(), variableSubstitutor);
    String jar = dest + File.separator + installdata.getInfo().getUninstallerName();
    File pathMaker = new File(dest);
    pathMaker.mkdirs();

    // We log the uninstaller deletion information
    udata.setUninstallerJarFilename(jar);
    udata.setUninstallerPath(dest);

    // We open our final jar file
    try {
      out = new FileOutputStream(jar);
    } catch (FileNotFoundException e) {
      throw new IzPackException("Problem writing uninstaller jar", e);
    }

    try {
      // Intersect a buffer else byte for byte will be written to the file.
      bos = new BufferedOutputStream(out);
      outJar = new JarOutputStream(bos);
    } catch (IOException e) {
      throw new IzPackException("Problem writing uninstaller jar", e);
    }

    outJar.setLevel(9);
    udata.addFile(jar, true);
  }
  private BufferedWriter getExternLogFile(AutomatedInstallData installdata) {
    String logfile = installdata.getVariable(LOGFILE_PATH);
    BufferedWriter extLogWriter = null;
    if (logfile != null) {
      if (logfile.toLowerCase().startsWith("default")) {
        logfile = installdata.getInfo().getUninstallerPath() + "/install.log";
      }
      logfile = IoHelper.translatePath(logfile, variableSubstitutor);
      File outFile = new File(logfile);
      if (!outFile.getParentFile().exists()) {
        outFile.getParentFile().mkdirs();
      }
      FileOutputStream out = null;
      try {
        out = new FileOutputStream(outFile);
      } catch (FileNotFoundException e) {
        Debug.trace("Cannot create logfile!");
        Debug.error(e);
      }
      if (out != null) {
        extLogWriter = new BufferedWriter(new OutputStreamWriter(out));
      }
    }

    return extLogWriter;
  }
 public boolean isUninstallShouldBeWriten() {
   String uninstallerCondition = installdata.getInfo().getUninstallerCondition();
   if (uninstallerCondition == null) {
     return true;
   }
   if (uninstallerCondition.length() > 0) {
     return true;
   }
   return this.rules.isConditionTrue(uninstallerCondition);
 }
  /**
   * Puts the uninstaller skeleton.
   *
   * @param installdata
   * @param pathResolver
   * @param outJar
   * @throws Exception Description of the Exception
   */
  public void writeJarSkeleton(
      AutomatedInstallData installdata, PathResolver pathResolver, JarOutputStream outJar)
      throws Exception {
    // get the uninstaller base, returning if not found so that
    // installData.uninstallOutJar remains null

    List<Mergeable> uninstallerMerge =
        pathResolver.getMergeableFromPath("com/izforge/izpack/uninstaller/");
    uninstallerMerge.addAll(
        pathResolver.getMergeableFromPath("uninstaller-META-INF/", "META-INF/"));
    uninstallerMerge.addAll(pathResolver.getMergeableFromPath("com/izforge/izpack/api/"));
    uninstallerMerge.addAll(pathResolver.getMergeableFromPath("com/izforge/izpack/util/"));
    uninstallerMerge.addAll(pathResolver.getMergeableFromPath("com/izforge/izpack/gui/"));
    uninstallerMerge.addAll(pathResolver.getMergeableFromPath("com/izforge/izpack/img/"));

    // The uninstaller extension is facultative; it will be exist only
    // if a native library was marked for uninstallation.
    // REFACTOR Change uninstaller methods of merge and get

    // Me make the .uninstaller directory
    // We copy the uninstallers
    for (Mergeable mergeable : uninstallerMerge) {
      mergeable.merge(outJar);
    }

    // Should we relaunch the uninstaller with privileges?
    if (PrivilegedRunner.isPrivilegedMode()
        && installdata.getInfo().isPrivilegedExecutionRequiredUninstaller()) {
      outJar.putNextEntry(new JarEntry("exec-admin"));
      outJar.closeEntry();
    }

    // We put the langpack
    List<Mergeable> langPack =
        pathResolver.getMergeableFromPath(
            "resources/langpacks/" + installdata.getLocaleISO3() + ".xml", "langpack.xml");
    for (Mergeable mergeable : langPack) {
      mergeable.merge(outJar);
    }
  }
 /**
  * Construct new compilation job.
  *
  * @param listener The listener to report progress to.
  * @param idata The installation data.
  * @param name The name of the job.
  * @param files The files to compile.
  * @param classpath The class path to use.
  */
 public CompilationJob(
     CompileHandler listener,
     AutomatedInstallData idata,
     String name,
     ArrayList<File> files,
     List<String> classpath) {
   this.listener = listener;
   this.idata = idata;
   this.langpack = idata.getLangpack();
   this.name = name;
   this.files = files;
   this.classpath = classpath;
 }
  private void writeFilesLog(
      AutomatedInstallData installdata,
      BufferedWriter extLogWriter,
      List<String> files,
      JarOutputStream outJar)
      throws IOException {
    outJar.putNextEntry(new JarEntry("install.log"));
    BufferedWriter logWriter = new BufferedWriter(new OutputStreamWriter(outJar));
    logWriter.write(installdata.getInstallPath());
    logWriter.newLine();
    Iterator<String> iter = files.iterator();
    if (extLogWriter != null) { // Write intern (in uninstaller.jar) and extern log file.

      while (iter.hasNext()) {
        String txt = iter.next();
        logWriter.write(txt);
        extLogWriter.write(txt);
        if (iter.hasNext()) {
          logWriter.newLine();
          extLogWriter.newLine();
        }
      }
      logWriter.flush();
      extLogWriter.flush();
      extLogWriter.close();
    } else {
      while (iter.hasNext()) {
        String txt = iter.next();
        logWriter.write(txt);
        if (iter.hasNext()) {
          logWriter.newLine();
        }
      }
      logWriter.flush();
    }
    outJar.closeEntry();
  }