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.ServletRequest;
33
34 import org.apache.tiles.context.MapEntry;
35
36
37
38
39
40
41
42
43
44 final class ServletParamValuesMap implements Map<String, String[]> {
45
46
47
48
49
50
51
52 public ServletParamValuesMap(ServletRequest request) {
53 this.request = request;
54 }
55
56
57
58
59
60 private ServletRequest request = null;
61
62
63
64 public void clear() {
65 throw new UnsupportedOperationException();
66 }
67
68
69
70 public boolean containsKey(Object key) {
71 return (request.getParameter(key(key)) != null);
72 }
73
74
75
76 public boolean containsValue(Object value) {
77 if (!(value instanceof String[])) {
78 return (false);
79 }
80 String[] test = (String[]) value;
81 Iterator<String[]> values = values().iterator();
82 while (values.hasNext()) {
83 String[] actual = values.next();
84 if (test.length == actual.length) {
85 boolean matched = true;
86 for (int i = 0; i < test.length; i++) {
87 if (!test[i].equals(actual[i])) {
88 matched = false;
89 break;
90 }
91 }
92 if (matched) {
93 return (true);
94 }
95 }
96 }
97 return (false);
98 }
99
100
101
102 @SuppressWarnings("unchecked")
103 public Set<Map.Entry<String, String[]>> entrySet() {
104 Set<Map.Entry<String, String[]>> set = new HashSet<Map.Entry<String, String[]>>();
105 Enumeration<String> keys = request.getParameterNames();
106 String key;
107 while (keys.hasMoreElements()) {
108 key = keys.nextElement();
109 set.add(new MapEntry<String, String[]>(key, request
110 .getParameterValues(key), false));
111 }
112 return (set);
113 }
114
115
116
117 @SuppressWarnings("unchecked")
118 public boolean equals(Object o) {
119 ServletRequest otherRequest = ((ServletParamValuesMap) o).request;
120 boolean retValue = true;
121 synchronized (request) {
122 for (Enumeration<String> attribs = request.getParameterNames(); attribs
123 .hasMoreElements()
124 && retValue;) {
125 String parameterName = attribs.nextElement();
126 retValue = request.getParameterValues(parameterName).equals(
127 otherRequest.getParameterValues(parameterName));
128 }
129 }
130
131 return retValue;
132 }
133
134
135
136 public String[] get(Object key) {
137 return (request.getParameterValues(key(key)));
138 }
139
140
141
142 public int hashCode() {
143 return (request.hashCode());
144 }
145
146
147
148 public boolean isEmpty() {
149 return (size() < 1);
150 }
151
152
153
154 @SuppressWarnings("unchecked")
155 public Set<String> keySet() {
156 Set<String> set = new HashSet<String>();
157 Enumeration<String> keys = request.getParameterNames();
158 while (keys.hasMoreElements()) {
159 set.add(keys.nextElement());
160 }
161 return (set);
162 }
163
164
165
166 public String[] put(String key, String[] value) {
167 throw new UnsupportedOperationException();
168 }
169
170
171
172 public void putAll(Map<? extends String, ? extends String[]> map) {
173 throw new UnsupportedOperationException();
174 }
175
176
177
178 public String[] remove(Object key) {
179 throw new UnsupportedOperationException();
180 }
181
182
183
184 @SuppressWarnings("unchecked")
185 public int size() {
186 int n = 0;
187 Enumeration<String> keys = request.getParameterNames();
188 while (keys.hasMoreElements()) {
189 keys.nextElement();
190 n++;
191 }
192 return (n);
193 }
194
195
196
197 @SuppressWarnings("unchecked")
198 public Collection<String[]> values() {
199 List<String[]> list = new ArrayList<String[]>();
200 Enumeration<String> keys = request.getParameterNames();
201 while (keys.hasMoreElements()) {
202 list.add(request.getParameterValues(keys.nextElement()));
203 }
204 return (list);
205 }
206
207
208
209
210
211
212
213
214
215 private String key(Object key) {
216 if (key == null) {
217 throw new IllegalArgumentException();
218 } else if (key instanceof String) {
219 return ((String) key);
220 } else {
221 return (key.toString());
222 }
223 }
224
225
226 }