KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jaspersoft > jasperserver > api > engine > jasperreports > util > BaseReportExecutionHyperlinkProducerFactory


1 /*
2  * Copyright (C) 2006 JasperSoft http://www.jaspersoft.com
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed WITHOUT ANY WARRANTY; and without the
10  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  * See the GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
15  * or write to:
16  *
17  * Free Software Foundation, Inc.,
18  * 59 Temple Place - Suite 330,
19  * Boston, MA USA 02111-1307
20  */

21 package com.jaspersoft.jasperserver.api.engine.jasperreports.util;
22
23 import java.io.Serializable JavaDoc;
24 import java.io.UnsupportedEncodingException JavaDoc;
25 import java.net.URLEncoder JavaDoc;
26 import java.util.Date JavaDoc;
27 import java.util.Iterator JavaDoc;
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 /**
40  * @author Lucian Chirita (lucianc@users.sourceforge.net)
41  * @version $Id: BaseReportExecutionHyperlinkProducerFactory.java 4287 2006-08-23 12:27:42Z cmatei $
42  */

43 public abstract class BaseReportExecutionHyperlinkProducerFactory implements Serializable JavaDoc {
44
45     protected final static Log log = LogFactory.getLog(BaseReportExecutionHyperlinkProducerFactory.class);
46
47     private HyperlinkParameterFormatter dateFormatter;
48     private String JavaDoc flowControllerMapping;
49     private String JavaDoc reportExecutionFlowId;
50     private String JavaDoc hyperlinkParameterReportUnit;
51     private String JavaDoc urlParameterReportUnit;
52     private String JavaDoc hyperlinkParameterOutputChannel;
53     private String JavaDoc urlParameterOutputChannel;
54         
55     public abstract class BaseHyperlinkProducer implements JRHyperlinkProducer, Serializable JavaDoc {
56         
57         public BaseHyperlinkProducer() {
58         }
59
60         public String JavaDoc getHyperlink(JRPrintHyperlink hyperlink) {
61             StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
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 JavaDoc sb, JRPrintHyperlinkParameters parameters) {
78             for (Iterator JavaDoc it = parameters.getParameters().iterator(); it.hasNext();) {
79                 JRPrintHyperlinkParameter parameter = (JRPrintHyperlinkParameter) it.next();
80                 if (parameter.getName().equals(getHyperlinkParameterReportUnit())) {
81                     appendParameter(sb, getUrlParameterReportUnit(), (String JavaDoc) parameter.getValue());
82                 } else if (parameter.getName().equals(getHyperlinkParameterOutputChannel())) {
83                     appendParameter(sb, getUrlParameterOutputChannel(), (String JavaDoc) parameter.getValue());
84                 } else {
85                     appendParameter(sb, parameter);
86                 }
87             }
88         }
89         
90         protected String JavaDoc encode(String JavaDoc text) {
91             try {
92                 return URLEncoder.encode(text, "UTF-8");
93             } catch (UnsupportedEncodingException JavaDoc e) {
94                 throw new JSExceptionWrapper(e);
95             }
96         }
97
98         protected void appendParameter(StringBuffer JavaDoc sb, JRPrintHyperlinkParameter parameter) {
99             String JavaDoc name = parameter.getName();
100             String JavaDoc valueClassName = parameter.getValueClass();
101             Class JavaDoc valueClass = loadClass(valueClassName);
102             Object JavaDoc value = parameter.getValue();
103             if (valueClass.equals(String JavaDoc.class)) {
104                 appendParameter(sb, name, (String JavaDoc) value);
105             } else if (valueClass.equals(Boolean JavaDoc.class)) {
106                 if (value != null && ((Boolean JavaDoc) value).booleanValue()) {
107                     appendParameter(sb, name, "true");
108                 }
109             } else if (Number JavaDoc.class.isAssignableFrom(valueClass)) {
110                 if (value != null) {
111                     appendParameter(sb, name, value.toString());
112                 }
113             } else if (Date JavaDoc.class.isAssignableFrom(valueClass)) {
114                 if (value != null) {
115                     String JavaDoc formattedValue = getDateFormatter().format(value);
116                     appendParameter(sb, name, formattedValue);
117                 }
118             }
119         }
120
121         protected Class JavaDoc loadClass(String JavaDoc valueClassName) {
122             try {
123                 return Class.forName(valueClassName);
124             } catch (ClassNotFoundException JavaDoc e) {
125                 log.error("Parameter class \"" + valueClassName + "\" not found", e);
126                 throw new JSExceptionWrapper(e);
127             }
128         }
129         
130         protected final void appendParameter(StringBuffer JavaDoc sb, String JavaDoc name, String JavaDoc 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 JavaDoc sb);
141         
142         protected abstract void appendAdditionalParameters(JRPrintHyperlink hyperlink, StringBuffer JavaDoc 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 JavaDoc getFlowControllerMapping() {
157         return flowControllerMapping;
158     }
159
160     public void setFlowControllerMapping(String JavaDoc flowControllerMapping) {
161         this.flowControllerMapping = flowControllerMapping;
162     }
163
164     public String JavaDoc getReportExecutionFlowId() {
165         return reportExecutionFlowId;
166     }
167
168     public void setReportExecutionFlowId(String JavaDoc reportExecutionFlowId) {
169         this.reportExecutionFlowId = reportExecutionFlowId;
170     }
171
172     public String JavaDoc getHyperlinkParameterReportUnit() {
173         return hyperlinkParameterReportUnit;
174     }
175
176     public void setHyperlinkParameterReportUnit(
177             String JavaDoc hyperlinkParameterReportUnitURI) {
178         this.hyperlinkParameterReportUnit = hyperlinkParameterReportUnitURI;
179     }
180
181     public String JavaDoc getUrlParameterReportUnit() {
182         return urlParameterReportUnit;
183     }
184
185     public void setUrlParameterReportUnit(String JavaDoc urlParameterReportUnitURI) {
186         this.urlParameterReportUnit = urlParameterReportUnitURI;
187     }
188
189     public String JavaDoc getHyperlinkParameterOutputChannel() {
190         return hyperlinkParameterOutputChannel;
191     }
192
193     public void setHyperlinkParameterOutputChannel(
194             String JavaDoc hyperlinkParameterOutputChannel) {
195         this.hyperlinkParameterOutputChannel = hyperlinkParameterOutputChannel;
196     }
197
198     public String JavaDoc getUrlParameterOutputChannel() {
199         return urlParameterOutputChannel;
200     }
201
202     public void setUrlParameterOutputChannel(String JavaDoc urlParameterOutputChannel) {
203         this.urlParameterOutputChannel = urlParameterOutputChannel;
204     }
205
206 }
207
Popular Tags