/* * JasperReports - Free Java Reporting Library. * Copyright (C) 2001 - 2009 Jaspersoft Corporation. All rights reserved. * http://www.jaspersoft.com * * Unless you have purchased a commercial license agreement from Jaspersoft, * the following license terms apply: * * This program is part of JasperReports. * * JasperReports is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * JasperReports is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with JasperReports. If not, see <http://www.gnu.org/licenses/>. */ package net.sf.jasperreports.engine; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.sql.Connection; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.fill.JRFiller; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.engine.util.JRSaver; import net.sf.jasperreports.engine.util.SimpleFileResolver; /** * Fa�ade class for filling compiled report designs with data from report data sources, * in order to produce page-oriented documents, ready-to-print. * <p> * All methods receive a Map object that should contain the values for the report parameters. * These value are retrieved by the engine using the corresponding report parameter name as the key. * <p> * There are two types of method signatures with regards to the data source * provided for filling the report: * <ul> * <li>Methods that receive an instance of the {@link net.sf.jasperreports.engine.JRDataSource} interface * and use it directly for retrieving report data; * <li>Methods that receive an instance of the {@link java.sql.Connection} interface and retrieve * the report data by executing the report internal SQL query through this JDBC connection and wrapping * the returned {@link java.sql.ResultSet} object inside a {@link net.sf.jasperreports.engine.JRResultSetDataSource} * instance. * </ul> * * @see net.sf.jasperreports.engine.JasperReport * @see net.sf.jasperreports.engine.JRDataSource * @see net.sf.jasperreports.engine.fill.JRFiller * @see net.sf.jasperreports.engine.JasperPrint * @author Teodor Danciu (teodord@users.sourceforge.net) * @version $Id: JasperFillManager.java 3719 2010-04-09 12:04:52Z teodord $ */ public final class JasperFillManager { /** * Fills the compiled report design loaded from the specified file. * The result of this operation is another file that will contain the serialized * {@link JasperPrint} object representing the generated document, * having the same name as the report design as declared in the source file, * plus the <code>*.jrprint</code> extension, located in the same directory as the source file. * * @param sourceFileName source file containing the compile report design * @param params report parameters map * @param connection JDBC connection object to use for executing the report internal SQL query */ public static String fillReportToFile( String sourceFileName, Map params, Connection connection ) throws JRException { File sourceFile = new File(sourceFileName); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(sourceFile); File destFile = new File(sourceFile.getParent(), jasperReport.getName() + ".jrprint"); String destFileName = destFile.toString(); Map parameters = setFileResolver(sourceFile, params); fillReportToFile(jasperReport, destFileName, parameters, connection); return destFileName; } /** * Fills the compiled report design loaded from the specified file. * The result of this operation is another file that will contain the serialized * {@link JasperPrint} object representing the generated document, * having the same name as the report design as declared in the source file, * plus the <code>*.jrprint</code> extension, located in the same directory as the source file. * * @param sourceFileName source file containing the compile report design * @param params report parameters map * @see JRFiller#fillReport(JasperReport, Map) */ public static String fillReportToFile( String sourceFileName, Map params ) throws JRException { File sourceFile = new File(sourceFileName); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(sourceFile); File destFile = new File(sourceFile.getParent(), jasperReport.getName() + ".jrprint"); String destFileName = destFile.toString(); Map parameters = setFileResolver(sourceFile, params); fillReportToFile(jasperReport, destFileName, parameters); return destFileName; } /** * Fills the compiled report design loaded from the file received as the first parameter * and places the result in the file specified by the second parameter. * * @param sourceFileName source file containing the compile report design * @param destFileName file name to place the generated report into * @param params report parameters map * @param connection JDBC connection object to use for executing the report internal SQL query */ public static void fillReportToFile( String sourceFileName, String destFileName, Map params, Connection connection ) throws JRException { File sourceFile = new File(sourceFileName); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(sourceFile); Map parameters = setFileResolver(sourceFile, params); fillReportToFile(jasperReport, destFileName, parameters, connection); } /** * Fills the compiled report design loaded from the file received as the first parameter * and places the result in the file specified by the second parameter. * * @param sourceFileName source file containing the compile report design * @param destFileName file name to place the generated report into * @param params report parameters map * @see JRFiller#fillReport(JasperReport, Map) */ public static void fillReportToFile( String sourceFileName, String destFileName, Map params ) throws JRException { File sourceFile = new File(sourceFileName); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(sourceFile); Map parameters = setFileResolver(sourceFile, params); fillReportToFile(jasperReport, destFileName, parameters); } /** * Fills the compiled report design received as the first parameter * and places the result in the file specified by the second parameter. * * @param jasperReport compiled report design object to use for filling * @param destFileName file name to place the generated report into * @param parameters report parameters map * @param connection JDBC connection object to use for executing the report internal SQL query */ public static void fillReportToFile( JasperReport jasperReport, String destFileName, Map parameters, Connection connection ) throws JRException { JasperPrint jasperPrint = fillReport(jasperReport, parameters, connection); JRSaver.saveObject(jasperPrint, destFileName); } /** * Fills the compiled report design received as the first parameter * and places the result in the file specified by the second parameter. * * @param jasperReport compiled report design object to use for filling * @param destFileName file name to place the generated report into * @param parameters report parameters map * @see JRFiller#fillReport(JasperReport, Map) */ public static void fillReportToFile( JasperReport jasperReport, String destFileName, Map parameters ) throws JRException { JasperPrint jasperPrint = fillReport(jasperReport, parameters); JRSaver.saveObject(jasperPrint, destFileName); } /** * Fills the compiled report design loaded from the specified file and returns * the generated report object. * * @param sourceFileName source file containing the compile report design * @param params report parameters map * @param connection JDBC connection object to use for executing the report internal SQL query * @return generated report object */ public static JasperPrint fillReport( String sourceFileName, Map params, Connection connection ) throws JRException { File sourceFile = new File(sourceFileName); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(sourceFile); Map parameters = setFileResolver(sourceFile, params); return fillReport(jasperReport, parameters, connection); } /** * Fills the compiled report design loaded from the specified file and returns * the generated report object. * * @param sourceFileName source file containing the compile report design * @param params report parameters map * @return generated report object * @see JRFiller#fillReport(JasperReport, Map) */ public static JasperPrint fillReport( String sourceFileName, Map params ) throws JRException { File sourceFile = new File(sourceFileName); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(sourceFile); Map parameters = setFileResolver(sourceFile, params); return fillReport(jasperReport, parameters); } /** * Fills the compiled report design loaded from the supplied input stream and writes * the generated report object to the output stream specified by the second parameter. * * @param inputStream input stream to read the compiled report design object from * @param outputStream output stream to write the generated report object to * @param parameters report parameters map * @param connection JDBC connection object to use for executing the report internal SQL query */ public static void fillReportToStream( InputStream inputStream, OutputStream outputStream, Map parameters, Connection connection ) throws JRException { JasperReport jasperReport = (JasperReport)JRLoader.loadObject(inputStream); fillReportToStream(jasperReport, outputStream, parameters, connection); } /** * Fills the compiled report design loaded from the supplied input stream and writes * the generated report object to the output stream specified by the second parameter. * * @param inputStream input stream to read the compiled report design object from * @param outputStream output stream to write the generated report object to * @param parameters report parameters map * @see JRFiller#fillReport(JasperReport, Map) */ public static void fillReportToStream( InputStream inputStream, OutputStream outputStream, Map parameters ) throws JRException { JasperReport jasperReport = (JasperReport)JRLoader.loadObject(inputStream); fillReportToStream(jasperReport, outputStream, parameters); } /** * Fills the compiled report design supplied as the first parameter and writes * the generated report object to the output stream specified by the second parameter. * * @param jasperReport compiled report design object to use for filling * @param outputStream output stream to write the generated report object to * @param parameters report parameters map * @param connection JDBC connection object to use for executing the report internal SQL query */ public static void fillReportToStream( JasperReport jasperReport, OutputStream outputStream, Map parameters, Connection connection ) throws JRException { JasperPrint jasperPrint = fillReport(jasperReport, parameters, connection); JRSaver.saveObject(jasperPrint, outputStream); } /** * Fills the compiled report design supplied as the first parameter and writes * the generated report object to the output stream specified by the second parameter. * * @param jasperReport compiled report design object to use for filling * @param outputStream output stream to write the generated report object to * @param parameters report parameters map * @see JRFiller#fillReport(JasperReport, Map) */ public static void fillReportToStream( JasperReport jasperReport, OutputStream outputStream, Map parameters ) throws JRException { JasperPrint jasperPrint = fillReport(jasperReport, parameters); JRSaver.saveObject(jasperPrint, outputStream); } /** * Fills the compiled report design loaded from the supplied input stream and returns * the generated report object. * * @param inputStream input stream to read the compiled report design object from * @param parameters report parameters map * @param connection JDBC connection object to use for executing the report internal SQL query * @return generated report object */ public static JasperPrint fillReport( InputStream inputStream, Map parameters, Connection connection ) throws JRException { JasperReport jasperReport = (JasperReport)JRLoader.loadObject(inputStream); return fillReport(jasperReport, parameters, connection); } /** * Fills the compiled report design loaded from the supplied input stream and returns * the generated report object. * * @param inputStream input stream to read the compiled report design object from * @param parameters report parameters map * @return generated report object * @see JRFiller#fillReport(JasperReport, Map) */ public static JasperPrint fillReport( InputStream inputStream, Map parameters ) throws JRException { JasperReport jasperReport = (JasperReport)JRLoader.loadObject(inputStream); return fillReport(jasperReport, parameters); } /** * Fills the compiled report design supplied as the first parameter and returns * the generated report object. * * @param jasperReport compiled report design object to use for filling * @param parameters report parameters map * @param connection JDBC connection object to use for executing the report internal SQL query * @return generated report object */ public static JasperPrint fillReport( JasperReport jasperReport, Map parameters, Connection connection ) throws JRException { return JRFiller.fillReport(jasperReport, parameters, connection); } /** * Fills the compiled report design supplied as the first parameter and returns * the generated report object. * * @param jasperReport compiled report design object to use for filling * @param parameters report parameters map * @return generated report object * @see JRFiller#fillReport(JasperReport, Map) */ public static JasperPrint fillReport( JasperReport jasperReport, Map parameters ) throws JRException { return JRFiller.fillReport(jasperReport, parameters); } /** * Fills the compiled report design loaded from the specified file. * The result of this operation is another file that will contain the serialized * {@link JasperPrint} object representing the generated document, * having the same name as the report design as declared in the source file, * plus the <code>*.jrprint</code> extension, located in the same directory as the source file. * * @param sourceFileName source file containing the compile report design * @param params report parameters map * @param dataSource data source object */ public static String fillReportToFile( String sourceFileName, Map params, JRDataSource dataSource ) throws JRException { File sourceFile = new File(sourceFileName); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(sourceFile); File destFile = new File(sourceFile.getParent(), jasperReport.getName() + ".jrprint"); String destFileName = destFile.toString(); Map parameters = setFileResolver(sourceFile, params); fillReportToFile(jasperReport, destFileName, parameters, dataSource); return destFileName; } /** * Fills the compiled report design loaded from the file received as the first parameter * and places the result in the file specified by the second parameter. * * @param sourceFileName source file containing the compile report design * @param destFileName file name to place the generated report into * @param params report parameters map * @param dataSource data source object */ public static void fillReportToFile( String sourceFileName, String destFileName, Map params, JRDataSource dataSource ) throws JRException { File sourceFile = new File(sourceFileName); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(sourceFile); Map parameters = setFileResolver(sourceFile, params); fillReportToFile(jasperReport, destFileName, parameters, dataSource); } /** * Fills the compiled report design received as the first parameter * and places the result in the file specified by the second parameter. * * @param jasperReport compiled report design object to use for filling * @param destFileName file name to place the generated report into * @param parameters report parameters map * @param dataSource data source object */ public static void fillReportToFile( JasperReport jasperReport, String destFileName, Map parameters, JRDataSource dataSource ) throws JRException { JasperPrint jasperPrint = fillReport(jasperReport, parameters, dataSource); JRSaver.saveObject(jasperPrint, destFileName); } /** * Fills the compiled report design loaded from the specified file and returns * the generated report object. * * @param sourceFileName source file containing the compile report design * @param params report parameters map * @param dataSource data source object * @return generated report object */ public static JasperPrint fillReport( String sourceFileName, Map params, JRDataSource dataSource ) throws JRException { File sourceFile = new File(sourceFileName); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(sourceFile); Map parameters = setFileResolver(sourceFile, params); return fillReport(jasperReport, parameters, dataSource); } /** * Fills the compiled report design loaded from the supplied input stream and writes * the generated report object to the output stream specified by the second parameter. * * @param inputStream input stream to read the compiled report design object from * @param outputStream output stream to write the generated report object to * @param parameters report parameters map * @param dataSource data source object */ public static void fillReportToStream( InputStream inputStream, OutputStream outputStream, Map parameters, JRDataSource dataSource ) throws JRException { JasperReport jasperReport = (JasperReport)JRLoader.loadObject(inputStream); fillReportToStream(jasperReport, outputStream, parameters, dataSource); } /** * Fills the compiled report design supplied as the first parameter and writes * the generated report object to the output stream specified by the second parameter. * * @param jasperReport compiled report design object to use for filling * @param outputStream output stream to write the generated report object to * @param parameters report parameters map * @param dataSource data source object */ public static void fillReportToStream( JasperReport jasperReport, OutputStream outputStream, Map parameters, JRDataSource dataSource ) throws JRException { JasperPrint jasperPrint = fillReport(jasperReport, parameters, dataSource); JRSaver.saveObject(jasperPrint, outputStream); } /** * Fills the compiled report design loaded from the supplied input stream and returns * the generated report object. * * @param inputStream input stream to read the compiled report design object from * @param parameters report parameters map * @param dataSource data source object * @return generated report object */ public static JasperPrint fillReport( InputStream inputStream, Map parameters, JRDataSource dataSource ) throws JRException { JasperReport jasperReport = (JasperReport)JRLoader.loadObject(inputStream); return fillReport(jasperReport, parameters, dataSource); } /** * Fills the compiled report design supplied as the first parameter and returns * the generated report object. * * @param jasperReport compiled report design object to use for filling * @param parameters report parameters map * @param dataSource data source object * @return generated report object */ public static JasperPrint fillReport( JasperReport jasperReport, Map parameters, JRDataSource dataSource ) throws JRException { return JRFiller.fillReport(jasperReport, parameters, dataSource); } /** * */ protected static Map setFileResolver(File file, Map params) { Map parameters = params; if (parameters == null) { parameters = new HashMap(); } if (!parameters.containsKey(JRParameter.REPORT_FILE_RESOLVER)) { SimpleFileResolver fileResolver = new SimpleFileResolver( Arrays.asList(new File[]{file.getParentFile(), new File(".")}) ); fileResolver.setResolveAbsolutePath(true); parameters.put( JRParameter.REPORT_FILE_RESOLVER, fileResolver ); } return parameters; } private JasperFillManager() { } }