1 19 20 package org.efs.openreports.actions; 21 22 import java.sql.Connection ; 23 import java.util.Date ; 24 import java.util.Map ; 25 26 import javax.servlet.ServletOutputStream ; 27 import javax.servlet.http.HttpServletResponse ; 28 29 import org.apache.commons.lang.StringUtils; 30 import org.apache.log4j.Logger; 31 import org.efs.openreports.ORStatics; 32 import org.efs.openreports.engine.JXLSReportEngine; 33 import org.efs.openreports.engine.input.ReportEngineInput; 34 import org.efs.openreports.engine.output.ReportEngineOutput; 35 import org.efs.openreports.objects.Report; 36 import org.efs.openreports.objects.ReportLog; 37 import org.efs.openreports.objects.ReportUser; 38 39 import com.opensymphony.webwork.ServletActionContext; 40 import com.opensymphony.xwork.ActionContext; 41 42 public class JXLSReportAction extends QueryReportAction 43 { 44 protected static Logger log = Logger.getLogger(JXLSReportAction.class); 45 46 public String execute() 47 { 48 ReportUser user = (ReportUser) ActionContext.getContext().getSession().get( 49 ORStatics.REPORT_USER); 50 51 report = (Report) ActionContext.getContext().getSession().get(ORStatics.REPORT); 52 53 Map parameters = getReportParameterMap(user); 54 55 ReportLog reportLog = new ReportLog(user, report, new Date ()); 56 57 Connection conn = null; 58 59 try 60 { 61 log.debug("Starting JXLS Report: " + report.getName()); 62 63 reportLogProvider.insertReportLog(reportLog); 64 65 ReportEngineInput input = new ReportEngineInput(report, parameters); 66 67 JXLSReportEngine reportEngine = new JXLSReportEngine( 68 dataSourceProvider, directoryProvider, propertiesProvider); 69 70 ReportEngineOutput output = reportEngine.generateReport(input); 71 72 HttpServletResponse response = ServletActionContext.getResponse(); 73 response.setContentType("application/vnd.ms-excel"); 74 response.setHeader("Content-disposition", "inline; filename=" 75 + StringUtils.deleteWhitespace(report.getName()) + ".xls"); 76 77 ServletOutputStream out = response.getOutputStream(); 78 79 out.write(output.getContent(), 0, output.getContent().length); 80 81 out.flush(); 82 out.close(); 83 84 reportLog.setEndTime(new Date ()); 85 reportLog.setStatus(ReportLog.STATUS_SUCCESS); 86 reportLogProvider.updateReportLog(reportLog); 87 88 log.debug("Finished JRXLS Report: " + report.getName()); 89 } 90 catch (Exception e) 91 { 92 addActionError(e.getMessage()); 93 94 log.error(e.getMessage()); 95 96 reportLog.setMessage(e.getMessage()); 97 reportLog.setStatus(ReportLog.STATUS_FAILURE); 98 99 reportLog.setEndTime(new Date ()); 100 101 try 102 { 103 reportLogProvider.updateReportLog(reportLog); 104 } 105 catch (Exception ex) 106 { 107 log.error("Unable to create ReportLog: " + ex.getMessage()); 108 } 109 110 return ERROR; 111 } 112 finally 113 { 114 try 115 { 116 if (conn != null) conn.close(); 117 } 118 catch (Exception c) 119 { 120 log.error("Error closing"); 121 } 122 } 123 124 return NONE; 125 } 126 } | Popular Tags |