001    /**
002     * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
014    
015    package com.liferay.portal.kernel.servlet;
016    
017    import java.util.ArrayList;
018    import java.util.HashMap;
019    import java.util.List;
020    import java.util.Map;
021    
022    import javax.servlet.http.HttpServletResponse;
023    import javax.servlet.http.HttpServletResponseWrapper;
024    
025    /**
026     * @author Shuyang Zhou
027     */
028    public class HeaderCacheServletResponse extends HttpServletResponseWrapper {
029    
030            public HeaderCacheServletResponse(HttpServletResponse response) {
031                    super(response);
032            }
033    
034            public void addDateHeader(String name, long value) {
035                    List<Header> values = _headers.get(name);
036    
037                    if (values == null) {
038                            values = new ArrayList<Header>();
039    
040                            _headers.put(name, values);
041                    }
042    
043                    Header header = new Header();
044    
045                    header.setType(Header.DATE_TYPE);
046                    header.setDateValue(value);
047    
048                    values.add(header);
049    
050                    super.addDateHeader(name, value);
051            }
052    
053            public void addHeader(String name, String value) {
054                    List<Header> values = _headers.get(name);
055    
056                    if (values == null) {
057                            values = new ArrayList<Header>();
058    
059                            _headers.put(name, values);
060                    }
061    
062                    Header header = new Header();
063    
064                    header.setType(Header.STRING_TYPE);
065                    header.setStringValue(value);
066    
067                    values.add(header);
068    
069                    if (name.equals(HttpHeaders.CONTENT_TYPE)) {
070                            setContentType(value);
071                    }
072    
073                    super.addHeader(name, value);
074            }
075    
076            public void addIntHeader(String name, int value) {
077                    List<Header> values = _headers.get(name);
078    
079                    if (values == null) {
080                            values = new ArrayList<Header>();
081    
082                            _headers.put(name, values);
083                    }
084    
085                    Header header = new Header();
086    
087                    header.setType(Header.INTEGER_TYPE);
088                    header.setIntValue(value);
089    
090                    values.add(header);
091    
092                    super.addIntHeader(name, value);
093            }
094    
095            public String getHeader(String name) {
096                    List<Header> values = _headers.get(name);
097    
098                    if ((values == null) || values.isEmpty()) {
099                            return null;
100                    }
101    
102                    Header header = values.get(0);
103    
104                    return header.toString();
105            }
106    
107            public Map<String, List<Header>> getHeaders() {
108                    return _headers;
109            }
110    
111            public void setDateHeader(String name, long value) {
112                    List<Header> values = new ArrayList<Header>();
113    
114                    _headers.put(name, values);
115    
116                    Header header = new Header();
117    
118                    header.setType(Header.DATE_TYPE);
119                    header.setDateValue(value);
120    
121                    values.add(header);
122    
123                    super.setDateHeader(name, value);
124            }
125    
126            public void setHeader(String name, String value) {
127                    List<Header> values = new ArrayList<Header>();
128    
129                    _headers.put(name, values);
130    
131                    Header header = new Header();
132    
133                    header.setType(Header.STRING_TYPE);
134                    header.setStringValue(value);
135    
136                    values.add(header);
137    
138                    if (name.equals(HttpHeaders.CONTENT_TYPE)) {
139                            setContentType(value);
140                    }
141    
142                    super.setHeader(name, value);
143            }
144    
145            public void setIntHeader(String name, int value) {
146                    List<Header> values = new ArrayList<Header>();
147    
148                    _headers.put(name, values);
149    
150                    Header header = new Header();
151    
152                    header.setType(Header.INTEGER_TYPE);
153                    header.setIntValue(value);
154    
155                    values.add(header);
156    
157                    super.setIntHeader(name, value);
158            }
159    
160            private Map<String, List<Header>> _headers =
161                    new HashMap<String, List<Header>>();
162    
163    }