001
014
015 package com.liferay.portal.kernel.servlet;
016
017 import java.io.IOException;
018
019 import java.util.ArrayList;
020 import java.util.HashMap;
021 import java.util.List;
022 import java.util.Map;
023
024 import javax.servlet.http.HttpServletResponse;
025 import javax.servlet.http.HttpServletResponseWrapper;
026
027
030 public class HeaderCacheServletResponse extends HttpServletResponseWrapper {
031
032 public HeaderCacheServletResponse(HttpServletResponse response) {
033 super(response);
034 }
035
036 @Override
037 public void addDateHeader(String name, long value) {
038 List<Header> values = _headers.get(name);
039
040 if (values == null) {
041 values = new ArrayList<Header>();
042
043 _headers.put(name, values);
044 }
045
046 Header header = new Header();
047
048 header.setType(Header.DATE_TYPE);
049 header.setDateValue(value);
050
051 values.add(header);
052
053 super.addDateHeader(name, value);
054 }
055
056 @Override
057 public void addHeader(String name, String value) {
058 List<Header> values = _headers.get(name);
059
060 if (values == null) {
061 values = new ArrayList<Header>();
062
063 _headers.put(name, values);
064 }
065
066 Header header = new Header();
067
068 header.setType(Header.STRING_TYPE);
069 header.setStringValue(value);
070
071 values.add(header);
072
073 if (name.equals(HttpHeaders.CONTENT_TYPE)) {
074 setContentType(value);
075 }
076
077 super.addHeader(name, value);
078 }
079
080 @Override
081 public void addIntHeader(String name, int value) {
082 List<Header> values = _headers.get(name);
083
084 if (values == null) {
085 values = new ArrayList<Header>();
086
087 _headers.put(name, values);
088 }
089
090 Header header = new Header();
091
092 header.setType(Header.INTEGER_TYPE);
093 header.setIntValue(value);
094
095 values.add(header);
096
097 super.addIntHeader(name, value);
098 }
099
100 @Override
101 public void flushBuffer() {
102 _committed = true;
103 }
104
105 @Override
106 public String getContentType() {
107 return _contentType;
108 }
109
110 public String getHeader(String name) {
111 List<Header> values = _headers.get(name);
112
113 if ((values == null) || values.isEmpty()) {
114 return null;
115 }
116
117 Header header = values.get(0);
118
119 return header.toString();
120 }
121
122 public Map<String, List<Header>> getHeaders() {
123 return _headers;
124 }
125
126 public int getStatus() {
127 return _status;
128 }
129
130 @Override
131 public boolean isCommitted() {
132 return _committed;
133 }
134
135 @Override
136 public void sendError(int status) throws IOException {
137 _status = status;
138
139 super.sendError(status);
140 }
141
142 @Override
143 public void sendError(int status, String msg) throws IOException {
144 _status = status;
145
146 super.sendError(status, msg);
147 }
148
149 @Override
150 public void sendRedirect(String location) throws IOException {
151 super.sendRedirect(location);
152
153 setStatus(SC_MOVED_PERMANENTLY);
154 }
155
156 @Override
157 public void setContentLength(int contentLength) {
158 }
159
160 @Override
161 public void setContentType(String contentType) {
162 _contentType = contentType;
163
164 super.setContentType(contentType);
165 }
166
167 @Override
168 public void setDateHeader(String name, long value) {
169 List<Header> values = new ArrayList<Header>();
170
171 _headers.put(name, values);
172
173 Header header = new Header();
174
175 header.setType(Header.DATE_TYPE);
176 header.setDateValue(value);
177
178 values.add(header);
179
180 super.setDateHeader(name, value);
181 }
182
183 @Override
184 public void setHeader(String name, String value) {
185 List<Header> values = new ArrayList<Header>();
186
187 _headers.put(name, values);
188
189 Header header = new Header();
190
191 header.setType(Header.STRING_TYPE);
192 header.setStringValue(value);
193
194 values.add(header);
195
196 if (name.equals(HttpHeaders.CONTENT_TYPE)) {
197 setContentType(value);
198 }
199
200 super.setHeader(name, value);
201 }
202
203 @Override
204 public void setIntHeader(String name, int value) {
205 List<Header> values = new ArrayList<Header>();
206
207 _headers.put(name, values);
208
209 Header header = new Header();
210
211 header.setType(Header.INTEGER_TYPE);
212 header.setIntValue(value);
213
214 values.add(header);
215
216 super.setIntHeader(name, value);
217 }
218
219 @Override
220 public void setStatus(int status) {
221 _status = status;
222
223 super.setStatus(status);
224 }
225
226 private boolean _committed;
227 private String _contentType;
228 private Map<String, List<Header>> _headers =
229 new HashMap<String, List<Header>>();
230 private int _status = SC_OK;
231
232 }