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.io.IOException;
22 import java.io.InputStream;
23 import java.util.ArrayList;
24 import java.util.Collection;
25 import java.util.Collections;
26 import java.util.Enumeration;
27 import java.util.List;
28
29 import javax.faces.context.ExternalContext;
30 import javax.servlet.ServletContext;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletResponse;
33
34 import net.sf.jasperreports.jsf.Constants;
35 import net.sf.jasperreports.jsf.component.UIReport;
36 import net.sf.jasperreports.jsf.config.Configuration;
37 import net.sf.jasperreports.jsf.renderkit.ReportRenderer;
38
39
40
41
42
43
44 final class ServletContextHelper extends ExternalContextHelper {
45
46
47
48
49 protected ServletContextHelper() { }
50
51
52
53
54
55
56
57
58 @Override
59 public ReportRenderRequest restoreReportRequest(
60 final ExternalContext context) {
61 final Configuration config = Configuration.getInstance(context);
62 final String viewId = context.getRequestParameterMap()
63 .get(Constants.PARAM_VIEWID);
64 final String viewState = getViewCacheMap(context).get(viewId);
65
66 HttpServletRequest request = (HttpServletRequest) context.getRequest();
67 request = new ReportHttpRenderRequest(request, viewId,
68 config.getDefaultMapping(), viewState);
69 context.setRequest(request);
70 return (ReportRenderRequest) request;
71 }
72
73 @Override
74 @SuppressWarnings("unchecked")
75 public Collection<ContentType> getAcceptedContentTypes(
76 final ExternalContext context) {
77 final HttpServletRequest request = (HttpServletRequest)
78 context.getRequest();
79
80 Enumeration<String> values = request.getHeaders("Accept");
81 List<ContentType> list = new ArrayList<ContentType>();
82 while (values.hasMoreElements()) {
83 ContentType type = new ContentType(values.nextElement());
84 list.add(type);
85 }
86 Collections.sort(list);
87
88 return Collections.unmodifiableList(list);
89 }
90
91
92
93
94
95
96
97 @Override
98 public String getRequestServerName(final ExternalContext context) {
99 final HttpServletRequest request = (HttpServletRequest)
100 context.getRequest();
101 return request.getServerName();
102 }
103
104
105
106
107
108
109
110 @Override
111 public String getRequestURI(final ExternalContext context) {
112 final HttpServletRequest request = (HttpServletRequest)
113 context.getRequest();
114 return request.getRequestURI();
115 }
116
117
118
119
120
121
122
123
124 @Override
125 public String getResourceRealPath(final ExternalContext context,
126 final String name) {
127 final ServletContext ctx = (ServletContext) context.getContext();
128 return ctx.getRealPath(name);
129 }
130
131
132
133
134
135
136
137
138
139
140
141 @Override
142 public void writeHeaders(final ExternalContext context,
143 final ReportRenderer renderer, final UIReport report)
144 throws IOException {
145 final HttpServletResponse response = (HttpServletResponse)
146 context.getResponse();
147 response.setHeader("Cache-Type", "no-cache");
148 response.setHeader("Expires", "0");
149
150 if (report.getName() != null) {
151 response.setHeader("Content-Disposition",
152 renderer.encodeContentDisposition(report,
153 response.getCharacterEncoding()));
154 }
155 }
156
157
158
159
160
161
162
163
164
165 @Override
166 public void writeResponse(final ExternalContext context,
167 final ContentType contentType, final InputStream stream)
168 throws IOException {
169 final HttpServletResponse response = (HttpServletResponse)
170 context.getResponse();
171 response.setContentType(contentType.toString());
172
173 int contentLength = 0;
174 byte[] data = new byte[BUFFER_SIZE];
175 int bytesRead;
176 while (-1 != (bytesRead = stream.read(data))) {
177 response.getOutputStream().write(data, 0, bytesRead);
178 contentLength += bytesRead;
179 }
180
181 response.setContentLength(contentLength);
182 }
183 }