package de.mytasko.jasperstarter;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.util.JRLoader;

/**
 * Just the decompiled version of the Example.class of the former jasper.jar
 */
public class Main {
  public static void usage() {
    System.out.println("Benutzung:\njava -jar jasper.jar eingabe-Datei ausgabe-Datei Connectstring [Parameterliste]\n\neingabe-Datei:\n\t.jrxml\n\t.jasper\n\nausgabe-Datei:\n\t.pdf\n\t.html");
  }

  public static void log(String in) {
    System.err.println(String.valueOf((new Date()).toString()) + " " + in);
  }

  public static String ext(String filename) {
    int i = filename.lastIndexOf('.');
    int p = filename.lastIndexOf('/');
    if (i <= p)
      return "";
    return filename.substring(i + 1);
  }

  public static void main(String[] args) {
    String connectString = null;
    String eingabe = null;
    String ausgabe = null;
    String[] parameters = new String[0];
    if (args.length > 2) {
      eingabe = args[0];
      ausgabe = args[1];
      connectString = args[2];
      if (args.length > 3) {
        String parameterString = args[3];
        parameters = parameterString.split(";");
      }
    } else {
      usage();
      return;
    }
    System.err.println("Aktuelles Verzeichnis: " + System.getProperty("user.dir"));
    System.err.println("eingabe: " + eingabe);
    System.err.println("ausgabe: " + ausgabe);
    System.err.println("connectString: " + connectString);
    Connection con = null;
    try {
      con = DriverManager.getConnection(connectString);
    } catch (SQLException e1) {
      System.out.println("mysql geht nicht");
      e1.printStackTrace();
    }
    Map<String, Object> parameter = new HashMap<String, Object>();
    byte b;
    int i;
    String[] arrayOfString1;
    for (i = (arrayOfString1 = parameters).length, b = 0; b < i; ) {
      String str = arrayOfString1[b];
      String[] pair = str.split("=", 2);
      if (pair.length >= 2) {
        System.err.println("\"" + pair[0] + "\" = \"" + pair[1] + "\"");
        parameter.put(pair[0], pair[1]);
      }
      b++;
    }
    if (con == null)
      return;
    try {
      String typ = ext(eingabe);
      JasperReport jasperReport = null;
      if (typ.equals("jrxml")) {
        log("jrxml kompilieren");
        jasperReport = JasperCompileManager.compileReport(eingabe);
      }
      if (typ.equals("jasper")) {
        log("jasper einlesen");
        jasperReport = (JasperReport)JRLoader.loadObject(new File(eingabe));
      }
      if (jasperReport != null) {
        String otyp = ext(ausgabe);
        log("Erstellen");
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, con);
        if (otyp.equals("pdf")) {
          log("pdf exportieren");
          JasperExportManager.exportReportToPdfFile(jasperPrint, ausgabe);
        }
        if (otyp.equals("html")) {
          log("html exportieren");
          JasperExportManager.exportReportToHtmlFile(jasperPrint, ausgabe);
        }
        if (otyp.equals("xls")) {
          log("xls exportieren");
          JRXlsExporter exporter = new JRXlsExporter();
          File outputFile = new File(ausgabe);
          FileOutputStream fos = null;
          try {
            fos = new FileOutputStream(outputFile);
          } catch (FileNotFoundException e) {
            e.printStackTrace();
          }
          exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
          exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fos);
          exporter.setParameter((JRExporterParameter)JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
          exporter.setParameter((JRExporterParameter)JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
          exporter.setParameter((JRExporterParameter)JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
          exporter.exportReport();
        }
        log("Fertig");
      }
    } catch (JRException e) {
      e.printStackTrace();
    }
  }
}
