1 19 20 package org.efs.openreports.engine; 21 22 import java.io.ByteArrayOutputStream ; 23 import java.io.FileInputStream ; 24 import java.sql.Connection ; 25 import java.util.Map ; 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 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 conn = null; 63 64 try 65 { 66 Report report = input.getReport(); 67 Map 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 template = new FileInputStream (directoryProvider 86 .getReportDirectory() 87 + report.getFile()); 88 89 XLSTransformer transformer = new XLSTransformer(); 90 HSSFWorkbook workbook = transformer.transformXLS(template, parameters); 91 92 ByteArrayOutputStream out = new ByteArrayOutputStream (); 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 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 c) 113 { 114 log.error("Error closing"); 115 } 116 } 117 } 118 } | Popular Tags |