1 25 package org.ofbiz.webapp.view; 26 27 import java.io.IOException ; 28 import java.io.InputStream ; 29 import java.io.PipedInputStream ; 30 import java.io.PipedOutputStream ; 31 import java.util.Map ; 32 33 import javax.servlet.ServletContext ; 34 import javax.servlet.http.HttpServletRequest ; 35 import javax.servlet.http.HttpServletResponse ; 36 37 import net.sf.jasperreports.engine.JREmptyDataSource; 38 import net.sf.jasperreports.engine.JasperCompileManager; 39 import net.sf.jasperreports.engine.JasperExportManager; 40 import net.sf.jasperreports.engine.JasperFillManager; 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.webapp.control.ContextFilter; 46 import org.ofbiz.entity.GenericDelegator; 47 import org.ofbiz.entity.jdbc.ConnectionFactory; 48 49 56 public class JasperReportsXmlViewHandler implements ViewHandler { 57 58 public static final String module = JasperReportsXmlViewHandler.class.getName(); 59 60 protected ServletContext context; 61 62 public void init(ServletContext context) throws ViewHandlerException { 63 this.context = context; 64 } 65 66 public void render(String name, String page, String info, String contentType, String encoding, HttpServletRequest request, HttpServletResponse response) throws ViewHandlerException { 67 70 if (request == null) { 71 throw new ViewHandlerException("The HttpServletRequest object was null, how did that happen?"); 72 } 73 if (page == null || page.length() == 0) { 74 throw new ViewHandlerException("View page was null or empty, but must be specified"); 75 } 76 if (info == null || info.length() == 0) { 77 Debug.logWarning("View info string was null or empty, but must be used to specify an Entity that is mapped to the Entity Engine datasource that the report will use.", module); 78 } 79 80 request.setAttribute(ContextFilter.FORWARDED_FROM_SERVLET, new Boolean (true)); 82 83 GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator"); 84 85 if (delegator == null) { 86 throw new ViewHandlerException("The delegator object was null, how did that happen?"); 87 } 88 89 try { 90 String datasourceName = delegator.getEntityHelperName(info); 91 InputStream is = context.getResourceAsStream(page); 92 Map parameters = UtilHttp.getParameterMap(request); 93 94 JasperReport report = JasperCompileManager.compileReport(is); 95 96 response.setContentType("text/xml"); 97 98 PipedOutputStream fillToPrintOutputStream = new PipedOutputStream (); 99 PipedInputStream fillToPrintInputStream = new PipedInputStream (fillToPrintOutputStream); 100 101 if (datasourceName != null && datasourceName.length() > 0) { 102 JasperFillManager.fillReportToStream(report, fillToPrintOutputStream, parameters, ConnectionFactory.getConnection(datasourceName)); 103 } else { 104 JasperFillManager.fillReportToStream(report, fillToPrintOutputStream, parameters, new JREmptyDataSource()); 105 } 106 JasperExportManager.exportReportToXmlStream(fillToPrintInputStream, response.getOutputStream()); 107 } catch (IOException ie) { 108 throw new ViewHandlerException("IO Error in region", ie); 109 } catch (java.sql.SQLException e) { 110 throw new ViewHandlerException("Database error while running report", e); 111 } catch (Exception e) { 112 throw new ViewHandlerException("Error in report", e); 113 } 116 } 117 } 118 | Popular Tags |