You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by jo...@apache.org on 2019/02/10 15:15:20 UTC
[struts] branch master updated: Minor code optimization in jasper
reports result
This is an automated email from the ASF dual-hosted git repository.
jogep pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/struts.git
The following commit(s) were added to refs/heads/master by this push:
new 2908d74 Minor code optimization in jasper reports result
2908d74 is described below
commit 2908d746ce2ac2a6a5298ef0ecef7bff359fabb2
Author: Johannes Geppert <jo...@apache.org>
AuthorDate: Sun Feb 10 16:15:38 2019 +0100
Minor code optimization in jasper reports result
---
.../views/jasperreports/JasperReportsResult.java | 129 ++++++++++++---------
.../views/jasperreports/ValueStackShadowMap.java | 23 ++--
2 files changed, 81 insertions(+), 71 deletions(-)
diff --git a/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java b/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java
index 4eeb52d..3fbdf98 100644
--- a/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java
+++ b/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/JasperReportsResult.java
@@ -20,11 +20,22 @@ package org.apache.struts2.views.jasperreports;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.util.ValueStack;
-
-import net.sf.jasperreports.engine.*;
-import net.sf.jasperreports.engine.export.*;
+import net.sf.jasperreports.engine.JRException;
+import net.sf.jasperreports.engine.JRExporter;
+import net.sf.jasperreports.engine.JRExporterParameter;
+import net.sf.jasperreports.engine.JRParameter;
+import net.sf.jasperreports.engine.JasperFillManager;
+import net.sf.jasperreports.engine.JasperPrint;
+import net.sf.jasperreports.engine.JasperReport;
+import net.sf.jasperreports.engine.export.HtmlExporter;
+import net.sf.jasperreports.engine.export.JRCsvExporter;
+import net.sf.jasperreports.engine.export.JRCsvExporterParameter;
+import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
+import net.sf.jasperreports.engine.export.JRPdfExporter;
+import net.sf.jasperreports.engine.export.JRRtfExporter;
+import net.sf.jasperreports.engine.export.JRXlsExporter;
+import net.sf.jasperreports.engine.export.JRXmlExporter;
import net.sf.jasperreports.engine.util.JRLoader;
-
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -35,7 +46,6 @@ import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
@@ -112,7 +122,7 @@ import java.util.TimeZone;
* </result>
* <!-- END SNIPPET: example1 -->
* </pre>
- *
+ * <p>
* or for pdf
*
* <pre>
@@ -128,7 +138,7 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe
private static final long serialVersionUID = -2523174799621182907L;
- private final static Logger LOG = LogManager.getLogger(JasperReportsResult.class);
+ private static final Logger LOG = LogManager.getLogger(JasperReportsResult.class);
protected String dataSource;
protected String format;
@@ -202,9 +212,7 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe
}
/**
- * set time zone id
- *
- * @param timeZone
+ * @param timeZone set time zone id
*/
public void setTimeZone(final String timeZone) {
this.timeZone = timeZone;
@@ -244,8 +252,10 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe
LOG.debug("Creating JasperReport for dataSource = {}, format = {}", dataSource, format);
- HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
- HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(ServletActionContext.HTTP_RESPONSE);
+ HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext()
+ .get(ServletActionContext.HTTP_REQUEST);
+ HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext()
+ .get(ServletActionContext.HTTP_RESPONSE);
// Handle IE special case: it sends a "contype" request first.
// TODO Set content type to config settings?
@@ -265,8 +275,9 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe
ValueStackDataSource stackDataSource = null;
Connection conn = (Connection) stack.findValue(connection);
- if (conn == null)
+ if (conn == null) {
stackDataSource = new ValueStackDataSource(stack, dataSource, wrapField);
+ }
if ("https".equalsIgnoreCase(request.getScheme())) {
// set the the HTTP Header to work around IE SSL weirdness
@@ -279,9 +290,10 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe
// Determine the directory that the report file is in and set the reportDirectory parameter
// For WW 2.1.7:
// ServletContext servletContext = ((ServletConfig) invocation.getInvocationContext().get(ServletActionContext.SERVLET_CONFIG)).getServletContext();
- ServletContext servletContext = (ServletContext) invocation.getInvocationContext().get(ServletActionContext.SERVLET_CONTEXT);
+ ServletContext servletContext = (ServletContext) invocation.getInvocationContext()
+ .get(ServletActionContext.SERVLET_CONTEXT);
String systemId = servletContext.getRealPath(finalLocation);
- Map parameters = new ValueStackShadowMap(stack);
+ Map<String, Object> parameters = new ValueStackShadowMap(stack);
File directory = new File(systemId.substring(0, systemId.lastIndexOf(File.separator)));
parameters.put("reportDirectory", directory);
parameters.put(JRParameter.REPORT_LOCALE, invocation.getInvocationContext().getLocale());
@@ -299,7 +311,7 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe
// Add any report parameters from action to param map.
Map reportParams = (Map) stack.findValue(reportParameters);
if (reportParams != null) {
- LOG.debug("Found report parameters; adding to parameters...");
+ LOG.debug("Found report parameters; adding to parameters...");
parameters.putAll(reportParams);
}
@@ -311,8 +323,7 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(new File(systemId));
if (conn == null) {
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, stackDataSource);
- }
- else {
+ } else {
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
}
} catch (JRException e) {
@@ -323,7 +334,7 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe
// Export the print object to the desired output format
try {
if (contentDisposition != null || documentName != null) {
- final StringBuffer tmp = new StringBuffer();
+ final StringBuilder tmp = new StringBuilder();
tmp.append((contentDisposition == null) ? "inline" : contentDisposition);
if (documentName != null) {
@@ -336,40 +347,48 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe
response.setHeader("Content-disposition", tmp.toString());
}
+ //TODO: replace deprecated logic
JRExporter exporter;
- if (format.equals(FORMAT_PDF)) {
- response.setContentType("application/pdf");
- exporter = new JRPdfExporter();
- } else if (format.equals(FORMAT_CSV)) {
- response.setContentType("text/csv");
- exporter = new JRCsvExporter();
- } else if (format.equals(FORMAT_HTML)) {
- response.setContentType("text/html");
-
- // IMAGES_MAPS seems to be only supported as "backward compatible" from JasperReports 1.1.0
-
- Map imagesMap = new HashMap();
- request.getSession(true).setAttribute("IMAGES_MAP", imagesMap);
-
- exporter = new HtmlExporter();
- exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
- exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + imageServletUrl);
-
- // Needed to support chart images:
- exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
- request.getSession().setAttribute("net.sf.jasperreports.j2ee.jasper_print", jasperPrint);
- } else if (format.equals(FORMAT_XLS)) {
- response.setContentType("application/vnd.ms-excel");
- exporter = new JRXlsExporter();
- } else if (format.equals(FORMAT_XML)) {
- response.setContentType("text/xml");
- exporter = new JRXmlExporter();
- } else if (format.equals(FORMAT_RTF)) {
- response.setContentType("application/rtf");
- exporter = new JRRtfExporter();
- } else {
- throw new ServletException("Unknown report format: " + format);
+ switch (format) {
+ case FORMAT_PDF:
+ response.setContentType("application/pdf");
+ exporter = new JRPdfExporter();
+ break;
+ case FORMAT_CSV:
+ response.setContentType("text/csv");
+ exporter = new JRCsvExporter();
+ break;
+ case FORMAT_HTML:
+ response.setContentType("text/html");
+
+ // IMAGES_MAPS seems to be only supported as "backward compatible" from JasperReports 1.1.0
+
+ Map imagesMap = new HashMap();
+ request.getSession(true).setAttribute("IMAGES_MAP", imagesMap);
+
+ exporter = new HtmlExporter();
+ exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
+ exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + imageServletUrl);
+
+ // Needed to support chart images:
+ exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
+ request.getSession().setAttribute("net.sf.jasperreports.j2ee.jasper_print", jasperPrint);
+ break;
+ case FORMAT_XLS:
+ response.setContentType("application/vnd.ms-excel");
+ exporter = new JRXlsExporter();
+ break;
+ case FORMAT_XML:
+ response.setContentType("text/xml");
+ exporter = new JRXmlExporter();
+ break;
+ case FORMAT_RTF:
+ response.setContentType("application/rtf");
+ exporter = new JRRtfExporter();
+ break;
+ default:
+ throw new ServletException("Unknown report format: " + format);
}
Map exportParams = (Map) stack.findValue(exportParameters);
@@ -421,14 +440,15 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe
* @param invocation Current invocation.
* @throws Exception on initialization error.
*/
- private void initializeProperties(ActionInvocation invocation) throws Exception {
+ private void initializeProperties(ActionInvocation invocation) {
if (dataSource == null && connection == null) {
String message = "No dataSource specified...";
LOG.error(message);
throw new RuntimeException(message);
}
- if (dataSource != null)
+ if (dataSource != null) {
dataSource = conditionalParse(dataSource, invocation);
+ }
format = conditionalParse(format, invocation);
if (StringUtils.isEmpty(format)) {
@@ -453,8 +473,7 @@ public class JasperReportsResult extends StrutsResultSupport implements JasperRe
* @param jasperPrint The Print object to render as CSV
* @param exporter The exporter to use to export the report
* @return A CSV formatted report
- * @throws net.sf.jasperreports.engine.JRException
- * If there is a problem running the report
+ * @throws net.sf.jasperreports.engine.JRException If there is a problem running the report
*/
private ByteArrayOutputStream exportReportToBytes(JasperPrint jasperPrint, JRExporter exporter) throws JRException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
diff --git a/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackShadowMap.java b/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackShadowMap.java
index c6e3766..f91ecc1 100644
--- a/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackShadowMap.java
+++ b/plugins/jasperreports/src/main/java/org/apache/struts2/views/jasperreports/ValueStackShadowMap.java
@@ -21,26 +21,19 @@ package org.apache.struts2.views.jasperreports;
import com.opensymphony.xwork2.util.ValueStack;
import java.util.HashMap;
-import java.util.Set;
/**
* Ported to Struts:
- *
*/
-public class ValueStackShadowMap extends HashMap {
+public class ValueStackShadowMap extends HashMap<String, Object> {
private static final long serialVersionUID = -167109778490907240L;
/**
* valueStack reference
*/
- ValueStack valueStack;
-
- /**
- * entries reference
- */
- Set entries;
+ transient ValueStack valueStack;
/**
@@ -60,13 +53,11 @@ public class ValueStackShadowMap extends HashMap {
* @return <tt>true</tt>, if contains key, <tt>false</tt> otherwise.
* @see java.util.HashMap#containsKey
*/
- public boolean containsKey(Object key) {
+ public boolean containsKey(String key) {
boolean hasKey = super.containsKey(key);
- if (!hasKey) {
- if (valueStack.findValue((String) key) != null) {
- hasKey = true;
- }
+ if (!hasKey && valueStack.findValue(key) != null) {
+ hasKey = true;
}
return hasKey;
@@ -79,10 +70,10 @@ public class ValueStackShadowMap extends HashMap {
* @return value - The object from HashMap or if null, from the valueStack.
* @see java.util.HashMap#get
*/
- public Object get(Object key) {
+ public Object get(String key) {
Object value = super.get(key);
- if ((value == null) && key instanceof String) {
+ if ((value == null)) {
value = valueStack.findValue((String) key);
}