package sos.stacks.jasperreports;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaSizeName;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRRtfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.util.JRLoader;
import sos.connection.SOSConnection;
import sos.connection.SOSConnectionFileProcessor;
import sos.documentfactory.DocumentFactoryClass;
import sos.net.SOSMailOrder;
import sos.settings.SOSConnectionSettings;
import sos.spooler.Order;
import sos.spooler.Variable_set;
import sos.spooler.Web_service_request;
import sos.spooler.Web_service_response;
import sos.spooler.Xslt_stylesheet;
import sos.util.SOSClassUtil;
import sos.util.SOSDate;
import sos.util.SOSPlainTextProcessor;
import sos.util.SOSSchedulerLogger;
import sos.util.SOSString;
import sos.xml.SOSXMLXPath;
/**
* Klasse JobSchedulerJasperReportJob
*
* <br>Der Job erzeugt aus einer Report-Konfiguration mit JasperReports einen Bericht,
* (siehe http://jasperreports.sourceforge.net)
* <br>
* <br>
* <br>Eine Report-Konfiguration legen Sie i.d.R. mit einem visuellen Report-Editor an,
* z.B. mit iReport (siehe http://ireport.sourceforge.net).
* <br>
* <br>
* <br>Es kann wahlweise die Datenbankverbindung des Job Schedulers oder eine separat angebbare
* <br>Datenbankverbindung für die Abfrage der Berichtsdaten verwendet werden.
* <br>
* <br>
* <br>Die Berichtsdaten können auch mittels Parameter generiert werden. Alle Jobparameter werden den JasperReport als
* Parameter zum Weiterverarbeiten weitergegeben.
* <br>
* <br>
* <br>Der Job unterstützt die Ausgabe in die Berichtsformate PDF, HTML, RTF, XML und XLS.
* <br>
* <br>Alle Generierten Reports können als emails versendet werden.
* <br>
* <br>Generieren von Reports mit JasperReport:
* <br>
* <br>Über die Jobparameter bzw. Orderparameter können folgende Parametern übergeben werden:
* <br> - Name der Jasper Vorlage. Die jasper-Vorlage mit Pfadangabe angeben.
* <br> <b>parameter:</b> name="<i>report_filename</i>" value="<i>jasperreports/config/dod/dod.jasper</i>"
* <br>
* <br> - Ausgabeverzeichnis
* <br> <b>parameter:</b> name="<i>output_filename</i>" value="<i>jasperreports/reports/dod_intervall.pdf"
* <br>
* <br> - Das Report wird hier zweimal erzeugt. Einmal in html und einmal in pdf
* <br> <b>parameter:</b> name="<i>output_type</i>" value="<i>html;pdf</i>"
* <br>
* <br> - Titel des Reports (gilt nur für dod-reports)
* <br> <b>parameter:</b> name="<i>title</i>" value="<i>DOD Yearly Order Report: ETH Zuerich</i>"
* <br>
* <br> - Verzeichnis der Sub Reports, falls Unterformulare vorhanden ist. Bitte schließende Slash nicht vergessen
* <br> <b>parameter:</b> name="<i>SUBREPORT_DIR</i>" value="<i>/home/test/scheduler.jasper/jasperreports/config/dod/dod_sub_report/</i>"
* <br>
* <br> - Konfigurationsdatei der Datenbankverbindung. Ist kein "settings_filename" angegeben, dann wird der Connection des schedulers übergeben
* <br> <b>parameter:</b> name="<i>settings_filename</i>" value="<i>/home/test/scheduler.jasper/config/sos_settings_dod.ini</i>"
* <br>
* <br> - Der Parameter benennt den Pfad und Namen einer Eingabedatei mit SQL-Statements.
* <br> Wird dem Parameter ein Dateiname zugewiesen, dann wird die in dieser Datei enthaltene Abfrage für den Report verwendet
* <br> anstelle der in der Berichtskonfiguration enthaltenen Abfrage, siehe Parameterreport_filename.
* <br> <b>parameter:</b> name="<i>query_filename</i>" value="<i>dod.sql</i>"
* <br>
* <br> - Der Parameter gibt eine SQL-Dateiname an. Ist dem Parameter eine Dateiname zugewiesen,
* <br> dann wird die Abfrage ausgeführt und das Resultat der Abfrage mit den Datenbankverbindungen
* <br> den JasperReports als Parameter übergeben.
* <br> Die Resultat der Abfrage sind freier Parametern, der zur weitergabe an den JasperReports
* <br> Parameter verwendet wird. In DOD-Report werden z.B. dated_from und dated_to als
* <br> Parameter gebraucht, die aus der SQL-Statements selektiert werden
* <br> <b>parameter:</b> name="<i>parameter_query_filename</i>" value="<i>dod_report_year.sql</i>"
* <br>
* <br>
* <br> -die Parameter dated_from und dated_to direkt übergeben z.B.
* <br> Die Parameter ist ein freier Parameter, der zur weitergabe an den JasperReports Parameter
* <br> verwendet wird. Es handelt sich um die Titel des Reports und wird in DOD-Reports verwendet.
* <br> <b>parameter:</b> name="<i>dated_from</i>" value="<i>2000-01-01</i>"
* <br> <b>parameter:</b> name="<i>dated_to</i>" value="<i>2007-01-01</i>"
* <br>
* <br> - Ist ein Druckername angegeben, dann wird das Dokument gedruckt.
* <br> <b>parameter:</b> name="<i>printer_name</i>" value=""
* <br>
* <br> - Anzahl zu druckenden Exemplarer
* <br> <b>parameter:</b> name="<i>printer_copies" value =""
* <br>
* <br> - Sprache der Reports festlegen
* <br> <b>parameter:</b> name="<i>report_locale" value ="de oder en"
* <br>
* <br>
* <br>- Parameter zur Mailversenden
* <br>mail_it funktion. Ist eine mail_it Parameter angegeben bzw auf true gesetzt, dann wird mit
* <br>der Scheduler Mail Funktion emails versendet. Es wird überprüft, ob zusätzlich
* <br>die Parameter "mail_to", "mail_cc", "mail_bcc", "mail_subject" und "mail_body" angegeben
* <br>sind. Wenn ja, dann werden zu diesen Adressanten mit den Betreff und body emails versendet.
* <br>Wenn diese Parametern nicht existieren, dann werden die Empfänger aus den Einstellungen
* <br>des Schedulers (factory.ini) genommen.
* <br>Ist der Jobparameter mail_it nicht vorhanden bzw. als false gesetzt, dann wird der email mit
* <br>Hilfe der Klasse SOSMailOrder versendet.
* <br>Die Voraussetzung zum email versenden mit der Klasse SOSMailOrder ist
* <br> 1. Datenbankverbindung ( hier ist die Datenbankverbindung des Schedulers oder die Datengemeint)
* <br> 2. das Existieren der Tabelle "SETTINGS"
* <br> 3. Einträge zum email versenden in der Tabelle "SETTINGS"
* <br> Die Empfänger und der Subject und Body werden aus der Jobparameter ausgelesen.
* <br>
* <br><b>parameter:</b> name="<i>mail_it</i>" value="true/false"
*
* <br>-Geben Sie hier eine oder mehrere eMail Adressen an, die den Report erhalten. Mehrere eMail Adressen werden durch Komma getrennt.
* <br>Ist diese Einstellung leer, dann werden Reports nicht per eMail versendet.
* <br><b>parameter:</b> name="<i>mail_to</i>" value=""
*
* <br>-Geben Sie hier eine oder mehrere eMail Adressen an, die den Report als carbon copy erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.
* <br><b>parameter:</b> name="<i>mail_cc</i>" value=""
*
* <br>-Geben Sie hier eine oder mehrere eMail Adressen an, die den Report als blind carbon copy erhalten. Mehrere eMail Adressen werden durch Komma getrennt.
* <br><b>parameter:</b> name="<i>mail_bcc</i>" value=""
*
* <br>-Der Inhalt des Parameters wird als Betreff der eMail des Reports verwendet und muss ausgefüllt sein, wenn Reports per eMail versendet werden.
* <br>Mit diesem Parameter kann das Layout des Reports im HTML-Format oder als plain text angegeben werden. Zur Bestimmen des Layout Typs wird dem Parameter folgender Prefix zugeordnet:
* <br> - factory:
* <br> - factory_file:
* <br> - plain:
* <br> - plain_file:
* <br>Es können folgende Platzhalter verwendet werden, die durch [ und] geklammert werden, z.B. in der Form [date]:
* <br> - [date] - aktuelles Datum
* <br> - [datetime] - aktuelles Datum und Uhrzeit
* <br> - [orderid] - ID des Auftrags
* <br> - [jobname] - Name des Jobs
* <br> - [taskid] - ID der Task
* <br><b>parameter:</b> name="<i>mail_subject</i>" value="<i>JasperReports: Report Delivery</i>"
* <br>
* <br>-Mit diesem Parameter kann das Layout des Reports im HTML-Format oder als plain text angegeben werden. Zur Bestimmen des Layout Typs wird dem Parameter folgender Prefix zugeordnet:
* <br> - factory:
* <br> - factory_file:
* <br> - plain:
* <br> - plain_file:
* <br>
* <br>Innerhalb des Layouts können folgende Platzhalter verwendet werden, die jeweils mit [ und ] geklammert werden, z.B. in der Form [date]:
* <br> - [date] - aktuelles Datum
* <br> - [datetime] - aktuelles Datum und Uhrzeit
* <br> - [orderid] - ID des Auftrags
* <br> - [jobname] - Name des Jobs
* <br> - [taskid] - ID der Task
* <br> - [sql] - SQL-Query, aus der der Report erstellt wurde
* <br> - [xml] - aus dem Ergebnis der Abfrage generiertes xml vor der Transformation
* <br><b>parameter:</b> name="<i>mail_body</i>" value=""
* <br>
* <br>
* <br>@author andreas.pueschel@sos-berlin.com; mueruevet.oeksuez@sos-berlin.com
* <br>@version 1.0
* <br>@resource sos.scheduler.jar, sos.spooler.jar, sos.stacks.jar, sos.util.jar,
* sos.xml.jar, sos.connection.jar, jasperreports-1.2.3.jar, poi-2.0-final-20040126.jar,
* itext-1.3.1.jar, commons-digester-1.7.jar, commons-javaflow-20060411.jar, commons-collections-2.1.jar,
* org.apache.commons.jar, sos.documentfactory.jar, sos.mail.jar, sos.settings.jar, sos.net.jar,
* activation, sos.hostware.jar,
* <br>
* <br>
* <br>@see job documentation in the package jobdoc for details
*/
public class JobSchedulerJasperReportJob extends sos.scheduler.managed.JobSchedulerManagedJob {
/** Konfigurationsdatei der Datenbankverbindungen */
private String settingsFilename = "";
/** Vorlagenname: Extention ist jasper*/
private String reportFilename = "";
/** SQL-Dateiname, wird dieser Parameter gesetzt dann wird den JasperReport
* die ResultSet ohne Datenbankverbindung übergeben.*/
private String queryFilename = "";
/** Ausgabetyp der Reportdatei*/
private String outputType = "pdf";
/** Name der Ausgabedatei oder eine Verzeichnisname */
private String outputFilename = "";
/** Wenn der Druckername eine prefix = "factory:" enthält, dann wird dieser
* über die Documentfactory ermittelt. Sonst wird über diesen Druckername gedruckt. */
private String printerName = "";
/** Einstellungsdatei für Datenbankverbindung, wenn Documentfactory printerName / mail von einer
* anderen Datenbank ermittelt werden soll */
private String factorySettingsFile = "";
/** sos.util.SOSString Objekt*/
private SOSString sosString = new SOSString();
/** temporäre Ausgabe hilfsdateiname */
private File filledReportFile = null;
/** Liste aller generierten Report Dokumente*/
private ArrayList listOfOutputFilename = null;
/** Ist ein parameter_query_filename angegeben, so wird dieser hier in java ausgeführt und das
* Ergebis als Parameter den jasperreport übergebenden */
private String parameterQueryFilename = "";
/** sos.spooler.Order Objekt */
private Order order = null;
/** sos.spooler.Variable_set Objekt */
private Variable_set orderData = null;
/** Anzahl zu druckenden Exemplarer*/
private int printerCopies = 1;
/** Ist eine mail_it Parameter angegeben bzw auf true gesetzt, dann wird mit
* der Scheduler Mail Funktion emails versendet. Es wird überprüft, ob zusätzlich
* die Parameter "mail_to", "mail_cc", "mail_bcc", "mail_subject" und "mail_body" angegeben
* sind. Wenn ja, dann werden zu diesen Adressanten mit den Betreff und body emails versendet.
* Wenn diese Parametern nicht existieren, dann werden die Empfänger aus den Einstellungen
* des Schedulers (factory.ini) genommen.*/
private boolean mailIt = false;
/** Geben Sie hier eine oder mehrere eMail Adressen an, die den Report erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.<br/>
* Ist diese Einstellung leer, dann werden Reports nicht per eMail versendet.*/
private String mailTo = "";
/** Geben Sie hier eine oder mehrere eMail Adressen an, die den Report als carbon copy erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt. */
private String mailCc = "";
/**
* Geben Sie hier eine oder mehrere eMail Adressen an, die den Report als blind carbon copy erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.
*/
private String mailBcc = "";
/** Der Inhalt des Parameters wird als Betreff der eMail des
* Reports verwendet und muss ausgefüllt sein, wenn Reports per
* eMail versendet werden.
* <p>
* Es können folgende Platzhalter verwendet werden, die durch [
* und] geklammert werden, z.B. in der Form [date]:
* </p>
* <ul>
* <li>[date] - aktuelles Datum</li>
* <li>[datetime] - aktuelles Datum und Uhrzeit</li>
* <li>[orderid] - ID des Auftrags</li>
* <li>[jobname] - Name des Jobs</li>
* <li>[taskid] - ID der Task</li>
*</ul>
*/
private String mailSubject = "";
/**
* Löscht den alten Bericht bevor neue generiert wird.
* Das verhindert, falls keine neue Bericht erstellt wird, z.B. wegen DB oder SQL Fehler,
* dann soll auch keine alten Bericht abgeholt werden
*/
private boolean deleteOldFilename = false;
/**
* <p>
* Mit diesem Parameter kann das Layout
* des Reports im HTML-Format oder als plain text angegeben
* werden. Innerhalb des Layouts können folgende Platzhalter verwendet werden, die jeweils mit [
* und ] geklammert werden, z.B. in der Form [date]:
* </p>
* <ul>
* <li>[date] - aktuelles Datum</li>
* <li>[datetime] - aktuelles Datum und Uhrzeit</li>
* <li>[orderid] - ID des Auftrags</li>
* <li>[jobname] - Name des Jobs</li>
* <li>[taskid] - ID der Task</li>
* <li>[sql] - SQL-Query, aus der der Report erstellt wurde</li>
* <li>
* [xml] - aus dem Ergebnis der Abfrage generiertes xml vor der
* Transformation
* </li>
* </ul>
*
*/
private String mailBody = "";
/** SQL-Statement in base64 encodiert. Diese Variable wird zuerst decodiert und anschließend wird der
* Inhalt ausgeführt und der ResultSet den JasperReport ohne Datenbankverbindung übergeben.*/
private String queryStatement = "";
/** Schalter für das versenden bzw. nicht versenden von Reports als Attachment;
* Fall: suspend_attachment=true -> dann werden keine Reports versender
* Fall: suspend_attachment=false -> dann werden Reports mit versendet
* default: suspend_attachment=false */
private boolean suspendAttachment = false;
/**
* initialization
*/
public boolean spooler_init() {
try { // to fetch default job parameters
if (!super.spooler_init())
return false;
//init();
//this.getJobParameters();
return true;
} catch (Exception e) {
spooler_log.error("error occurred processing spooler_init(): " + e.getMessage());
return false;
}
}
/**
* process report
*/
public boolean spooler_process() {
//Order order = null;
//Variable_set orderData = null;
order = null;
orderData = null;
File settingsFile = null;
File reportFile = null;
File queryFile = null;
File queryStatementFile = null;
File outputFile = null;
File parameterQueryFile = null;
String stateText = "";
String tmpOutputFileWithoutExtension = ""; //hilfsvariable
SOSConnectionFileProcessor queryProcessor = null;
try {
spooler_log.debug3("******************spooler_process*****************************");
this.prepareParams();
listOfOutputFilename = new ArrayList();
this.setSettingsFilename("");
this.setReportFilename("");
this.setQueryFilename("");
this.setOutputType("pdf");
this.setOutputFilename("");
this.setQueryStatement("");
// get job parameters from job configuration (scheduler.xml)
this.getJobParameters();
// to fetch parameters from orders that have precedence to job parameters
this.getOrderParameters();
// to check report parameters
checkParams();
try { // to process report
reportFile = new File(this.getReportFilename());
if (!reportFile.exists())
throw new Exception("report file does not exist: " + reportFile.getCanonicalPath());
filledReportFile = File.createTempFile("sos", ".tmp");
filledReportFile.deleteOnExit();
queryFile = new File(this.getQueryFilename());
outputFile = null;
if (this.getOutputFilename() != null && this.getOutputFilename().length() > 0) {
String outputFile_ = maskFilename(this.getOutputFilename());
outputFile = new File(outputFile_);
} else {
outputFile = File.createTempFile("sos", ".tmp");
outputFile.deleteOnExit();
}
//eventuell vorhandene alte Berichte löschen
if(this.isDeleteOldFilename()) {
if(outputFile.exists()) {
spooler_log.debug3("..deleting old File " + outputFile.getCanonicalPath());
if(!outputFile.delete()) {
spooler_log.warn("..could not delete old File " + outputFile.getCanonicalPath());
} else {
spooler_log.debug3("..successfully delete old File " + outputFile.getCanonicalPath());
}
}
}
if (this.getSettingsFilename() != null && this.getSettingsFilename().length() > 0) {
settingsFile = new File(this.getSettingsFilename());
if (!settingsFile.exists()) throw new Exception("settings file does not exist: " + settingsFile.getCanonicalPath());
queryProcessor = new SOSConnectionFileProcessor(settingsFile.getCanonicalPath(), this.getLogger());
} else {
if (this.getConnection() == null) throw new Exception("job scheduler runs without database");
queryProcessor = new SOSConnectionFileProcessor(this.getConnection(), this.getLogger());
}
//alle Jobparametern werden den jasperreport übergeben
Map parameters = new HashMap();
Variable_set params = spooler_task.params();
/*if (orderData != null)
params.merge(orderData);
*/
if (orderData != null) {
spooler_log.debug6(".......orderDatanames: " + orderData.names());
java.util.StringTokenizer tokenizero = new java.util.StringTokenizer(orderData.names(), ";");
while( tokenizero.hasMoreTokens() ) {
String name = tokenizero.nextToken();
parameters.put(name, orderData.var(name));
spooler_log.debug6(".......orderData: " + name + "=" + orderData.var(name));
}
}
spooler_log.debug6(".......paramsnames: " + params.names());
java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(params.names(), ";");
while( tokenizer.hasMoreTokens() ) {
String name = tokenizer.nextToken();
parameters.put(name, params.var(name));
spooler_log.debug6(".......jobparameter: " + name + "=" + params.var(name));
}
//Ausführen der sql-script und das Ergebnis den Jasperreport als Parameter übergeben
if (sosString.parseToString(parameterQueryFilename).length() > 0) {
parameterQueryFile = new File (this.parameterQueryFilename);
if (parameterQueryFile.exists()) {
queryProcessor.process(parameterQueryFile);
try {
parameters.putAll(queryProcessor.getConnection().get());
} catch (Exception e) {
spooler_log.warn("..error while get Resultset from query Processor Connection: " + e.toString());
}
} else {
spooler_log.warn(".." + parameterQueryFilename + " not exists");
}
}
if (sosString.parseToString(parameters.get("report_locale")).length() > 0) {
parameters.put(JRParameter.REPORT_LOCALE, new Locale(sosString.parseToString(parameters.get("report_locale"))));
} else {
parameters.put(JRParameter.REPORT_LOCALE, Locale.GERMAN);
}
//Ausgaben aller Parametern, die den JasperReport übergeben werden
Object[] param = parameters.entrySet().toArray();
for (int i = 0; i < param.length; i++) {
spooler_log.debug3( "..report parameter " + param[i].toString());
}
//java.util.ResourceBundle.getBundle("sos.stacks.jasperreports.dod").toString();
//parameters.put(JRParameter.REPORT_RESOURCE_BUNDLE, java.util.ResourceBundle.getBundle("sos.stacks.jasperreports.dod").toString());
if (sosString.parseToString(queryStatement).length() > 0) {
queryStatementFile = this.decodeBase64(this.queryStatement);
this.getLogger().debug3("queryStatementFile: " + queryStatementFile);
if (queryStatementFile.exists()) {
queryProcessor.process(queryStatementFile);
}
}
//existiert ein queryfile, dann wird das Ergebnis der Queryfile ohne Connection den jasperreport übergeben
//Vorher werden alle Platzhalter in der query_filname ersetzt mit Parameter
if (queryFile.exists()) {
//queryProcessor.process(queryFile);
// Paltzhalter in der query_filename parsieren
SOSPlainTextProcessor processor_ = new SOSPlainTextProcessor();
//File currQueryFile = File.createTempFile("temp", ".sql", queryFile.getParentFile());
File currQueryFile = processor_.process(queryFile, (HashMap)parameters);
currQueryFile.deleteOnExit();
queryProcessor.process(currQueryFile);
this.getLogger().debug5("query " + processor_.getDocumentContent());
}
if (queryFile.exists() || (queryStatementFile != null && queryStatementFile.exists())) {
JasperFillManager.fillReportToFile(reportFile.getCanonicalPath(), filledReportFile.getCanonicalPath(),
parameters,
new JRResultSetDataSource(queryProcessor.getConnection().getResultSet()));
} else {
JasperFillManager.fillReportToFile(reportFile.getCanonicalPath(),
filledReportFile.getCanonicalPath(),
parameters,
queryProcessor.getConnection().getConnection());
}
tmpOutputFileWithoutExtension = outputFile.getCanonicalPath().substring(0, outputFile.getCanonicalPath().lastIndexOf(".") ) + ".";
if (getOutputType().indexOf("pdf") > -1) {
outputFile = new File(tmpOutputFileWithoutExtension + "pdf");
JasperExportManager.exportReportToPdfFile(filledReportFile.getCanonicalPath(), outputFile.getCanonicalPath());
listOfOutputFilename.add(outputFile);
}
if (getOutputType().indexOf("htm") > -1 || getOutputType().indexOf("html") > -1) {
if (getOutputType().indexOf("html") > -1)
outputFile = new File(tmpOutputFileWithoutExtension + "html");
else
outputFile = new File(tmpOutputFileWithoutExtension + "htm");
// JasperExportManager.exportReportToHtmlFile(filledReportFile.getCanonicalPath(), outputFile.getCanonicalPath());
JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(filledReportFile);
JRHtmlExporter exporter = new JRHtmlExporter();
exporter.setParameter(JRHtmlExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRHtmlExporterParameter.OUTPUT_FILE_NAME, outputFile.getCanonicalPath());
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN , Boolean.FALSE);
exporter.exportReport();
listOfOutputFilename.add(outputFile);
}
if (this.getOutputType().indexOf("xml") > -1) {
outputFile = new File(tmpOutputFileWithoutExtension + "xml");
JasperExportManager.exportReportToXmlFile(filledReportFile.getCanonicalPath(), outputFile.getCanonicalPath(), true);
listOfOutputFilename.add(outputFile);
}
if (this.getOutputType().indexOf("xls") > -1) {
outputFile = new File(tmpOutputFileWithoutExtension + "xls");
JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(filledReportFile);
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile.getCanonicalPath());
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
exporter.exportReport();
listOfOutputFilename.add(outputFile);
}
if (this.getOutputType().indexOf("rtf") > -1) {
outputFile = new File(tmpOutputFileWithoutExtension + "rtf");
JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(filledReportFile);
JRRtfExporter exporter = new JRRtfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile.getCanonicalPath());
exporter.exportReport();
listOfOutputFilename.add(outputFile);
}
stateText = printDocument();
stateText = "..report generated in output file: " + tmpOutputFileWithoutExtension + "[" + getOutputType() + "] " + stateText;
stateText = sendEmail(stateText);
spooler_log.info(stateText);
spooler_job.set_state_text(stateText);
} catch (Exception e) {
throw new Exception("error occurred processing report: " + e);
}
try { // to fetch parameters from orders that have precedence to job parameters
if (spooler_task.job().order_queue() != null) {
order = spooler_task.order();
// create response for web service request
if (order.web_service_operation_or_null() != null) {
Web_service_response response = order.web_service_operation().response();
if (this.getOutputFilename() != null && this.getOutputFilename().length() > 0) {
// return SOAP response
// should the response be previously transformed ...
if (order.web_service().params().var("response_stylesheet") != null && order.web_service().params().var("response_stylesheet").length() > 0) {
Xslt_stylesheet stylesheet = spooler.create_xslt_stylesheet();
stylesheet.load_file(order.web_service().params().var("response_stylesheet"));
String xml_document = stylesheet.apply_xml(order.xml());
spooler_log.debug3("content of response transformation:/n" + xml_document);
response.set_string_content(xml_document);
} else {
response.set_string_content(order.xml());
}
} else {
// return binary content
BufferedInputStream in = new BufferedInputStream( new FileInputStream(outputFile));
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte buffer[] = new byte[1024];
int bytesRead;
while ( (bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
order.web_service_operation().response().set_binary_content(out.toByteArray());
}
response.send();
spooler_log.debug3("web service response successfully processed for order \"" + order.id() + "\"");
}
}
} catch (Exception e) {
throw new Exception("error occurred processing web service response: " + e.getMessage());
}
// return value for classic and order driven processing
return (spooler_task.job().order_queue() != null);
} catch (Exception e) {
spooler_job.set_state_text(e.getMessage());
spooler_log.warn(e.getMessage());
return false;
} finally {
}
}
/**
* Liefert true, wenn in output_type gültige Typen definiert ist:
* Gültige output_type sind: [pdf, htm, xml, xls, rtfl]
* @return
* @throws Exception
*/
private boolean isValidOutputType() throws Exception{
try {
if ((this.getOutputType().indexOf("pdf") > -1 ) ||
(this.getOutputType().indexOf("htm") > -1 ) ||
(this.getOutputType().indexOf("html") > -1 ) ||
(this.getOutputType().indexOf("xml") > -1 ) ||
(this.getOutputType().indexOf("xls") > -1 ) ||
(this.getOutputType().indexOf("rtf") > -1 )
) {
return true;
} else {
return false;
}
} catch (Exception e) {
throw new Exception("..error in " + SOSClassUtil.getClassName() + ": " + e);
}
}
public File decodeBase64(String sencode) throws Exception {
try {
/*String hallo = "Hallo";
byte[] b = hallo.getBytes();
String sencode = new sun.misc.BASE64Encoder().encode(b);
byte[] buf = new sun.misc.BASE64Decoder().decodeBuffer(sencode);
// writes to the file
FileOutputStream fos = new FileOutputStream( "C:/temp/a.sql" );
fos.write( buf );
fos.close();
*/
//sencode = sencode.replaceAll("\r","");
//sencode = sencode.replaceAll("\n","");
//this.getLogger().debug("lösch mich: " + sencode);
byte[] buf = new sun.misc.BASE64Decoder().decodeBuffer(sencode.trim());
File f = File.createTempFile("query_statement", ".sql");
//File f = new File("C:/temp/a.sql");
f.deleteOnExit();
//this.getLogger().info("test lösch mich "+ f.getCanonicalPath());
// writes to the file
FileOutputStream fos = new FileOutputStream( f );
fos.write( buf );
fos.close();
return f;
} catch (Exception e) {
throw new Exception ("..error in " + SOSClassUtil.getClassName() + ": " + e);
}
}
/**
* Dokument drucken.
*
* @throws Exception
*/
private String printDocument() throws Exception {
try {
// druckername bestimmen
String prName = getPrinter();
if (sosString.parseToString(prName).length() > 0 ) {
JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(filledReportFile);
net.sf.jasperreports.engine.export.JRPrintServiceExporter exporter = new net.sf.jasperreports.engine.export.JRPrintServiceExporter();
// set the report to print
exporter.setParameter( net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter.JASPER_PRINT, jasperPrint);
// count of report to print
javax.print.attribute.PrintRequestAttributeSet aset = new javax.print.attribute.HashPrintRequestAttributeSet();
aset.add(new Copies(getPrinterCopies()));
aset.add(MediaSizeName.ISO_A4);
exporter.setParameter( net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, aset);
// let the exporter know which printer we want to print on
javax.print.attribute.PrintServiceAttributeSet serviceAttributeSet = new javax.print.attribute.HashPrintServiceAttributeSet();
serviceAttributeSet.add(new javax.print.attribute.standard.PrinterName(prName, null));
exporter.setParameter( net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, serviceAttributeSet);
// print it
exporter.exportReport();
this.getLogger().info("..report successfully printed " + getPrinterCopies() + "x.");
return "..report successfully printed " + getPrinterCopies() + "x.";
}
return "";
} catch (Exception e) {
throw new Exception ("..error in " + SOSClassUtil.getMethodName() + " " + e);
}
}
/**
* Name der Ausgabedatei auslesen
* @return String
*/
public String getOutputFilename() {
return outputFilename;
}
/**
* Name der Ausgabedatei setzen
* @param outputFilename The outputFilename to set.
*/
public void setOutputFilename(String outputFilename) {
this.outputFilename = outputFilename;
}
/**
* Liefert den Ausgabedateitypen. Es können mehrere in semikolon getrennt angegeben werden:
* Gültige Typen sind: [pdf, html, xml, xls, rtf]
* @return String
*/
public String getOutputType() {
return outputType;
}
/**
* Setzen der Ausgabedateitypen:Es können mehrere in semikolon getrennt angegeben werden:
* Gültige Typen sind: [pdf, html, xml, xls, rtf]
* @param outputType
*/
public void setOutputType(String outputType) {
this.outputType = outputType;
}
/**
* Jasper Report Dateiname auslesen.
* Die Jasper Report Dateiname ist die Vorlage, die parsiert wird.
* Die Extension ist jasper.
*
* @return String
*/
public String getReportFilename() {
return reportFilename;
}
/**
* Jasper Report Dateiname setzen.
* Die Jasper Report Dateiname ist die Vorlage, die parsiert wird.
* Die Extension ist jasper.
*
* @param reportFilename
*/
public void setReportFilename(String reportFilename) {
this.reportFilename = reportFilename;
}
/**
* SQL Dateiname auslesen. Beinhaltet eine SQL-Select-Statement.
*
* Wird dieser Parameter gesetzt dann wird den JasperReport
* die ResultSet der SQL-Select-Statement ohne Datenbankverbindung übergeben.
*
* @return String
*/
public String getQueryFilename() {
return queryFilename;
}
/**
* SQL Dateiname auslesen. Beinhaltet eine SQL-Select-Statement.
*
* Wird dieser Parameter gesetzt dann wird den JasperReport
* die ResultSet der SQL-Select-Statement ohne Datenbankverbindung übergeben.
*
* Ist dieser Parameter leer bzw. existiert nicht, dann wird dem JasperReport
* der Datenbankverbindung übergeben.
*
* @return queryFilename
*/
public void setQueryFilename(String queryFilename) {
this.queryFilename = queryFilename;
}
/**
* SQL Dateiname auslesen. Beinhaltet eine SQL-Select-Statement.
*
* Ist ein parameter_query_filename angegeben, so wird dieser hier in java ausgeführt und das
* Ergebis als Parameter den jasperreport mit der Datenbankverbindungen übergebenden
*
* @return String
*/
public String getParameterQueryFilename() {
return parameterQueryFilename;
}
/**
* SQL Dateiname setzen. Beinhaltet eine SQL-Select-Statement.
*
* Ist ein parameter_query_filename angegeben, so wird dieser hier in java ausgeführt und das
* Ergebis als Parameter den jasperreport mit der Datenbankverbindungen übergebenden
*
* @return String
*/
public void setParameterQueryFilename(String parameterQueryFilename) {
this.parameterQueryFilename = parameterQueryFilename;
}
/**
* Konfigurationsdatei der Datenbankverbindungen auslesen.
* Ist eine Angabe nicht vorhanden, dann wird der Scheduler Datenbanken
* übergeben.
*
* @return String
*/
public String getSettingsFilename() {
return settingsFilename;
}
/**
* Konfigurationsdatei der Datenbankverbindungen setzen.
* Ist eine Angabe nicht vorhanden, dann wird der Scheduler Datenbanken
* übergeben.
*
* @param settingsFilename The settingsFilename to set.
*/
public void setSettingsFilename(String settingsFilename) {
this.settingsFilename = settingsFilename;
}
/**
* Auslesen der Druckername.
* Wenn der Druckername eine prefix = "factory:" enthält, dann wird dieser
* über die Documentfactory ermittelt. Sonst wird über diesen Druckername gedruckt.
*
* @return String
*/
public String getPrinterName() {
return printerName;
}
/**
* Druckername setzen.
*
* Wenn der Druckername eine prefix = "factory:" enthält, dann wird dieser
* über die Documentfactory ermittelt. Sonst wird über diesen Druckername gedruckt.
* @param printerName
*/
public void setPrinterName(
String printerName) {
this.printerName = printerName;
}
/**
* E-Mail Adresse auslesen.
*
* Der Inhalt der Parameter "scheduler_order_report_mailto" ist die E-Mail-Adresse.
* Existiert ein Eintrag, dann wird versucht über diesen Adresse eine E-Mail zu versenden.
*
* @return String
*/
/*public String getEmailAddress() {
return emailAddress;
}*/
/**
* E-Mail Adresse setzen.
*
* Der Inhalt der Parameter "scheduler_order_report_mailto" ist die E-Mail-Adresse.
* Existiert ein Eintrag, dann wird versucht über diesen Adresse eine E-Mail zu versenden.
*
* @return String
*/
/*public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}*/
/**
* Name der Konfigurationsdatei für Datenbankverbindung, wenn Documentfactory printerName von einer
* anderen Datenbank ermittelt werden soll.
*
* Oder der Emailversand soll per Dokumentfactory laufen und diese Datenbank verwenden.
*
* @return String
*/
public String getFactorySettingsFile() {
return factorySettingsFile;
}
/**
* Setzen der Name der Konfigurationsdatei für Datenbankverbindung, wenn
* Documentfactory printerName / mail von einer anderen Datenbank ermittelt werden soll.
*
* @param factorySettingsFile
*/
public void setFactorySettingsFile(String factorySettingsFile) {
this.factorySettingsFile = factorySettingsFile;
}
/**
* Anzahl zu druckenden Exemplarer auslesen.
*
* @return int
*/
public int getPrinterCopies() {
return printerCopies;
}
/**
* Anzahl zu druckenden Exemplarer setzen.
*
* @param printerCopies
*/
public void setPrinterCopies(int printerCopies) {
this.printerCopies = printerCopies;
}
/**
* Auslesen eine oder mehrere eMail Adressen an, die den Report als blind carbon copy erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.
* @return String
*/
public String getMailBcc() {
return mailBcc;
}
/**
* Geben Sie hier eine oder mehrere eMail Adressen an, die den Report als blind carbon copy erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.
*/
public void setMailBcc(String mailBcc) {
this.mailBcc = mailBcc;
}
/**
* <p>
* Mit diesem Parameter kann das Layout des Reports im HTML-Format oder als plain text angegeben
* werden. Zur Bestimmen des Layouts wird dem Parameter folgender Prefix zugeordnet:
*
* <ul>
* <li> factory:</li>
* <li> factory_file:</li>
* <li> plain:</li>
* <li> plain_file:</li>
* </ul>
*
* Innerhalb des Layouts können folgende Platzhalter verwendet werden, die jeweils mit [
* und ] geklammert werden, z.B. in der Form [date]:
* </p>
* <ul>
* <li>[date] - aktuelles Datum</li>
* <li>[datetime] - aktuelles Datum und Uhrzeit</li>
* <li>[orderid] - ID des Auftrags</li>
* <li>[jobname] - Name des Jobs</li>
* <li>[taskid] - ID der Task</li>
* <li>[sql] - SQL-Query, aus der der Report erstellt wurde</li>
* <li>
* [xml] - aus dem Ergebnis der Abfrage generiertes xml vor der
* Transformation
* </li>
* </ul>
*
* @return String
*/
public String getMailBody() {
return mailBody;
}
/**
* <p>
* Mit diesem Parameter kann das Layout des Reports im HTML-Format oder als plain text angegeben
* werden. Zur Bestimmen des Layouts wird dem Parameter folgender Prefix zugeordnet:
*
* <ul>
* <li> factory:</li>
* <li> factory_file:</li>
* <li> plain:</li>
* <li> plain_file:</li>
* </ul>
*
* Innerhalb des Layouts können folgende Platzhalter verwendet werden, die jeweils mit [
* und ] geklammert werden, z.B. in der Form [date]:
* </p>
* <ul>
* <li>[date] - aktuelles Datum</li>
* <li>[datetime] - aktuelles Datum und Uhrzeit</li>
* <li>[orderid] - ID des Auftrags</li>
* <li>[jobname] - Name des Jobs</li>
* <li>[taskid] - ID der Task</li>
* <li>[sql] - SQL-Query, aus der der Report erstellt wurde</li>
* <li>
* [xml] - aus dem Ergebnis der Abfrage generiertes xml vor der
* Transformation
* </li>
* </ul>
*
* @param String
*/
public void setMailBody(String mailBody) {
this.mailBody = mailBody;
}
/** Geben Sie hier eine oder mehrere eMail Adressen an, die den Report als carbon copy erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.
* @return String
* */
public String getMailCc() {
return mailCc;
}
/** Geben Sie hier eine oder mehrere eMail Adressen an, die den Report als carbon copy erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.
* @param mailCc - String
* */
public void setMailCc(String mailCc) {
this.mailCc = mailCc;
}
/** Der Inhalt des Parameters wird als Betreff der eMail des
* Reports verwendet und muss ausgefüllt sein, wenn Reports per
* eMail versendet werden.
* Zur Bestimmen des Layouts wird dem Parameter folgender Prefix zugeordnet:
*
* <ul>
* <li> factory:</li>
* <li> factory_file:</li>
* <li> plain:</li>
* <li> plain_file:</li>
* </ul>
* <p>
* Es können folgende Platzhalter verwendet werden, die durch [
* und] geklammert werden, z.B. in der Form [date]:
* </p>
* <ul>
* <li>[date] - aktuelles Datum</li>
* <li>[datetime] - aktuelles Datum und Uhrzeit</li>
* <li>[orderid] - ID des Auftrags</li>
* <li>[jobname] - Name des Jobs</li>
* <li>[taskid] - ID der Task</li>
*</ul>
*
*@return String
*/
public String getMailSubject() {
return mailSubject;
}
/** Der Inhalt des Parameters wird als Betreff der eMail des
* Reports verwendet und muss ausgefüllt sein, wenn Reports per
* eMail versendet werden.
* Zur Bestimmen des Layouts wird dem Parameter folgender Prefix zugeordnet:
*
* <ul>
* <li> factory:</li>
* <li> factory_file:</li>
* <li> plain:</li>
* <li> plain_file:</li>
* </ul>
* <p>
* Es können folgende Platzhalter verwendet werden, die durch [
* und] geklammert werden, z.B. in der Form [date]:
* </p>
* <ul>
* <li>[date] - aktuelles Datum</li>
* <li>[datetime] - aktuelles Datum und Uhrzeit</li>
* <li>[orderid] - ID des Auftrags</li>
* <li>[jobname] - Name des Jobs</li>
* <li>[taskid] - ID der Task</li>
*</ul>
*
*@param String
*/
public void setMailSubject(String mailsubject) {
this.mailSubject = mailsubject;
}
/** Auslesen eine oder mehrere eMail Adressen an, die den Report erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.<br/>
* Ist diese Einstellung leer, dann werden Reports nicht per eMail versendet.
* @return String
* */
public String getMailTo() {
return mailTo;
}
/**
* Geben Sie hier eine oder mehrere eMail Adressen an, die den Report erhalten.
* Mehrere eMail Adressen werden durch Komma getrennt.<br/>
* Ist diese Einstellung leer, dann werden Reports nicht per eMail versendet.
* @return mailTo - String*/
public void setMailTo(String mailTo) {
this.mailTo = mailTo;
}
/** Ist eine mail_it Parameter angegeben bzw auf true gesetzt, dann wird mit
* der Scheduler Mail Funktion emails versendet. Es wird überprüft, ob zusätzlich
* die Parameter "mail_to", "mail_cc", "mail_bcc", "mail_subject" und "mail_body" angegeben
* sind. Wenn ja, dann werden zu diesen Adressanten mit den Betreff und body emails versendet.
* Wenn diese Parametern nicht existieren, dann werden die Empfänger aus den Einstellungen
* des Schedulers (factory.ini) genommen.
*
* @return boolean
* */
public boolean isMailIt() {
return mailIt;
}
/** Ist eine mail_it Parameter angegeben bzw auf true gesetzt, dann wird mit
* der Scheduler Mail Funktion emails versendet. Es wird überprüft, ob zusätzlich
* die Parameter "mail_to", "mail_cc", "mail_bcc", "mail_subject" und "mail_body" angegeben
* sind. Wenn ja, dann werden zu diesen Adressanten mit den Betreff und body emails versendet.
* Wenn diese Parametern nicht existieren, dann werden die Empfänger aus den Einstellungen
* des Schedulers (factory.ini) genommen.
* @param boolean
* */
public void setMailIt(boolean mailIt) {
this.mailIt = mailIt;
}
/**
* Datenbankverbindung holen, wenn Documentfactory printerName von einer anderen Datenbank
* ermittelt werden soll.
*
* @return sos.connection.SOSConnection
* @throws Exception
*/
private SOSConnection getFactoryConnection() throws Exception {
SOSConnection factoryConnection = null;
try {
this.getLogger().debug5("DB Connecting.. .");
factoryConnection = SOSConnection.createInstance(
this.getFactorySettingsFile(), this.getLogger());
factoryConnection.connect();
getLogger().debug5("DB Connected");
return factoryConnection;
} catch (Exception e) {
throw new Exception("\n -> ..error occurred in "
+ SOSClassUtil.getMethodName() + ": " + e);
}
}
/**
* Ermittelt den Druckername.
* Entweder der Druckername ist direkt angegeben oder
* es wird über die Druckerid über die Tabelle Dokumentfactory.LF_PPRINTERS ermittelt, wenn der .
*
* @throws Exception
*/
private String getPrinter() throws Exception {
SOSConnection facConn = null;
String printName = "";
String prefix = "";
try {
if (this.getPrinterName().toUpperCase().startsWith("factory:")) {
prefix = "factory";
printName = getPrinterName().substring("factory:".length());
} else {
printName = getPrinterName();
}
if(sosString.parseToString(prefix).length() == 0 ){
//druckername ist direkt angegeben
printName = this.getPrinterName();
} else {
//druckername über die Tabelle Dokumentfactory.LF_PPRINTERS ermittelt.
if (sosString.parseToString(getFactorySettingsFile()).length() > 0 ) {
facConn = getFactoryConnection();
} else {
facConn = this.getConnection();
}
printName = DocumentFactoryClass.getActiveFactoryPrinter(facConn, printName );
}
spooler_log.debug4("..gedruckt wird auf der Drucker: " + printName);
return printName;
} catch (Exception e) {
throw new Exception ("..error in " + SOSClassUtil.getClassName() + ": " + e);
} finally {
if (facConn != null) {
facConn.rollback();
facConn.disconnect();
}
}
}
/**
* Email versenden.
*
* 1. mail_it funktion. Ist eine mail_it Parameter angegeben bzw auf true gesetzt, dann wird mit
* der Scheduler Mail Funktion emails versendet. Es wird überprüft, ob zusätzlich
* die Parameter "mail_to", "mail_cc", "mail_bcc", "mail_subject" und "mail_body" angegeben
* sind. Wenn ja, dann werden zu diesen Adressanten emails versendet.
* Wenn diese Parametern nicht existieren, dann werden die Empfänger aus den Einstellungen
* des Schedulers (factory.ini) genommen.
*
* Ist der Jobparameter mail_it nicht
* vorhanden bzw. als false gesetzt, dann wird der email mit Hilfe der Klasse SOSMailOrder versendet.
* Die Voraussetzung zum email versenden mit der Klasse SOSMailOrder ist <br/><br/>
* 1. Datenbankverbindung ( entweder die Datenbankverbindung des Schedulers oder die Datenbankverbindung des Factorys
* Siehe Parameter factory_settings_file)
* 2. das Existieren der Tabelle "SETTINGS"
* 3. Einträge zum email versenden in der Tabelle "SETTINGS"
* Die Empfänger und der Subject und Body werden aus der Jobparameter ausgelesen.
*
* @param stateText
* @throws Exception
*/
private String sendEmail(String stateText) throws Exception {
SOSSchedulerLogger sosLogger = null;
SOSConnection currConn = null;
String currSubject = "";
String currBody = "";
try {
sosLogger = new SOSSchedulerLogger(this.spooler_log);
//mail_it Lösung
if (isMailIt()){
sosLogger.debug("..email sending with mail_it Parameter.");
//email erzwingen. Einstellungen wie sender/empfänder siehe factory.ini
// Sollen attachment mitversendet werden?
if (!getSuspendAttachment()) {
for(int i = 0; i < listOfOutputFilename.size(); i++) {
this.spooler_log.mail().add_file(sosString.parseToString(listOfOutputFilename.get(i)));
}
}
if(sosString.parseToString(getMailSubject()).length() > 0) {
currSubject = this.maskFilename(getMailSubject());
spooler_log.mail().set_subject(currSubject);
sosLogger.debug("..email subject: " + currSubject );
} else {
spooler_log.mail().set_subject("JasperReports: report delivery");
}
if(sosString.parseToString(getMailBody()).length() > 0) {
currBody = this.maskFilename(getMailBody());
spooler_log.mail().set_body(currBody );
sosLogger.debug("..email body: " + currBody );
} else {
spooler_log.mail().set_body(stateText);
}
if(sosString.parseToString(getMailTo()).length() > 0) {
spooler_log.mail().set_to(getMailTo());
sosLogger.debug("..email send to: " + getMailTo());
}
if(sosString.parseToString(getMailCc()).length() > 0) {
spooler_log.mail().set_to(getMailCc());
sosLogger.debug("..email CC send to: " + getMailCc());
}
if(sosString.parseToString(getMailBcc()).length() > 0) {
spooler_log.mail().set_to(getMailBcc());
sosLogger.debug("..email BCC send to: " + getMailBcc());
}
spooler_log.set_mail_it(true);
sosLogger.debug("..email successfully send with mail_it Paramater. ");
return stateText + "..email successfully send. ";
}
//ende mail_it Lösung
//keine emails zum versenden vorhanden
if ((sosString.parseToString(getMailTo()).length() == 0) &&
(sosString.parseToString(getMailCc()).length() == 0 ) &&
(sosString.parseToString(getMailBcc()).length() == 0 )
) {
sosLogger.debug("..there is no Recipient to send email.");
return "";
}
SOSConnectionSettings sett = null;
SOSMailOrder mailOrder = null;
try {
if (sosString.parseToString(getFactorySettingsFile()).length() > 0) {
sosLogger.debug9(".. get new Connection from " + this.getFactorySettingsFile());
currConn = getFactoryConnection();
} else {
currConn = getConnection();
}
sett = new SOSConnectionSettings(currConn , "SETTINGS", sosLogger);
//Überprüfen, ob die Tabelle Settings vorhanden ist bzw. Einträge hat.
//java.util.Properties entries = sett.getSection("email", "mail_server");
String val = currConn.getSingleValue("SELECT \"NAME\" FROM SETTINGS WHERE \"APPLICATION\" = 'email' AND \"SECTION\" = 'mail_server' AND \"SECTION\" <> \"NAME\"");
if (sosString.parseToString(val).length() > 0) {
mailOrder = new SOSMailOrder(sett, currConn);
} else {
//mailOrder = new SOSMailOrder(spooler_log.mail().smtp(), this.getConnection());
sosLogger.warn("..error could not get application [email] and [mail_server] from SETTINGS " );
throw new Exception("..error could not get application [email] and [mail_server] from SETTINGS ");
}
} catch (Exception e) {
sosLogger.warn("..error could not get application [email] and [mail_server] from SETTINGS " + e.toString() );
throw new Exception("..error could not get application [email] and [mail_server] from SETTINGS " + e.toString() );
//mailOrder = new SOSMailOrder(spooler_log.mail().smtp(), this.getConnection());
}
mailOrder.setSOSLogger(sosLogger);
//subject
if (sosString.parseToString(this.getMailSubject()).length() > 0) {
currSubject = this.maskFilename(getMailSubject());
sosLogger.debug("Mail subject: " + currSubject);
if (getMailSubject().startsWith("factory:")) {
mailOrder.setSubjectTemplateType(SOSMailOrder.TEMPLATE_TYPE_FACTORY);
mailOrder.setSubjectTemplate(currSubject.substring("factory:".length()));
} else if(getMailSubject().startsWith("factory_file:")) {
mailOrder.setSubjectTemplateType(SOSMailOrder.TEMPLATE_TYPE_FACTORY_FILE);
mailOrder.setSubjectTemplate(currSubject.substring("factory_file:".length()));
} else if(getMailSubject().startsWith("plain:")) {
mailOrder.setSubjectTemplateType(SOSMailOrder.TEMPLATE_TYPE_PLAIN);
mailOrder.setSubjectTemplate(currSubject.substring("plain:".length()));
} else if(getMailSubject().startsWith("plain_file:")) {
mailOrder.setSubjectTemplateType(SOSMailOrder.TEMPLATE_TYPE_PLAIN_FILE);
mailOrder.setSubjectTemplate(currSubject.substring("plain_file:".length()));
} else {
//mailOrder.setFrom(spooler_log.mail().from());
mailOrder.setSOSLogger(sosLogger);
mailOrder.setSubject(currSubject);
}
}
if (sosString.parseToString(this.getMailBody()).length() > 0) {
currBody = this.maskFilename(getMailBody());
sosLogger.debug("Mail body: " + currBody);
if (getMailBody().startsWith("factory:")) {
mailOrder.setBodyTemplateType(SOSMailOrder.TEMPLATE_TYPE_FACTORY);
mailOrder.setBodyTemplate(currBody.substring("factory:".length()));
} else if(getMailBody().startsWith("factory_file:")) {
mailOrder.setBodyTemplateType(SOSMailOrder.TEMPLATE_TYPE_FACTORY_FILE);
mailOrder.setBodyTemplate(currBody.substring("factory_file:".length()));
} else if(getMailBody().startsWith("plain:")) {
mailOrder.setBodyTemplateType(SOSMailOrder.TEMPLATE_TYPE_PLAIN);
mailOrder.setBodyTemplate(currBody.substring("plain:".length()));
} else if(getMailBody().startsWith("plain_file:")) {
mailOrder.setBodyTemplateType(SOSMailOrder.TEMPLATE_TYPE_PLAIN_FILE);
mailOrder.setBodyTemplate(currBody.substring("plain_file:".length()));
} else {
mailOrder.setSOSLogger(sosLogger);
mailOrder.setBody(currBody);
}
}
mailOrder.addRecipient(this.getMailTo());
if (sosString.parseToString(getMailBcc()).length() > 0)
mailOrder.addBCC(this.getMailBcc());
if (sosString.parseToString(getMailCc()).length() > 0)
mailOrder.addCC(this.getMailCc());
//Sollen attachment mitversendet werden?
if (!getSuspendAttachment()) {
for(int i = 0; i < listOfOutputFilename.size(); i++) {
mailOrder.addAttachment(sosString.parseToString(listOfOutputFilename.get(i)));
}
}
sosLogger.debug("..replacement job_name = " + this.spooler_task.job().name());
mailOrder.addReplacement("job_name", this.spooler_task.job().name());
sosLogger.debug("..replacement job_title = " + this.spooler_task.job().title());
mailOrder.addReplacement("job_title", this.spooler_task.job().title());
sosLogger.debug("..replacement state_text = " + stateText);
mailOrder.addReplacement("state_text", stateText);
mailOrder.send();
spooler_log.debug("..email successfully send. ");
return stateText + "..email successfully send. ";
} catch (Exception e) {
throw new Exception ("..error in " + SOSClassUtil.getClassName() + ": " + e);
} finally {
if (sosString.parseToString(getFactorySettingsFile()).length() > 0) {
if (currConn != null) {
currConn.rollback();
currConn.disconnect();
}
}
}
}
/**
* get job parameters from job configuration (scheduler.xml)
*/
protected void getJobParameters() throws Exception {
try { // to fetch default job parameters
if (sosString.parseToString(spooler_task.params().var("settings_filename")).length() > 0) {
this.setSettingsFilename(spooler_task.params().var("settings_filename"));
spooler_log.debug1(".. job parameter [settings_filename]: " + this.getSettingsFilename());
}
if (sosString.parseToString(spooler_task.params().var("report_filename")).length() > 0) {
this.setReportFilename(spooler_task.params().var("report_filename"));
spooler_log.debug1(".. job parameter [report_filename]: " + this.getReportFilename());
}
if (sosString.parseToString(spooler_task.params().var("query_filename")).length() > 0) {
this.setQueryFilename(spooler_task.params().var("query_filename"));
spooler_log.debug1(".. job parameter [query_filename]: " + this.getQueryFilename());
}
if (sosString.parseToString(spooler_task.params().var("query_statement")).length() > 0) {
this.setQueryStatement(spooler_task.params().var("query_statement"));
spooler_log.debug1(".. job parameter [query_statement]: " + this.getQueryStatement());
}
if (sosString.parseToString(spooler_task.params().var("output_type")).length() > 0) {
this.setOutputType(spooler_task.params().var("output_type"));
spooler_log.debug1(".. job parameter [output_type]: " + this.getOutputType());
}
if (sosString.parseToString(spooler_task.params().var("output_filename")).length() > 0) {
this.setOutputFilename(spooler_task.params().var("output_filename"));
spooler_log.debug1(".. job parameter [output_filename]: " + this.getOutputFilename());
}
/*if (spooler_task.params().var("scheduler_order_report_mailto") != null && spooler_task.params().var("scheduler_order_report_mailto").length() > 0) {
this.setEmailAddress(spooler_task.params().var("scheduler_order_report_mailto"));
spooler_log.debug1(".. job parameter [scheduler_order_report_mailto]: " + this.getEmailAddress());
}*/
if (sosString.parseToString(spooler_task.params().var("printer_name")).length() > 0) {
this.setPrinterName(spooler_task.params().var("printer_name"));
spooler_log.debug1(".. job parameter [printer_name]: " + this.getPrinterName());
}
if (sosString.parseToString(spooler_task.params().var("factory_settings_file")).length() > 0) {
this.setFactorySettingsFile(spooler_task.params().var("factory_settings_file"));
spooler_log.debug1(".. job parameter [factory_settings_file]: " + this.getFactorySettingsFile());
}
if (sosString.parseToString(spooler_task.params().var("mail_it")).length() > 0) {
this.setMailIt(sosString.parseToBoolean((spooler_task.params().var("mail_it"))));
spooler_log.debug1(".. job parameter [mail_it]: " + this.isMailIt());
}
if (sosString.parseToString(spooler_task.params().var("parameter_query_filename")).length() > 0) {
this.parameterQueryFilename = sosString.parseToString((spooler_task.params().var("parameter_query_filename")));
spooler_log.debug1(".. job parameter [parameter_query_filename]: " + parameterQueryFilename);
}
if (sosString.parseToString(spooler_task.params().var("printer_copies")).length() > 0) {
String pc = sosString.parseToString((spooler_task.params().var("printer_copies")));
if (pc.equals("0")) {
spooler_log.warn(".. job parameter [printer_copies] is 0 not in range 1..2147483647 ");
throw new Exception(".. job parameter [printer_copies] is 0 not in range 1..2147483647 ");
}
//überprüfen, ob der Parameter printer_copies ziffern ist
char c[] = pc.toCharArray();
for (int i = 0; i < c.length; i++) {
if (!(Character.isDigit(c[i]))) {
spooler_log.warn(".. job parameter [printer_copies] is not digit: " + pc);
throw new Exception(".. job parameter [printer_copies] is not digit: " + pc);
}
}
this.printerCopies = Integer.parseInt(pc);
spooler_log.debug1(".. job parameter [printer_copies]: " + printerCopies);
}
if (sosString.parseToString(spooler_task.params().var("mail_to")).length() > 0) {
this.setMailTo(sosString.parseToString((spooler_task.params().var("mail_to"))));
spooler_log.debug1(".. job parameter [mail_to]: " + this.getMailTo());
}
if (sosString.parseToString(spooler_task.params().var("mail_cc")).length() > 0) {
this.setMailCc(sosString.parseToString((spooler_task.params().var("mail_cc"))));
spooler_log.debug1(".. job parameter [mail_cc]: " + this.getMailCc());
}
if (sosString.parseToString(spooler_task.params().var("mail_bcc")).length() > 0) {
this.setMailBcc(sosString.parseToString((spooler_task.params().var("mail_bcc"))));
spooler_log.debug1(".. job parameter [mail_bcc]: " + this.getMailBcc());
}
if (sosString.parseToString(spooler_task.params().var("mail_subject")).length() > 0) {
this.setMailSubject(sosString.parseToString((spooler_task.params().var("mail_subject"))));
spooler_log.debug1(".. job parameter [mail_subject]: " + this.getMailSubject());
}
if (sosString.parseToString(spooler_task.params().var("mail_body")).length() > 0) {
this.setMailBody(sosString.parseToString((spooler_task.params().var("mail_body"))));
spooler_log.debug1(".. job parameter [mail_body]: " + this.getMailBody());
}
if (sosString.parseToString(spooler_task.params().var("suspend_attachment")).length() > 0) {
this.setSuspendAttachment(sosString.parseToBoolean((spooler_task.params().var("suspend_attachment"))));
spooler_log.debug1(".. job parameter [suspend_attachment]: " + this.getSuspendAttachment());
}
//Löscht zuerst das alte Bericht, bevor eine neue erstellt wird
if (sosString.parseToString(spooler_task.params().var("delete_old_output_file")).length() > 0) {
this.setDeleteOldFilename(sosString.parseToBoolean((spooler_task.params().var("delete_old_output_file"))));
spooler_log.debug1(".. job parameter [delete_old_output_file]: " + this.isDeleteOldFilename());
}
} catch (Exception e) {
throw new Exception("..error occurred processing job parameters: " + e.getMessage());
}
}
/**
* to fetch parameters from orders that have precedence to job parameters
* @throws Exception
*/
private void getOrderParameters() throws Exception {
try {
if (spooler_task.job().order_queue() != null) {
order = spooler_task.order();
//order = createOrderPayload(order);
// create order payload and xml payload from web service request
if (order.web_service_operation_or_null() != null) {
SOSXMLXPath xpath = null;
Web_service_request request = order.web_service_operation().request();
// should the request be previously transformed ...
if (order.web_service().params().var("request_stylesheet") != null && order.web_service().params().var("request_stylesheet").length() > 0) {
Xslt_stylesheet stylesheet = spooler.create_xslt_stylesheet();
stylesheet.load_file(order.web_service().params().var("request_stylesheet"));
String xml_document = stylesheet.apply_xml(request.string_content());
spooler_log.debug3("content of request:\n" + request.string_content());
spooler_log.debug3("content of request transformation:\n" + xml_document);
xpath = new sos.xml.SOSXMLXPath(new java.lang.StringBuffer(xml_document));
// add order parameters from transformed request
Variable_set params = spooler.create_variable_set();
if (xpath.selectSingleNodeValue("//param[@name[.='settings_filename']]/@value") != null) {
params.set_var("settings_filename", xpath.selectSingleNodeValue("//param[@name[.='settings_filename']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='report_filename']]/@value") != null) {
params.set_var("report_filename", xpath.selectSingleNodeValue("//param[@name[.='report_filename']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='query_filename']]/@value") != null) {
params.set_var("query_filename", xpath.selectSingleNodeValue("//param[@name[.='query_filename']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='query_statement']]/@value") != null) {
params.set_var("query_statement", xpath.selectSingleNodeValue("//param[@name[.='query_statement']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='output_type']]/@value") != null) {
params.set_var("output_type", xpath.selectSingleNodeValue("//param[@name[.='output_type']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='output_filename']]/@value") != null) {
params.set_var("output_filename", xpath.selectSingleNodeValue("//param[@name[.='output_filename']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='scheduler_order_report_mailto']]/@value") != null) {
params.set_var("scheduler_order_report_mailto", xpath.selectSingleNodeValue("//param[@name[.='scheduler_order_report_mailto']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='scheduler_order_report_printer_id']]/@value") != null) {
params.set_var("scheduler_order_report_printer_id", xpath.selectSingleNodeValue("//param[@name[.='scheduler_order_report_printer_id']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='printer_name']]/@value") != null) {
params.set_var("printer_name", xpath.selectSingleNodeValue("//param[@name[.='printer_name']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='factory_settings_file']]/@value") != null) {
params.set_var("factory_settings_file", xpath.selectSingleNodeValue("//param[@name[.='factory_settings_file']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='parameter_query_filename']]/@value") != null) {
params.set_var("parameter_query_filename", xpath.selectSingleNodeValue("//param[@name[.='parameter_query_filename']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='printer_copies']]/@value") != null) {
params.set_var("printer_copies", xpath.selectSingleNodeValue("//param[@name[.='printer_copies']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='mail_it']]/@value") != null) {
params.set_var("mail_it", xpath.selectSingleNodeValue("//param[@name[.='mail_it']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='mail_to']]/@value") != null) {
params.set_var("mail_to", xpath.selectSingleNodeValue("//param[@name[.='mail_to']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='mail_cc']]/@value") != null) {
params.set_var("mail_cc", xpath.selectSingleNodeValue("//param[@name[.='mail_cc']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='mail_bcc']]/@value") != null) {
params.set_var("mail_bcc", xpath.selectSingleNodeValue("//param[@name[.='mail_bcc']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='mail_subject']]/@value") != null) {
params.set_var("mail_subject", xpath.selectSingleNodeValue("//param[@name[.='mail_subject']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='mail_body']]/@value") != null) {
params.set_var("mail_body", xpath.selectSingleNodeValue("//param[@name[.='mail_body']]/@value"));
}
if (xpath.selectSingleNodeValue("//param[@name[.='suspend_attachment']]/@value") != null) {
params.set_var("suspend_attachment", xpath.selectSingleNodeValue("//param[@name[.='suspend_attachment']]/@value"));
}
// Löscht zuerst das alte Bericht, bevor eine neue erstellt wird
if (xpath.selectSingleNodeValue("//param[@name[.='delete_old_output_file']]/@value") != null) {
params.set_var("delete_old_output_file", xpath.selectSingleNodeValue("//param[@name[.='delete_old_output_file']]/@value"));
}
order.set_payload(params);
} else {
xpath = new sos.xml.SOSXMLXPath(new java.lang.StringBuffer(request.string_content()));
// add order parameters from request
Variable_set params = spooler.create_variable_set();
if (xpath.selectSingleNodeValue("//param[name[text()='settings_filename']]/value") != null) {
params.set_var("settings_filename", xpath.selectSingleNodeValue("//param[name[text()='settings_filename']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='report_filename']]/value") != null) {
params.set_var("report_filename", xpath.selectSingleNodeValue("//param[name[text()='report_filename']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='query_filename']]/value") != null) {
params.set_var("query_filename", xpath.selectSingleNodeValue("//param[name[text()='query_filename']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='query_statement']]/value") != null) {
params.set_var("query_statement", xpath.selectSingleNodeValue("//param[name[text()='query_statement']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='output_type']]/value") != null) {
params.set_var("output_filename", xpath.selectSingleNodeValue("//param[name[text()='output_type']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='output_filename']]/value") != null) {
params.set_var("output_filename", xpath.selectSingleNodeValue("//param[name[text()='output_filename']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='scheduler_order_report_mailto']]/value") != null) {
params.set_var("scheduler_order_report_mailto", xpath.selectSingleNodeValue("//param[name[text()='scheduler_order_report_mailto']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='scheduler_order_report_printer_id']]/value") != null) {
params.set_var("scheduler_order_report_printer_id", xpath.selectSingleNodeValue("//param[name[text()='scheduler_order_report_printer_id']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='printer_name']]/value") != null) {
params.set_var("printer_name", xpath.selectSingleNodeValue("//param[name[text()='printer_name']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='factory_settings_file']]/value") != null) {
params.set_var("factory_settings_file", xpath.selectSingleNodeValue("//param[name[text()='factory_settings_file']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='parameter_query_filename']]/value") != null) {
params.set_var("parameter_query_filename", xpath.selectSingleNodeValue("//param[name[text()='parameter_query_filename']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='printer_copies']]/value") != null) {
params.set_var("printer_copies", xpath.selectSingleNodeValue("//param[name[text()='printer_copies']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='mail_it']]/value") != null) {
params.set_var("mail_it", xpath.selectSingleNodeValue("//param[name[text()='mail_it']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='mail_to']]/value") != null) {
params.set_var("mail_to", xpath.selectSingleNodeValue("//param[name[text()='mail_to']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='mail_cc']]/value") != null) {
params.set_var("mail_cc", xpath.selectSingleNodeValue("//param[name[text()='mail_cc']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='mail_bcc']]/value") != null) {
params.set_var("mail_bcc", xpath.selectSingleNodeValue("//param[name[text()='mail_bcc']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='mail_subject']]/value") != null) {
params.set_var("mail_subject", xpath.selectSingleNodeValue("//param[name[text()='mail_subject']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='mail_body']]/value") != null) {
params.set_var("mail_body", xpath.selectSingleNodeValue("//param[name[text()='mail_body']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='suspend_attachment']]/value") != null) {
params.set_var("suspend_attachment", xpath.selectSingleNodeValue("//param[name[text()='suspend_attachment']]/value"));
}
if (xpath.selectSingleNodeValue("//param[name[text()='delete_old_output_file']]/value") != null) {
params.set_var("delete_old_output_file", xpath.selectSingleNodeValue("//param[name[text()='delete_old_output_file']]/value"));
}
order.set_payload(params);
}
}
orderData = (Variable_set) order.payload();
if ( orderData != null && orderData.var("settings_filename") != null && orderData.var("settings_filename").toString().length() > 0) {
this.setSettingsFilename(orderData.var("settings_filename").toString());
spooler_log.debug1(".. order parameter [settings_filename]: " + this.getSettingsFilename());
}
if ( orderData != null && orderData.var("report_filename") != null && orderData.var("report_filename").toString().length() > 0) {
this.setReportFilename(orderData.var("report_filename").toString());
spooler_log.debug1(".. order parameter [report_filename]: " + this.getReportFilename());
}
if ( orderData != null && orderData.var("query_filename") != null && orderData.var("query_filename").toString().length() > 0) {
this.setQueryFilename(orderData.var("query_filename").toString());
spooler_log.debug1(".. order parameter [query_filename]: " + this.getQueryFilename());
}
if ( orderData != null && orderData.var("query_statement") != null && orderData.var("query_statement").toString().length() > 0) {
this.setQueryStatement(orderData.var("query_statement").toString());
spooler_log.debug1(".. order parameter [query_statement]: " + this.getQueryStatement());
}
if ( orderData != null && orderData.var("output_type") != null && orderData.var("output_type").toString().length() > 0) {
this.setOutputType(orderData.var("output_type").toString());
spooler_log.debug1(".. order parameter [output_type]: " + this.getOutputType());
}
if ( orderData != null && orderData.var("output_filename") != null && orderData.var("output_filename").toString().length() > 0) {
this.setOutputFilename(orderData.var("output_filename").toString());
spooler_log.debug1(".. order parameter [output_filename]: " + this.getOutputFilename());
}
/*if ( orderData != null && orderData.var("scheduler_order_report_mailto") != null && orderData.var("scheduler_order_report_mailto").toString().length() > 0) {
this.setEmailAddress(orderData.var("scheduler_order_report_mailto").toString());
spooler_log.debug1(".. order parameter [scheduler_order_report_mailto]: " + this.getEmailAddress());
}*/
if ( orderData != null && orderData.var("printer_name") != null && orderData.var("printer_name").toString().length() > 0) {
this.setPrinterName(orderData.var("printer_name").toString());
spooler_log.debug1(".. order parameter [printer_name]: " + this.getPrinterName());
}
if ( orderData != null && orderData.var("factory_settings_file") != null && orderData.var("factory_settings_file").toString().length() > 0) {
this.setFactorySettingsFile(orderData.var("factory_settings_file").toString());
spooler_log.debug1(".. order parameter [factory_settings_file]: " + this.getFactorySettingsFile());
}
if ( orderData != null && orderData.var("parameter_query_filename") != null && orderData.var("parameter_query_filename").toString().length() > 0) {
this.parameterQueryFilename = this.sosString.parseToString((orderData.var("parameter_query_filename")));
spooler_log.debug1(".. order parameter [parameter_query_filename]: " + parameterQueryFilename);
}
if ( orderData != null && orderData.var("printer_copies") != null && orderData.var("printer_copies").toString().length() > 0) {
this.setPrinterCopies(Integer.parseInt(this.sosString.parseToString((orderData.var("printer_copies")))));
spooler_log.debug1(".. order parameter [printer_copies]: " + this.getPrinterCopies());
}
if ( orderData != null && sosString.parseToString(orderData.var("mail_it")).length() > 0) {
this.setMailIt(sosString.parseToBoolean((orderData.var("mail_it"))));
spooler_log.debug1(".. order parameter [mail_it]: " + this.isMailIt());
}
if ( orderData != null && sosString.parseToString(orderData.var("mail_to")).length() > 0) {
this.setMailTo(sosString.parseToString((orderData.var("mail_to"))));
spooler_log.debug1(".. order parameter [mail_to]: " + this.getMailTo());
}
if ( orderData != null && sosString.parseToString(orderData.var("mail_cc")).length() > 0) {
this.setMailCc(sosString.parseToString((orderData.var("mail_cc"))));
spooler_log.debug1(".. order parameter [mail_cc]: " + this.getMailCc());
}
if ( orderData != null && sosString.parseToString(orderData.var("mail_bcc")).length() > 0) {
this.setMailBcc(sosString.parseToString((orderData.var("mail_bcc"))));
spooler_log.debug1(".. order parameter [mail_bcc]: " + this.getMailBcc());
}
if ( orderData != null && sosString.parseToString(orderData.var("mail_subject")).length() > 0) {
this.setMailSubject(sosString.parseToString((orderData.var("mail_subject"))));
spooler_log.debug1(".. order parameter [mail_subject]: " + this.getMailSubject());
}
if ( orderData != null && sosString.parseToString(orderData.var("mail_body")).length() > 0) {
this.setMailBody(sosString.parseToString((orderData.var("mail_body"))));
spooler_log.debug1(".. order parameter [mail_body]: " + this.getMailBody());
}
if ( orderData != null && sosString.parseToString(orderData.var("suspend_attachment")).length() > 0) {
this.setSuspendAttachment(sosString.parseToBoolean((orderData.var("suspend_attachment"))));
spooler_log.debug1(".. order parameter [suspend_attachment]: " + this.getSuspendAttachment());
}
if ( orderData != null && sosString.parseToString(orderData.var("delete_old_output_file")).length() > 0) {
this.setDeleteOldFilename(sosString.parseToBoolean((orderData.var("delete_old_output_file"))));
spooler_log.debug1(".. order parameter [delete_old_output_file]: " + this.isDeleteOldFilename());
}
}
} catch (Exception e) {
throw new Exception("error occurred processing parameters: " + e.toString());
}
}
/**
* Angabe der Pflichtfelder/-parameter überprüfen.
*
* @throws Exception
*/
private void checkParams() throws Exception {
try {
if (this.getReportFilename() == null || this.getReportFilename().length() == 0)
throw new Exception("no report filename was given");
if (this.getOutputType() == null || this.getOutputType().length() == 0)
throw new Exception("no output type [pdf, html, xml, xls, rtf] was given");
if (!isValidOutputType()) {
throw new Exception("unsupported output type [pdf, htm, xml, xls, rtf]: " + this.getOutputType());
}
if (sosString.parseToString(this.queryFilename).length() > 0 &&
sosString.parseToString(this.queryStatement).length() > 0 ) {
throw new Exception("to many parameter [query_filename] and [query_statement]" );
}
} catch (Exception e) {
throw new Exception("error occurred checking parameters: " + e.toString());
}
}
public String getQueryStatement() {
return queryStatement;
}
public void setQueryStatement(String queryStatement) {
this.queryStatement = queryStatement;
}
public boolean getSuspendAttachment() {
return suspendAttachment;
}
public void setSuspendAttachment(boolean suspendAttachment) {
this.suspendAttachment = suspendAttachment;
}
/**
* neu initialisieren der Variablen
* @throws Exception
*/
private void init() throws Exception {
try {
settingsFilename = "";
reportFilename = "";
queryFilename = "";
outputType = "pdf";
outputFilename = "";
printerName = "";
factorySettingsFile = "";
sosString = new SOSString();
filledReportFile = null;
listOfOutputFilename = null;
parameterQueryFilename = "";
order = null;
orderData = null;
printerCopies = 1;
mailIt = false;
mailTo = "";
mailCc = "";
mailBcc = "";
mailSubject = "";
mailBody = "";
queryStatement = "";
suspendAttachment = false;
} catch (Exception e) {
throw new Exception ("..error in " + SOSClassUtil.getMethodName() + " :" + e);
}
}
private String maskFilename(String filename) throws Exception {
String targetFilename = filename;
try {
// check for a date format string given in the file mask
if (targetFilename.matches("(.*)(\\[date\\:)([^\\]]+)(\\])(.*)")) {
int posBegin = targetFilename.indexOf("[date:");
if (posBegin > -1) {
int posEnd = targetFilename.indexOf("]", posBegin + 6);
if (posEnd > -1) {
targetFilename = ((posBegin > 0) ? targetFilename.substring(0, posBegin) : "")
+ SOSDate.getCurrentTimeAsString(targetFilename.substring(posBegin + 6, posEnd))
+ ((targetFilename.length() > posEnd) ? targetFilename.substring(posEnd + 1) : "");
}
}
}
// liefert das letzte Monat in der Form MM-YYYY
if (targetFilename.indexOf("[lastmonth]") > -1) {
String lastMonth_ = SOSDate.getDateAsString(getLastMonth(SOSDate.getCurrentTimeAsString("dd-MM-yyyy")), "MM-yyyy");
targetFilename = targetFilename.replaceAll("\\[lastmonth\\]", lastMonth_);
}
// should any opening and closing brackets be found in the file name, then this is an error
Matcher m = Pattern.compile("\\[[^\\]]*\\]").matcher(targetFilename);
if ( m.find() ) throw new Exception("unsupported file mask found:"+ m.group());
getLogger().debug(filename + " mask in " + targetFilename);
return targetFilename;
} catch (Exception e) {
throw new Exception ("..error in " + SOSClassUtil.getMethodName() + " : " + e.getMessage());
}
}
private Date getLastMonth(String MMyy) throws Exception {
try {
Date d = SOSDate.getDate(MMyy, "dd-MM-yy");
//Date d = SOSDate.getDate("112007", "MMyy");
Calendar cal = Calendar.getInstance();
cal.setTime(d);
//System.out.println("..get the last day of the month " + new java.text.SimpleDateFormat("MMMM yyyy").format( cal.getTime()) );
cal.add(cal.MONTH, -1); // add one month
//cal.set(Calendar.DAY_OF_MONTH, 1); // set the date to the 1st of the month
//cal.add(Calendar.DAY_OF_MONTH, 1); // go one day back
//System.out.println("... is " + cal.get(Calendar.DAY_OF_MONTH) );
//Date s = SOSDate.getDate(cal.get(Calendar.DAY_OF_MONTH) + "0212", "ddMMyy");
Date s = cal.getTime();
return s;
} catch (Exception e) {
throw e;
}
}
public boolean isDeleteOldFilename() {
return deleteOldFilename;
}
public void setDeleteOldFilename(boolean deleteOldFilename) {
this.deleteOldFilename = deleteOldFilename;
}
}
|