1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.dispatcher;
22
23 import java.io.Serializable;
24 import java.util.AbstractMap;
25 import java.util.Enumeration;
26 import java.util.HashSet;
27 import java.util.Set;
28
29 import javax.servlet.http.HttpServletRequest;
30
31
32 /***
33 * A simple implementation of the {@link java.util.Map} interface to handle a collection of request attributes.
34 */
35 public class RequestMap extends AbstractMap implements Serializable {
36
37 private static final long serialVersionUID = -7675640869293787926L;
38
39 private Set<Object> entries;
40 private HttpServletRequest request;
41
42
43 /***
44 * Saves the request to use as the backing for getting and setting values
45 *
46 * @param request the http servlet request.
47 */
48 public RequestMap(final HttpServletRequest request) {
49 this.request = request;
50 }
51
52
53 /***
54 * Removes all attributes from the request as well as clears entries in this map.
55 */
56 public void clear() {
57 entries = null;
58 Enumeration keys = request.getAttributeNames();
59
60 while (keys.hasMoreElements()) {
61 String key = (String) keys.nextElement();
62 request.removeAttribute(key);
63 }
64 }
65
66 /***
67 * Returns a Set of attributes from the http request.
68 *
69 * @return a Set of attributes from the http request.
70 */
71 public Set entrySet() {
72 if (entries == null) {
73 entries = new HashSet<Object>();
74
75 Enumeration enumeration = request.getAttributeNames();
76
77 while (enumeration.hasMoreElements()) {
78 final String key = enumeration.nextElement().toString();
79 final Object value = request.getAttribute(key);
80 entries.add(new Entry() {
81 public boolean equals(Object obj) {
82 Entry entry = (Entry) obj;
83
84 return ((key == null) ? (entry.getKey() == null) : key.equals(entry.getKey())) && ((value == null) ? (entry.getValue() == null) : value.equals(entry.getValue()));
85 }
86
87 public int hashCode() {
88 return ((key == null) ? 0 : key.hashCode()) ^ ((value == null) ? 0 : value.hashCode());
89 }
90
91 public Object getKey() {
92 return key;
93 }
94
95 public Object getValue() {
96 return value;
97 }
98
99 public Object setValue(Object obj) {
100 request.setAttribute(key.toString(), obj);
101
102 return value;
103 }
104 });
105 }
106 }
107
108 return entries;
109 }
110
111 /***
112 * Returns the request attribute associated with the given key or <tt>null</tt> if it doesn't exist.
113 *
114 * @param key the name of the request attribute.
115 * @return the request attribute or <tt>null</tt> if it doesn't exist.
116 */
117 public Object get(Object key) {
118 return request.getAttribute(key.toString());
119 }
120
121 /***
122 * Saves an attribute in the request.
123 *
124 * @param key the name of the request attribute.
125 * @param value the value to set.
126 * @return the object that was just set.
127 */
128 public Object put(Object key, Object value) {
129 entries = null;
130 request.setAttribute(key.toString(), value);
131
132 return get(key);
133 }
134
135 /***
136 * Removes the specified request attribute.
137 *
138 * @param key the name of the attribute to remove.
139 * @return the value that was removed or <tt>null</tt> if the value was not found (and hence, not removed).
140 */
141 public Object remove(Object key) {
142 entries = null;
143
144 Object value = get(key);
145 request.removeAttribute(key.toString());
146
147 return value;
148 }
149 }