1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.tiles.servlet.context;
22
23 import java.util.ArrayList;
24 import java.util.Collection;
25 import java.util.Enumeration;
26 import java.util.HashSet;
27 import java.util.Iterator;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.Set;
31
32 import javax.servlet.http.HttpServletRequest;
33 import javax.servlet.http.HttpServletResponse;
34
35 import org.apache.tiles.context.MapEntry;
36
37
38
39
40
41
42
43
44 final class ServletHeaderMap implements Map<String, String> {
45
46
47
48
49
50
51
52
53 public ServletHeaderMap(HttpServletRequest request) {
54 this(request, null);
55 }
56
57
58
59
60
61
62
63
64
65 public ServletHeaderMap(HttpServletRequest request, HttpServletResponse response) {
66 this.request = request;
67 this.response = response;
68 }
69
70
71
72
73
74 private HttpServletRequest request = null;
75
76
77
78
79 private HttpServletResponse response = null;
80
81
82
83 public void clear() {
84 throw new UnsupportedOperationException();
85 }
86
87
88
89 public boolean containsKey(Object key) {
90 return (request.getHeader(key(key)) != null);
91 }
92
93
94
95 public boolean containsValue(Object value) {
96 Iterator<String> values = values().iterator();
97 while (values.hasNext()) {
98 if (value.equals(values.next())) {
99 return (true);
100 }
101 }
102 return (false);
103 }
104
105
106
107 @SuppressWarnings("unchecked")
108 public Set<Map.Entry<String, String>> entrySet() {
109 Set<Map.Entry<String, String>> set = new HashSet<Map.Entry<String, String>>();
110 Enumeration<String> keys = request.getHeaderNames();
111 String key;
112 while (keys.hasMoreElements()) {
113 key = keys.nextElement();
114 set.add(new MapEntry<String, String>(key, request.getHeader(key),
115 false));
116 }
117 return (set);
118 }
119
120
121
122 @SuppressWarnings("unchecked")
123 public boolean equals(Object o) {
124 HttpServletRequest otherRequest = ((ServletHeaderMap) o).request;
125 boolean retValue = true;
126 synchronized (request) {
127 for (Enumeration<String> attribs = request.getHeaderNames(); attribs
128 .hasMoreElements()
129 && retValue;) {
130 String parameterName = attribs.nextElement();
131 retValue = request.getHeader(parameterName).equals(
132 otherRequest.getHeader(parameterName));
133 }
134 }
135
136 return retValue;
137 }
138
139
140
141 public String get(Object key) {
142 return (request.getHeader(key(key)));
143 }
144
145
146
147 public int hashCode() {
148 return (request.hashCode());
149 }
150
151
152
153 public boolean isEmpty() {
154 return (size() < 1);
155 }
156
157
158
159 @SuppressWarnings("unchecked")
160 public Set<String> keySet() {
161 Set<String> set = new HashSet<String>();
162 Enumeration<String> keys = request.getHeaderNames();
163 while (keys.hasMoreElements()) {
164 set.add(keys.nextElement());
165 }
166 return (set);
167 }
168
169
170
171 public String put(String key, String value) {
172 response.setHeader(key, value);
173 return value;
174 }
175
176
177
178 public void putAll(Map<? extends String, ? extends String> map) {
179 for (Map.Entry<? extends String, ? extends String> entry : map
180 .entrySet()) {
181 response.setHeader(entry.getKey(), entry.getValue());
182 }
183 }
184
185
186
187 public String remove(Object key) {
188 throw new UnsupportedOperationException();
189 }
190
191
192
193 @SuppressWarnings("unchecked")
194 public int size() {
195 int n = 0;
196 Enumeration<String> keys = request.getHeaderNames();
197 while (keys.hasMoreElements()) {
198 keys.nextElement();
199 n++;
200 }
201 return (n);
202 }
203
204
205
206 @SuppressWarnings("unchecked")
207 public Collection<String> values() {
208 List<String> list = new ArrayList<String>();
209 Enumeration<String> keys = request.getHeaderNames();
210 while (keys.hasMoreElements()) {
211 list.add(request.getHeader(keys.nextElement()));
212 }
213 return (list);
214 }
215
216
217
218
219
220
221
222
223
224 private String key(Object key) {
225 if (key == null) {
226 throw new IllegalArgumentException();
227 } else if (key instanceof String) {
228 return ((String) key);
229 } else {
230 return (key.toString());
231 }
232 }
233
234
235 }