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 public void addDateHeader(String name, long value) {
037 List<Header> values = _headers.get(name);
038
039 if (values == null) {
040 values = new ArrayList<Header>();
041
042 _headers.put(name, values);
043 }
044
045 Header header = new Header();
046
047 header.setType(Header.DATE_TYPE);
048 header.setDateValue(value);
049
050 values.add(header);
051
052 super.addDateHeader(name, value);
053 }
054
055 public void addHeader(String name, String value) {
056 List<Header> values = _headers.get(name);
057
058 if (values == null) {
059 values = new ArrayList<Header>();
060
061 _headers.put(name, values);
062 }
063
064 Header header = new Header();
065
066 header.setType(Header.STRING_TYPE);
067 header.setStringValue(value);
068
069 values.add(header);
070
071 if (name.equals(HttpHeaders.CONTENT_TYPE)) {
072 setContentType(value);
073 }
074
075 super.addHeader(name, value);
076 }
077
078 public void addIntHeader(String name, int value) {
079 List<Header> values = _headers.get(name);
080
081 if (values == null) {
082 values = new ArrayList<Header>();
083
084 _headers.put(name, values);
085 }
086
087 Header header = new Header();
088
089 header.setType(Header.INTEGER_TYPE);
090 header.setIntValue(value);
091
092 values.add(header);
093
094 super.addIntHeader(name, value);
095 }
096
097 public String getContentType() {
098 return _contentType;
099 }
100
101 public String getHeader(String name) {
102 List<Header> values = _headers.get(name);
103
104 if ((values == null) || values.isEmpty()) {
105 return null;
106 }
107
108 Header header = values.get(0);
109
110 return header.toString();
111 }
112
113 public Map<String, List<Header>> getHeaders() {
114 return _headers;
115 }
116
117 public int getStatus() {
118 return _status;
119 }
120
121 public void sendError(int status) throws IOException {
122 _status = status;
123
124 super.sendError(status);
125 }
126
127 public void sendError(int status, String msg) throws IOException {
128 _status = status;
129
130 super.sendError(status, msg);
131 }
132
133 public void sendRedirect(String location) throws IOException {
134 super.sendRedirect(location);
135
136 setStatus(SC_MOVED_TEMPORARILY);
137 }
138
139 public void setContentLength(int contentLength) {
140 }
141
142 public void setContentType(String contentType) {
143 _contentType = contentType;
144
145 super.setContentType(contentType);
146 }
147
148 public void setDateHeader(String name, long value) {
149 List<Header> values = new ArrayList<Header>();
150
151 _headers.put(name, values);
152
153 Header header = new Header();
154
155 header.setType(Header.DATE_TYPE);
156 header.setDateValue(value);
157
158 values.add(header);
159
160 super.setDateHeader(name, value);
161 }
162
163 public void setHeader(String name, String value) {
164 List<Header> values = new ArrayList<Header>();
165
166 _headers.put(name, values);
167
168 Header header = new Header();
169
170 header.setType(Header.STRING_TYPE);
171 header.setStringValue(value);
172
173 values.add(header);
174
175 if (name.equals(HttpHeaders.CONTENT_TYPE)) {
176 setContentType(value);
177 }
178
179 super.setHeader(name, value);
180 }
181
182 public void setIntHeader(String name, int value) {
183 List<Header> values = new ArrayList<Header>();
184
185 _headers.put(name, values);
186
187 Header header = new Header();
188
189 header.setType(Header.INTEGER_TYPE);
190 header.setIntValue(value);
191
192 values.add(header);
193
194 super.setIntHeader(name, value);
195 }
196
197 public void setStatus(int status) {
198 _status = status;
199
200 super.setStatus(status);
201 }
202
203 private String _contentType;
204 private Map<String, List<Header>> _headers =
205 new HashMap<String, List<Header>>();
206 private int _status = SC_OK;
207
208 }