1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.sf.jasperreports.jsf.context;
20
21 import java.util.Collections;
22 import java.util.Enumeration;
23 import java.util.HashMap;
24 import java.util.Map;
25
26 import javax.faces.render.ResponseStateManager;
27 import javax.servlet.http.HttpServletRequest;
28 import javax.servlet.http.HttpServletRequestWrapper;
29 import net.sf.jasperreports.jsf.Constants;
30
31 import net.sf.jasperreports.jsf.util.Util;
32
33
34
35
36
37
38 final class ReportHttpRenderRequest extends HttpServletRequestWrapper
39 implements ReportRenderRequest {
40
41
42 private String pathInfo;
43
44 private String servletPath;
45
46 private String viewId;
47
48 private String viewState;
49
50
51
52
53
54
55
56
57
58 public ReportHttpRenderRequest(final HttpServletRequest request,
59 final String viewId, final String facesMapping,
60 final String viewState) {
61 super(request);
62 this.viewId = viewId;
63 this.viewState = viewState;
64 reverseEngineerPaths(facesMapping);
65 }
66
67
68
69
70
71
72
73
74 @Override
75 public String getParameter(final String name) {
76 String[] values = getParameterValues(name);
77 if (values == null || values.length == 0) {
78 return null;
79 } else {
80 return values[0];
81 }
82 }
83
84
85
86
87
88
89 @Override
90 @SuppressWarnings("unchecked")
91 public Map<String, String[]> getParameterMap() {
92 Map<String, String[]> paramMap = new HashMap<String, String[]>();
93 paramMap.putAll(super.getParameterMap());
94 paramMap.put(ResponseStateManager.VIEW_STATE_PARAM,
95 new String[]{viewState});
96 return Collections.unmodifiableMap(paramMap);
97 }
98
99
100
101
102
103
104 @Override
105 public Enumeration<String> getParameterNames() {
106 return Collections.enumeration(getParameterMap().keySet());
107 }
108
109
110
111
112
113
114
115 @Override
116 public String[] getParameterValues(final String name) {
117 return getParameterMap().get(name);
118 }
119
120
121
122
123
124
125 @Override
126 public String getPathInfo() {
127 return pathInfo;
128 }
129
130
131
132
133
134
135 public String getReportClientId() {
136 return getRequest().getParameter(Constants.PARAM_CLIENTID);
137 }
138
139
140
141
142
143
144 @Override
145 public String getServletPath() {
146 return servletPath;
147 }
148
149
150
151
152
153
154 public String getViewId() {
155 return viewId;
156 }
157
158
159
160
161 public void release() {
162 servletPath = null;
163 pathInfo = null;
164 }
165
166
167
168
169
170
171
172 private void reverseEngineerPaths(final String facesMapping) {
173 if (Util.isPrefixMapped(facesMapping)) {
174 int i = facesMapping.indexOf("/*");
175 if (i != -1) {
176 servletPath = facesMapping.substring(0, i);
177 } else {
178 servletPath = facesMapping;
179 }
180 pathInfo = viewId;
181 } else {
182 servletPath = viewId.substring(0, viewId.lastIndexOf('.'))
183 + facesMapping.substring(facesMapping.indexOf('.'));
184 pathInfo = null;
185 }
186 }
187 }