1 21 package com.jaspersoft.jasperserver.api.engine.jasperreports.util; 22 23 import java.io.Serializable ; 24 import java.io.UnsupportedEncodingException ; 25 import java.net.URLEncoder ; 26 import java.util.Date ; 27 import java.util.Iterator ; 28 29 import net.sf.jasperreports.engine.JRPrintHyperlink; 30 import net.sf.jasperreports.engine.JRPrintHyperlinkParameter; 31 import net.sf.jasperreports.engine.JRPrintHyperlinkParameters; 32 import net.sf.jasperreports.engine.export.JRHyperlinkProducer; 33 34 import org.apache.commons.logging.Log; 35 import org.apache.commons.logging.LogFactory; 36 37 import com.jaspersoft.jasperserver.api.JSExceptionWrapper; 38 39 43 public abstract class BaseReportExecutionHyperlinkProducerFactory implements Serializable { 44 45 protected final static Log log = LogFactory.getLog(BaseReportExecutionHyperlinkProducerFactory.class); 46 47 private HyperlinkParameterFormatter dateFormatter; 48 private String flowControllerMapping; 49 private String reportExecutionFlowId; 50 private String hyperlinkParameterReportUnit; 51 private String urlParameterReportUnit; 52 private String hyperlinkParameterOutputChannel; 53 private String urlParameterOutputChannel; 54 55 public abstract class BaseHyperlinkProducer implements JRHyperlinkProducer, Serializable { 56 57 public BaseHyperlinkProducer() { 58 } 59 60 public String getHyperlink(JRPrintHyperlink hyperlink) { 61 StringBuffer sb = new StringBuffer (); 62 appendHyperlinkStart(hyperlink, sb); 63 sb.append(getFlowControllerMapping()); 64 sb.append("?_flowId="); 65 sb.append(getReportExecutionFlowId()); 66 67 JRPrintHyperlinkParameters parameters = hyperlink.getHyperlinkParameters(); 68 if (parameters != null) { 69 appendParameters(sb, parameters); 70 } 71 72 appendAdditionalParameters(hyperlink, sb); 73 74 return sb.toString(); 75 } 76 77 protected void appendParameters(StringBuffer sb, JRPrintHyperlinkParameters parameters) { 78 for (Iterator it = parameters.getParameters().iterator(); it.hasNext();) { 79 JRPrintHyperlinkParameter parameter = (JRPrintHyperlinkParameter) it.next(); 80 if (parameter.getName().equals(getHyperlinkParameterReportUnit())) { 81 appendParameter(sb, getUrlParameterReportUnit(), (String ) parameter.getValue()); 82 } else if (parameter.getName().equals(getHyperlinkParameterOutputChannel())) { 83 appendParameter(sb, getUrlParameterOutputChannel(), (String ) parameter.getValue()); 84 } else { 85 appendParameter(sb, parameter); 86 } 87 } 88 } 89 90 protected String encode(String text) { 91 try { 92 return URLEncoder.encode(text, "UTF-8"); 93 } catch (UnsupportedEncodingException e) { 94 throw new JSExceptionWrapper(e); 95 } 96 } 97 98 protected void appendParameter(StringBuffer sb, JRPrintHyperlinkParameter parameter) { 99 String name = parameter.getName(); 100 String valueClassName = parameter.getValueClass(); 101 Class valueClass = loadClass(valueClassName); 102 Object value = parameter.getValue(); 103 if (valueClass.equals(String .class)) { 104 appendParameter(sb, name, (String ) value); 105 } else if (valueClass.equals(Boolean .class)) { 106 if (value != null && ((Boolean ) value).booleanValue()) { 107 appendParameter(sb, name, "true"); 108 } 109 } else if (Number .class.isAssignableFrom(valueClass)) { 110 if (value != null) { 111 appendParameter(sb, name, value.toString()); 112 } 113 } else if (Date .class.isAssignableFrom(valueClass)) { 114 if (value != null) { 115 String formattedValue = getDateFormatter().format(value); 116 appendParameter(sb, name, formattedValue); 117 } 118 } 119 } 120 121 protected Class loadClass(String valueClassName) { 122 try { 123 return Class.forName(valueClassName); 124 } catch (ClassNotFoundException e) { 125 log.error("Parameter class \"" + valueClassName + "\" not found", e); 126 throw new JSExceptionWrapper(e); 127 } 128 } 129 130 protected final void appendParameter(StringBuffer sb, String name, String value) { 131 sb.append('&'); 132 sb.append(encode(name)); 133 134 if (value != null) { 135 sb.append('='); 136 sb.append(encode(value)); 137 } 138 } 139 140 protected abstract void appendHyperlinkStart(JRPrintHyperlink hyperlink, StringBuffer sb); 141 142 protected abstract void appendAdditionalParameters(JRPrintHyperlink hyperlink, StringBuffer sb); 143 } 144 145 public BaseReportExecutionHyperlinkProducerFactory() { 146 } 147 148 public HyperlinkParameterFormatter getDateFormatter() { 149 return dateFormatter; 150 } 151 152 public void setDateFormatter(HyperlinkParameterFormatter dateFormatter) { 153 this.dateFormatter = dateFormatter; 154 } 155 156 public String getFlowControllerMapping() { 157 return flowControllerMapping; 158 } 159 160 public void setFlowControllerMapping(String flowControllerMapping) { 161 this.flowControllerMapping = flowControllerMapping; 162 } 163 164 public String getReportExecutionFlowId() { 165 return reportExecutionFlowId; 166 } 167 168 public void setReportExecutionFlowId(String reportExecutionFlowId) { 169 this.reportExecutionFlowId = reportExecutionFlowId; 170 } 171 172 public String getHyperlinkParameterReportUnit() { 173 return hyperlinkParameterReportUnit; 174 } 175 176 public void setHyperlinkParameterReportUnit( 177 String hyperlinkParameterReportUnitURI) { 178 this.hyperlinkParameterReportUnit = hyperlinkParameterReportUnitURI; 179 } 180 181 public String getUrlParameterReportUnit() { 182 return urlParameterReportUnit; 183 } 184 185 public void setUrlParameterReportUnit(String urlParameterReportUnitURI) { 186 this.urlParameterReportUnit = urlParameterReportUnitURI; 187 } 188 189 public String getHyperlinkParameterOutputChannel() { 190 return hyperlinkParameterOutputChannel; 191 } 192 193 public void setHyperlinkParameterOutputChannel( 194 String hyperlinkParameterOutputChannel) { 195 this.hyperlinkParameterOutputChannel = hyperlinkParameterOutputChannel; 196 } 197 198 public String getUrlParameterOutputChannel() { 199 return urlParameterOutputChannel; 200 } 201 202 public void setUrlParameterOutputChannel(String urlParameterOutputChannel) { 203 this.urlParameterOutputChannel = urlParameterOutputChannel; 204 } 205 206 } 207 | Popular Tags |