KickJava   Java API By Example, From Geeks To Geeks.

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


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
5  * under the terms of the GNU General Public License as published by the Free
6  * Software Foundation; either version 2 of the License, or (at your option)
7  * any later 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
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more 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.io.FileInputStream JavaDoc;
24 import java.sql.Connection JavaDoc;
25 import java.util.Map JavaDoc;
26
27 import net.sf.jxls.transformer.XLSTransformer;
28
29 import org.apache.log4j.Logger;
30 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
31 import org.efs.openreports.ORStatics;
32 import org.efs.openreports.engine.input.ReportEngineInput;
33 import org.efs.openreports.engine.output.QueryEngineOutput;
34 import org.efs.openreports.engine.output.ReportEngineOutput;
35 import org.efs.openreports.objects.Report;
36 import org.efs.openreports.providers.DataSourceProvider;
37 import org.efs.openreports.providers.DirectoryProvider;
38 import org.efs.openreports.providers.PropertiesProvider;
39 import org.efs.openreports.providers.ProviderException;
40
41 /**
42  * Generates a ReportEngineOutput from a ReportEngineInput. The output consists
43  * of a byte[] containing an XLS spreadsheet.
44  *
45  * @author Erik Swenson
46  *
47  */

48
49 public class JXLSReportEngine extends ReportEngine
50 {
51     protected static Logger log = Logger.getLogger(JXLSReportEngine.class);
52     
53     public JXLSReportEngine(DataSourceProvider dataSourceProvider,
54             DirectoryProvider directoryProvider, PropertiesProvider propertiesProvider)
55     {
56         super(dataSourceProvider, directoryProvider, propertiesProvider);
57     }
58     
59     public ReportEngineOutput generateReport(ReportEngineInput input)
60             throws ProviderException
61     {
62         Connection JavaDoc conn = null;
63
64         try
65         {
66             Report report = input.getReport();
67             Map JavaDoc parameters = input.getParameters();
68             
69             if (report.getQuery() != null && report.getQuery().trim().length() > 0)
70             {
71                 QueryReportEngine queryEngine = new QueryReportEngine(dataSourceProvider, directoryProvider, propertiesProvider);
72                 
73                 QueryEngineOutput output = (QueryEngineOutput) queryEngine
74                         .generateReport(input);
75                 
76                 parameters.put(ORStatics.JXLS_REPORT_RESULTS, output.getResults());
77             }
78             else
79             {
80                 conn = dataSourceProvider.getConnection(report.getDataSource().getId());
81                 JXLSReportManagerImpl rm = new JXLSReportManagerImpl(conn, parameters, dataSourceProvider);
82                 parameters.put("rm", rm);
83             }
84
85             FileInputStream JavaDoc template = new FileInputStream JavaDoc(directoryProvider
86                     .getReportDirectory()
87                     + report.getFile());
88
89             XLSTransformer transformer = new XLSTransformer();
90             HSSFWorkbook workbook = transformer.transformXLS(template, parameters);
91
92             ByteArrayOutputStream JavaDoc out = new ByteArrayOutputStream JavaDoc();
93             workbook.write(out);
94             
95             ReportEngineOutput output = new ReportEngineOutput();
96             output.setContent(out.toByteArray());
97             output.setContentType(ReportEngineOutput.CONTENT_TYPE_XLS);
98             
99             return output;
100         }
101         catch(Exception JavaDoc e)
102         {
103             e.printStackTrace();
104             throw new ProviderException(e);
105         }
106         finally
107         {
108             try
109             {
110                 if (conn != null) conn.close();
111             }
112             catch (Exception JavaDoc c)
113             {
114                 log.error("Error closing");
115             }
116         }
117     }
118 }
Popular Tags