KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > efs > openreports > engine > JFreeReportEngine


1 /*
2  * Copyright (C) 2006 Erik Swenson - erik@oreports.com
3  *
4  * This program is free software; you can redistribute it and/or modify it under
5  * the terms of the GNU General Public License as published by the Free Software
6  * Foundation; either version 2 of the License, or (at your option) any later
7  * version.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12  * details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16  * Place - Suite 330, Boston, MA 02111-1307, USA.
17  *
18  */

19
20 package org.efs.openreports.engine;
21
22 import java.io.ByteArrayOutputStream JavaDoc;
23 import java.sql.Connection JavaDoc;
24 import java.sql.PreparedStatement JavaDoc;
25 import java.sql.ResultSet JavaDoc;
26 import java.util.Map JavaDoc;
27
28 import net.sf.jasperreports.engine.design.JRDesignQuery;
29 import net.sf.jasperreports.engine.util.JRQueryExecuter;
30
31 import org.apache.log4j.Logger;
32 import org.efs.openreports.engine.input.ReportEngineInput;
33 import org.efs.openreports.engine.output.ReportEngineOutput;
34 import org.efs.openreports.objects.ORProperty;
35 import org.efs.openreports.objects.Report;
36 import org.efs.openreports.objects.ReportDataSource;
37 import org.efs.openreports.providers.DataSourceProvider;
38 import org.efs.openreports.providers.DirectoryProvider;
39 import org.efs.openreports.providers.PropertiesProvider;
40 import org.efs.openreports.providers.ProviderException;
41 import org.efs.openreports.util.ORUtil;
42 import org.jfree.report.JFreeReport;
43 import org.jfree.report.JFreeReportBoot;
44 import org.jfree.report.modules.misc.tablemodel.ResultSetTableModelFactory;
45 import org.jfree.report.modules.output.pageable.pdf.PDFReportUtil;
46 import org.jfree.report.modules.output.table.html.HtmlProcessor;
47 import org.jfree.report.modules.output.table.html.StreamHtmlFilesystem;
48 import org.jfree.report.modules.output.table.rtf.RTFProcessor;
49 import org.jfree.report.modules.output.table.xls.ExcelProcessor;
50 import org.jfree.report.modules.parser.base.ReportGenerator;
51 import org.jfree.report.util.CloseableTableModel;
52
53 /**
54  * JFreeReport ReportEngine implementation.
55  *
56  * @author Erik Swenson
57  *
58  */

59 public class JFreeReportEngine extends ReportEngine
60 {
61     protected static Logger log = Logger.getLogger(JFreeReportEngine.class);
62
63     public JFreeReportEngine(DataSourceProvider dataSourceProvider,
64             DirectoryProvider directoryProvider, PropertiesProvider propertiesProvider)
65     {
66         super(dataSourceProvider, directoryProvider, propertiesProvider);
67         
68         JFreeReportBoot boot = JFreeReportBoot.getInstance();
69         boot.getEditableConfig().setConfigProperty("org.jfree.base.LogLevel", "Info");
70         boot.start();
71     }
72
73     public ReportEngineOutput generateReport(ReportEngineInput input) throws ProviderException
74     {
75         Connection JavaDoc conn = null;
76         PreparedStatement JavaDoc pStmt = null;
77         ResultSet JavaDoc rs = null;
78         
79         ByteArrayOutputStream JavaDoc out = new ByteArrayOutputStream JavaDoc();
80         CloseableTableModel model = null;
81         
82         try
83         {
84             Report report = input.getReport();
85             Map JavaDoc parameters = input.getParameters();
86             
87             ReportDataSource dataSource = report.getDataSource();
88             conn = dataSourceProvider.getConnection(dataSource.getId());
89
90             if (parameters == null || parameters.isEmpty())
91             {
92                 pStmt = conn.prepareStatement(report.getQuery());
93             }
94             else
95             {
96                 // Use JasperReports Query logic to parse parameters in chart
97
// queries
98

99                 JRDesignQuery query = new JRDesignQuery();
100                 query.setText(report.getQuery());
101
102                 // convert parameters to JRDesignParameters so they can be
103
// parsed
104
Map JavaDoc jrParameters = ORUtil.buildJRDesignParameters(parameters);
105
106                 pStmt = JRQueryExecuter.getStatement(query, jrParameters, parameters, conn);
107             }
108             
109             ORProperty maxRows = propertiesProvider.getProperty(ORProperty.QUERYREPORT_MAXROWS);
110             if (maxRows != null && maxRows.getValue() != null)
111             {
112                 pStmt.setMaxRows(Integer.parseInt(maxRows.getValue()));
113             }
114             
115             rs = pStmt.executeQuery();
116             
117             model = ResultSetTableModelFactory.getInstance().createTableModel(rs);
118
119             ReportGenerator generator = ReportGenerator.getInstance();
120             
121             JFreeReport jfreeReport = generator.parseReport(directoryProvider
122                     .getReportDirectory()
123                     + report.getFile());
124             jfreeReport.setData(model);
125
126             ReportEngineOutput output = new ReportEngineOutput();
127             
128             if (input.getExportType() == ReportEngine.EXPORT_PDF)
129             {
130                 output.setContentType(ReportEngineOutput.CONTENT_TYPE_PDF);
131                 
132                 PDFReportUtil.createPDF(jfreeReport, out);
133             }
134             else if (input.getExportType() == ReportEngine.EXPORT_XLS)
135             {
136                 output.setContentType(ReportEngineOutput.CONTENT_TYPE_XLS);
137                 
138                 ExcelProcessor pr = new ExcelProcessor(jfreeReport);
139                 pr.setStrictLayout(false);
140                 pr.setDefineDataFormats(true);
141                 pr.setOutputStream(out);
142                 pr.processReport();
143             }
144             else if (input.getExportType() == ReportEngine.EXPORT_RTF)
145             {
146                 output.setContentType(ReportEngineOutput.CONTENT_TYPE_RTF);
147                 
148                 RTFProcessor pr = new RTFProcessor(jfreeReport);
149                 pr.setStrictLayout(false);
150                 pr.setOutputStream(out);
151                 pr.processReport();
152             }
153             else //default to HTML
154
{
155                 output.setContentType(ReportEngineOutput.CONTENT_TYPE_HTML);
156                 
157                 HtmlProcessor pr = new HtmlProcessor(jfreeReport);
158                 pr.setStrictLayout(false);
159                 pr.setGenerateXHTML(true);
160                 pr.setFilesystem(new StreamHtmlFilesystem(out));
161                 pr.processReport();
162             }
163             
164             output.setContent(out.toByteArray());
165
166             return output;
167         }
168         catch (Exception JavaDoc e)
169         {
170             throw new ProviderException(e);
171         }
172         finally
173         {
174             try
175             {
176                 if (model != null) model.close();
177                 if (out != null) out.close();
178             }
179             catch (Exception JavaDoc e)
180             {
181                 log.warn(e.toString());
182             }
183             
184             try
185             {
186                 if (rs != null) rs.close();
187                 if (pStmt != null) pStmt.close();
188                 if (conn != null) conn.close();
189             }
190             catch (Exception JavaDoc e)
191             {
192                 log.warn(e.toString());
193             }
194         }
195     }
196 }
197
Popular Tags