1 25 package org.ofbiz.webapp.view; 26 27 import java.io.IOException ; 28 import java.io.InputStream ; 29 import java.util.Map ; 30 31 import javax.servlet.ServletContext ; 32 import javax.servlet.http.HttpServletRequest ; 33 import javax.servlet.http.HttpServletResponse ; 34 35 import net.sf.jasperreports.engine.JRDataSource; 36 import net.sf.jasperreports.engine.JREmptyDataSource; 37 import net.sf.jasperreports.engine.JasperCompileManager; 38 import net.sf.jasperreports.engine.JasperExportManager; 39 import net.sf.jasperreports.engine.JasperFillManager; 40 import net.sf.jasperreports.engine.JasperPrint; 41 import net.sf.jasperreports.engine.JasperReport; 42 43 import org.ofbiz.base.util.Debug; 44 import org.ofbiz.base.util.UtilHttp; 45 import org.ofbiz.base.util.cache.UtilCache; 46 import org.ofbiz.webapp.control.ContextFilter; 47 import org.ofbiz.entity.GenericDelegator; 48 import org.ofbiz.entity.jdbc.ConnectionFactory; 49 50 57 public class JasperReportsPdfViewHandler implements ViewHandler { 58 59 public static final String module = JasperReportsPdfViewHandler.class.getName(); 60 61 protected ServletContext context; 62 public static UtilCache jasperReportsCompiledCache = new UtilCache("webapp.JasperReportsCompiled"); 63 64 public void init(ServletContext context) throws ViewHandlerException { 65 this.context = context; 66 } 67 68 public void render(String name, String page, String info, String contentType, String encoding, HttpServletRequest request, HttpServletResponse response) throws ViewHandlerException { 69 72 if (request == null) { 73 throw new ViewHandlerException("The HttpServletRequest object was null, how did that happen?"); 74 } 75 if (page == null || page.length() == 0) { 76 throw new ViewHandlerException("View page was null or empty, but must be specified"); 77 } 78 if (info == null || info.length() == 0) { 79 Debug.logInfo("View info string was null or empty, (optionally used to specify an Entity that is mapped to the Entity Engine datasource that the report will use).", module); 80 } 81 82 request.setAttribute(ContextFilter.FORWARDED_FROM_SERVLET, new Boolean (true)); 84 GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator"); 85 if (delegator == null) { 86 throw new ViewHandlerException("The delegator object was null, how did that happen?"); 87 } 88 89 try { 90 JasperReport report = (JasperReport) jasperReportsCompiledCache.get(page); 91 if (report == null) { 92 synchronized (this) { 93 report = (JasperReport) jasperReportsCompiledCache.get(page); 94 if (report == null) { 95 InputStream is = context.getResourceAsStream(page); 96 report = JasperCompileManager.compileReport(is); 97 jasperReportsCompiledCache.put(page, report); 98 } 99 } 100 } 101 102 response.setContentType("application/pdf"); 103 104 Map parameters = (Map ) request.getAttribute("jrParameters"); 105 if (parameters == null) { 106 parameters = UtilHttp.getParameterMap(request); 107 } 108 109 JRDataSource jrDataSource = (JRDataSource) request.getAttribute("jrDataSource"); 110 JasperPrint jp = null; 111 if (jrDataSource == null) { 112 String datasourceName = delegator.getEntityHelperName(info); 113 if (datasourceName != null && datasourceName.length() > 0) { 114 Debug.logInfo("Filling report with connection from datasource: " + datasourceName, module); 115 jp = JasperFillManager.fillReport(report, parameters, ConnectionFactory.getConnection(datasourceName)); 116 } else { 117 Debug.logInfo("Filling report with an empty JR datasource", module); 118 jp = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource()); 119 } 120 } else { 121 Debug.logInfo("Filling report with a passed in jrDataSource", module); 122 jp = JasperFillManager.fillReport(report, parameters, jrDataSource); 123 } 124 125 if (jp.getPages().size() < 1) { 126 throw new ViewHandlerException("Report is Empty (no results?)"); 127 } else { 128 Debug.logInfo("Got report, there are " + jp.getPages().size() + " pages.", module); 129 } 130 JasperExportManager.exportReportToPdfStream(jp, response.getOutputStream()); 131 } catch (IOException ie) { 132 throw new ViewHandlerException("IO Error in report", ie); 133 } catch (java.sql.SQLException e) { 134 throw new ViewHandlerException("Database error while running report", e); 135 } catch (Exception e) { 136 throw new ViewHandlerException("Error in report", e); 137 } 140 } 141 } 142 | Popular Tags |