package de.superx.bin; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.logging.LogManager; import java.util.logging.Logger; import org.w3c.dom.Document; import de.memtext.util.GetOpts; import de.memtext.util.GetOpts.Options; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JRParameter; 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.JasperPrintManager; import net.sf.jasperreports.engine.export.JRCsvExporter; import net.sf.jasperreports.engine.export.JRRtfExporter; import net.sf.jasperreports.engine.export.JRXlsExporter; import net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.engine.util.JRXmlUtils; /** * @author Daniel Quathamer Projektgruppe SuperX * * @ * Dieses Javaprogramm führt JasperReports aus und gibt das Ergebnis aus.
* *Aufruf: java $JAVA_OPTS -cp "$CP" de.superx.bin.SxJasper -logger:$LOGGER_PROPERTIES -db_properties:$DB_PROPERTIES -JRXML: -JASPER: -JRPRINT: -XML: -IGNORE_PAGINATION: -OUT: Aktion: sx_jasper führt einen JasperReports-Task aus. Das Ergebnis wird in eine Datei ausgegeben Die Datenbankverbindung ist in $DB_PROPERTIES definiert. Achtung: Der Workflow ist wie folgt: Quelldatei.jrxml ist die XML-Beschreibungsdatei des Berichts Task compile: Quelldatei.jrxml -> Quelldatei.jasper Quelldatei.jasper ist kompilierte Beschreibungsdatei für den Bericht Compile wird ausgeführt, wenn nur eine jrxml-Datei und der Logger übergeben wird. Task fill/fillIgnorePagination: Quelldatei.jasper -> Quelldatei.jrprint Quelldatei.jrprint enthält mit Daten gefüllte Berichtsvorlage Task pdf,csv,html,xml,xmlEmbed,rtf,xls,jxl,print: Quelldatei.jrprint -> Ausgabedatei (Default: Quelldatei+Formatspezifische Endung) Rendering des Berichts wird ausgeführt. Sonderform run: Aus vorhandender .jasper-Datei wird direkt eine pdf-Datei erzeugt. Setzen Sie den Logging-Level in $LOGGER_PROPERTIES auf INFO, um Laufzeiten zu sehen */ //Änderungen public class SxJasper { private static Connection myDb; private static Statement st; // Our statement to run queries with private static DatabaseMetaData dbmd; // This defines the structure of the database private static boolean done = false; // Added by CWJ to permit \q command private static String taskName = "run"; private static String jrxmlFileName = ""; private static String jasperFileName = ""; private static String jrprintFileName = ""; private static String XMLfileName = ""; private static String XSLfileName = ""; private static String ignorePagination = ""; private static String params = ""; private static String logfile = "../conf/logging.properties"; private static String dbpropfile = "../conf/db.properties"; private static SxConnection myConnection = null; private static String db_driver; private static String outfile = ""; private static Logger logger = (Logger) Logger.getLogger(SxJasper.class.toString()); private static final String TASK_COMPILE = "compile"; private static final String TASK_FILL = "fill"; private static final String TASK_PRINT = "print"; private static final String TASK_PDF = "pdf"; private static final String TASK_RTF = "rtf"; private static final String TASK_XML = "xml"; private static final String TASK_XML_EMBED = "xmlEmbed"; private static final String TASK_HTML = "html"; private static final String TASK_XLS = "xls"; private static final String TASK_JXL = "jxl"; private static final String TASK_CSV = "csv"; private static final String TASK_RUN = "run"; private static final String TASK_FILL_IGNORE_PAGINATION = "fillIgnorePagination"; private static String usage = "-------------------------------------\nGebrauch: java de.superx.bin.SxJasper -logger=<> -JRXML=<> -OUT=<>(optional) \n---------------------------------------------------"; /** * @param args * @throws ClassNotFoundException * @throws FileNotFoundException * @throws IOException * @throws SQLException */ public static void go(String args[]) throws ClassNotFoundException, FileNotFoundException, IOException, SQLException { if (args.length == 0) { throw new IllegalArgumentException("Mindestens drei Parameter (Pfad zu den logger.properties, Pfad zu den db.properties, outfile) erfoderlich"); } GetOpts.setOpts(args); String isdrin = GetOpts.isAllRequiredOptionsPresent(new Options[] {Options.opt_logger,Options.opt_dbprops,Options.opt_jrxml}); if (isdrin != null) { System.err.println("Folgende Optionen fehlen: " + isdrin); System.err.println(usage); System.exit(1); } if (GetOpts.isPresent(Options.opt_logger)) logfile = GetOpts.getValue(Options.opt_logger); if (GetOpts.isPresent(Options.opt_jrxml)) jrxmlFileName = GetOpts.getValue(Options.opt_jrxml); if (GetOpts.isPresent(Options.opt_jasper)) jasperFileName = GetOpts.getValue(Options.opt_jasper); else jasperFileName = de.memtext.util.FileUtils.getFileNameWithoutSuffix(jrxmlFileName) + ".jasper"; if (GetOpts.isPresent(Options.opt_jrPrint)) jrprintFileName = GetOpts.getValue(Options.opt_jrPrint); else jrprintFileName = de.memtext.util.FileUtils.getFileNameWithoutSuffix(jrxmlFileName) + ".jrprint"; if (GetOpts.isPresent(Options.opt_xml)) XMLfileName = GetOpts.getValue(Options.opt_xml); if (GetOpts.isPresent(Options.opt_ignorePagination)) ignorePagination = GetOpts.getValue(Options.opt_ignorePagination); if (GetOpts.isPresent(Options.opt_xsl)) XSLfileName = GetOpts.getValue(Options.opt_xsl); if (GetOpts.isPresent(Options.opt_out)) outfile = GetOpts.getValue(Options.opt_out); if (GetOpts.isPresent(Options.opt_dbprops)) dbpropfile = GetOpts.getValue(Options.opt_dbprops); if (GetOpts.isPresent(Options.opt_param)) params = GetOpts.getValue(Options.opt_param); File f = new File(logfile); if (!f.exists()) { throw new IOException("Datei nicht gefunden: " + logfile); } FileInputStream ins = new FileInputStream(logfile); LogManager MyLogManager = java.util.logging.LogManager.getLogManager(); MyLogManager.readConfiguration(ins); logfile = MyLogManager.getProperty(".level"); logger.info("Using Loggging-Level " + logfile); try { long start = System.currentTimeMillis(); if (!jrxmlFileName.equals("")) { if (jasperFileName.equals("")) jasperFileName = JasperCompileManager.compileReportToFile(jrxmlFileName); else JasperCompileManager.compileReportToFile(jrxmlFileName, jasperFileName); logger.info("Compile time : " + (System.currentTimeMillis() - start)); } if (!jasperFileName.equals("") && (GetOpts.isPresent(Options.opt_dbprops) || GetOpts.isPresent(Options.opt_xml) ) ) { logger.info("Filling " + jasperFileName); //Preparing parameters Map parameters = new HashMap(); if (!XMLfileName.equals("")) { logger.info("XML-Source " + XMLfileName); Document document = JRXmlUtils.parse(new File(XMLfileName)); parameters.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, document); parameters.put(JRXPathQueryExecuterFactory.XML_DATE_PATTERN, "dd.MM.yyyy HH:mm:ss"); parameters.put(JRXPathQueryExecuterFactory.XML_NUMBER_PATTERN, "###0.00;-###0.00"); parameters.put(JRXPathQueryExecuterFactory.XML_LOCALE, Locale.GERMAN); parameters.put(JRParameter.REPORT_LOCALE, Locale.GERMAN); } else getConnection(logger, dbpropfile); //parameters.put("ReportTitle", "Rektorenliste"); //parameters.put("FilterClause", "'Boston', 'Chicago', 'Oslo'"); //parameters.put("OrderClause", "City"); if (ignorePagination.equals("true")) { parameters.put(JRParameter.IS_IGNORE_PAGINATION, Boolean.TRUE); } if (jrprintFileName.equals("")) jrprintFileName = JasperFillManager.fillReportToFile(jasperFileName, parameters, myDb); else JasperFillManager.fillReportToFile(jasperFileName, jrprintFileName, parameters, myDb); logger.info("Filling time : " + (System.currentTimeMillis() - start)); } if (outfile.endsWith(".prn")) { JasperPrintManager.printReport(jrprintFileName, true); logger.info("Printing time : " + (System.currentTimeMillis() - start)); System.exit(0); } if (outfile.endsWith(".pdf")) { JasperExportManager.exportReportToPdfFile(jrprintFileName, outfile); logger.info("PDF creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } if (outfile.endsWith(".rtf")) { File sourceFile = new File(jrprintFileName); JasperPrint jasperPrint = (JasperPrint) JRLoader.loadObject(sourceFile); File destFile = new File(sourceFile.getParent(), outfile); JRRtfExporter exporter = new JRRtfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString()); exporter.exportReport(); logger.info("RTF creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } if (outfile.endsWith(".xml")) { JasperExportManager.exportReportToXmlFile(jrprintFileName, outfile, false); logger.info("XML creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } /*else if (TASK_XML_EMBED.equals(taskName)) { if(outfile.equals("")) outfile=jrxmlFileName + ".xml"; JasperExportManager.exportReportToXmlFile(jrprintFileName,outfile, true); logger.info("XML creation time : " + (System.currentTimeMillis() - start)); System.exit(0); }*/ if (outfile.endsWith(".htm") || outfile.endsWith(".html")) { JasperExportManager.exportReportToHtmlFile(jrprintFileName, outfile); logger.info("HTML creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } if (outfile.endsWith(".xls")) { File sourceFile = new File(jrprintFileName); JasperPrint jasperPrint = (JasperPrint) JRLoader.loadObject(sourceFile); File destFile = new File(sourceFile.getParent(), outfile); JRXlsExporter exporter = new JRXlsExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString()); //exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); exporter.exportReport(); logger.info("XLS creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } /* else if (TASK_JXL.equals(taskName)) { File sourceFile = new File(jrprintFileName); JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile); if(outfile.equals("")) outfile=jasperPrint.getName() + ".jxl.xls"; File destFile = new File(sourceFile.getParent(), outfile); JExcelApiExporter exporter = new JExcelApiExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString()); exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE); exporter.exportReport(); logger.info("XLS creation time : " + (System.currentTimeMillis() - start)); System.exit(0); }*/ if (outfile.endsWith(".csv")) { File sourceFile = new File(jrprintFileName); JasperPrint jasperPrint = (JasperPrint) JRLoader.loadObject(sourceFile); File destFile = new File(sourceFile.getParent(), outfile); JRCsvExporter exporter = new JRCsvExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString()); exporter.exportReport(); logger.info("CSV creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } /*else if (TASK_RUN.equals(taskName)) { //Preparing parameters Map parameters = new HashMap(); //parameters.put("ReportTitle", "Address Report"); //parameters.put("FilterClause", "'Boston', 'Chicago'"); //parameters.put("OrderClause", "City"); if(outfile.equals("")) outfile=jrxmlFileName+".pdf"; getConnection(logger, dbpropfile); JasperRunManager.runReportToPdfFile(jrxmlFileName+".jasper",outfile, parameters, myDb); logger.info("PDF running time : " + (System.currentTimeMillis() - start)); System.exit(0); }*/ } catch (JRException e) { e.printStackTrace(); System.exit(1); } catch (Exception e) { e.printStackTrace(); System.exit(1); } //getConnection(logger, dbpropfile); logger.info("SxJasper erfolgreich beendet"); } /* * Display some instructions on how to run the example */ public static void instructions() { System.out.println("SuperX @version@\n"); System.out.println("\nDieses Java-Programm führt einen SQL-Ausdruck aus und gibt das Ergebnis aus.\n"); System.out.println("Gebrauch:\n java doquery (optional) (optional) (optional)\n"); System.exit(1); } public static void main(String args[]) { try { go(args); } catch (Exception ex) { System.err.println("Doquery Aufruf fehlgeschlagen.\n" + ex); ex.printStackTrace(); System.exit(1); } } public static void getConnection(Logger logger, String propFile) throws SQLException { myConnection = new SxConnection(); myConnection.setPropfile(propFile); logger.config("Starting Connection..."); try { myDb = myConnection.getConnection(); st = myDb.createStatement(); //st = myDb.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, // java.sql.ResultSet.CONCUR_READ_ONLY); //st.setFetchSize(100); dbmd = myDb.getMetaData(); //st = myDb.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, //ResultSet.CONCUR_UPDATABLE); } catch (Exception e) { logger.severe("Keine DB-Verbindung: " + e.toString()); throw new SQLException("Keine DB-Verbindung: " + e.toString()); } db_driver = myConnection.m_DriverClass.stringValue(); } }