1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portal.kernel.servlet;
16  
17  import java.util.ArrayList;
18  import java.util.HashMap;
19  import java.util.List;
20  import java.util.Map;
21  
22  import javax.servlet.http.HttpServletResponse;
23  import javax.servlet.http.HttpServletResponseWrapper;
24  
25  /**
26   * <a href="HeaderCacheServletResponse.java.html"><b><i>View Source</i></b></a>
27   *
28   * @author Shuyang Zhou
29   */
30  public abstract class HeaderCacheServletResponse
31      extends HttpServletResponseWrapper {
32  
33      public HeaderCacheServletResponse(HttpServletResponse response) {
34          super(response);
35      }
36  
37      public void addDateHeader(String name, long value) {
38          List<Header> values = _headers.get(name);
39  
40          if (values == null) {
41              values = new ArrayList<Header>();
42  
43              _headers.put(name, values);
44          }
45  
46          Header header = new Header();
47  
48          header.setType(Header.DATE_TYPE);
49          header.setDateValue(value);
50  
51          values.add(header);
52  
53          super.addDateHeader(name, value);
54      }
55  
56      public void addHeader(String name, String value) {
57          List<Header> values = _headers.get(name);
58  
59          if (values == null) {
60              values = new ArrayList<Header>();
61  
62              _headers.put(name, values);
63          }
64  
65          Header header = new Header();
66  
67          header.setType(Header.STRING_TYPE);
68          header.setStringValue(value);
69  
70          values.add(header);
71  
72          if (name.equals(HttpHeaders.CONTENT_TYPE)) {
73              setContentType(value);
74          }
75  
76          super.addHeader(name, value);
77      }
78  
79      public void addIntHeader(String name, int value) {
80          List<Header> values = _headers.get(name);
81  
82          if (values == null) {
83              values = new ArrayList<Header>();
84  
85              _headers.put(name, values);
86          }
87  
88          Header header = new Header();
89  
90          header.setType(Header.INTEGER_TYPE);
91          header.setIntValue(value);
92  
93          values.add(header);
94  
95          super.addIntHeader(name, value);
96      }
97  
98      public String getHeader(String name) {
99          List<Header> values = _headers.get(name);
100 
101         if ((values == null) || values.isEmpty()) {
102             return null;
103         }
104 
105         Header header = values.get(0);
106 
107         return header.toString();
108     }
109 
110     public Map<String, List<Header>> getHeaders() {
111         return _headers;
112     }
113 
114     public void setDateHeader(String name, long value) {
115         List<Header> values = new ArrayList<Header>();
116 
117         _headers.put(name, values);
118 
119         Header header = new Header();
120 
121         header.setType(Header.DATE_TYPE);
122         header.setDateValue(value);
123 
124         values.add(header);
125 
126         super.setDateHeader(name, value);
127     }
128 
129     public void setHeader(String name, String value) {
130         List<Header> values = new ArrayList<Header>();
131 
132         _headers.put(name, values);
133 
134         Header header = new Header();
135 
136         header.setType(Header.STRING_TYPE);
137         header.setStringValue(value);
138 
139         values.add(header);
140 
141         if (name.equals(HttpHeaders.CONTENT_TYPE)) {
142             setContentType(value);
143         }
144 
145         super.setHeader(name, value);
146     }
147 
148     public void setIntHeader(String name, int 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.INTEGER_TYPE);
156         header.setIntValue(value);
157 
158         values.add(header);
159 
160         super.setIntHeader(name, value);
161     }
162 
163     private Map<String, List<Header>> _headers =
164         new HashMap<String, List<Header>>();
165 
166 }