60 |
* @author Chris Burdess (dog@gnu.org) |
* @author Chris Burdess (dog@gnu.org) |
61 |
*/ |
*/ |
62 |
public class Headers |
public class Headers |
63 |
implements Map |
extends LinkedHashMap |
64 |
{ |
{ |
65 |
|
|
66 |
static final DateFormat dateFormat = new HTTPDateFormat(); |
static final DateFormat dateFormat = new HTTPDateFormat(); |
143 |
|
|
144 |
} |
} |
145 |
|
|
|
private LinkedHashMap headers; |
|
|
|
|
146 |
public Headers() |
public Headers() |
147 |
{ |
{ |
|
headers = new LinkedHashMap(); |
|
|
} |
|
|
|
|
|
public int size() |
|
|
{ |
|
|
return headers.size(); |
|
|
} |
|
|
|
|
|
public boolean isEmpty() |
|
|
{ |
|
|
return headers.isEmpty(); |
|
148 |
} |
} |
149 |
|
|
150 |
public boolean containsKey(Object key) |
public boolean containsKey(Object key) |
151 |
{ |
{ |
152 |
return headers.containsKey(new Header((String) key)); |
return super.containsKey(new Header((String) key)); |
|
} |
|
|
|
|
|
public boolean containsValue(Object value) |
|
|
{ |
|
|
return headers.containsValue(value); |
|
153 |
} |
} |
154 |
|
|
155 |
public Object get(Object key) |
public Object get(Object key) |
156 |
{ |
{ |
157 |
return headers.get(new Header((String) key)); |
return super.get(new Header((String) key)); |
158 |
} |
} |
159 |
|
|
160 |
/** |
/** |
162 |
*/ |
*/ |
163 |
public String getValue(String header) |
public String getValue(String header) |
164 |
{ |
{ |
165 |
return (String) headers.get(new Header(header)); |
return (String) super.get(new Header(header)); |
166 |
} |
} |
167 |
|
|
168 |
/** |
/** |
187 |
} |
} |
188 |
|
|
189 |
/** |
/** |
190 |
|
* Returns the value of the specified header as a long, or -1 if the |
191 |
|
* header is not present or cannot be parsed as a long. |
192 |
|
*/ |
193 |
|
public long getLongValue(String header) |
194 |
|
{ |
195 |
|
String val = getValue(header); |
196 |
|
if (val == null) |
197 |
|
{ |
198 |
|
return -1; |
199 |
|
} |
200 |
|
try |
201 |
|
{ |
202 |
|
return Long.parseLong(val); |
203 |
|
} |
204 |
|
catch (NumberFormatException e) |
205 |
|
{ |
206 |
|
} |
207 |
|
return -1; |
208 |
|
} |
209 |
|
|
210 |
|
/** |
211 |
* Returns the value of the specified header as a date, |
* Returns the value of the specified header as a date, |
212 |
* or <code>null</code> if the header is not present or not a date. |
* or <code>null</code> if the header is not present or not a date. |
213 |
*/ |
*/ |
230 |
|
|
231 |
public Object put(Object key, Object value) |
public Object put(Object key, Object value) |
232 |
{ |
{ |
233 |
return headers.put(new Header((String) key), value); |
return super.put(new Header((String) key), value); |
234 |
} |
} |
235 |
|
|
236 |
public Object remove(Object key) |
public Object remove(Object key) |
237 |
{ |
{ |
238 |
return headers.remove(new Header((String) key)); |
return super.remove(new Header((String) key)); |
239 |
} |
} |
240 |
|
|
241 |
public void putAll(Map t) |
public void putAll(Map t) |
244 |
{ |
{ |
245 |
String key = (String) i.next(); |
String key = (String) i.next(); |
246 |
String value = (String) t.get(key); |
String value = (String) t.get(key); |
247 |
headers.put(new Header(key), value); |
put(key, value); |
248 |
} |
} |
249 |
} |
} |
250 |
|
|
|
public void clear() |
|
|
{ |
|
|
headers.clear(); |
|
|
} |
|
|
|
|
251 |
public Set keySet() |
public Set keySet() |
252 |
{ |
{ |
253 |
Set keys = headers.keySet(); |
Set keys = super.keySet(); |
254 |
Set ret = new LinkedHashSet(); |
Set ret = new LinkedHashSet(); |
255 |
for (Iterator i = keys.iterator(); i.hasNext(); ) |
for (Iterator i = keys.iterator(); i.hasNext(); ) |
256 |
{ |
{ |
259 |
return ret; |
return ret; |
260 |
} |
} |
261 |
|
|
|
public Collection values() |
|
|
{ |
|
|
return headers.values(); |
|
|
} |
|
|
|
|
262 |
public Set entrySet() |
public Set entrySet() |
263 |
{ |
{ |
264 |
Set entries = headers.entrySet(); |
Set entries = super.entrySet(); |
265 |
Set ret = new LinkedHashSet(); |
Set ret = new LinkedHashSet(); |
266 |
for (Iterator i = entries.iterator(); i.hasNext(); ) |
for (Iterator i = entries.iterator(); i.hasNext(); ) |
267 |
{ |
{ |
271 |
return ret; |
return ret; |
272 |
} |
} |
273 |
|
|
|
public boolean equals(Object other) |
|
|
{ |
|
|
return headers.equals(other); |
|
|
} |
|
|
|
|
|
public int hashCode() |
|
|
{ |
|
|
return headers.hashCode(); |
|
|
} |
|
|
|
|
274 |
/** |
/** |
275 |
* Parse the specified input stream, adding headers to this collection. |
* Parse the specified input stream, adding headers to this collection. |
276 |
*/ |
*/ |
281 |
(LineInputStream) in : new LineInputStream(in); |
(LineInputStream) in : new LineInputStream(in); |
282 |
|
|
283 |
String name = null; |
String name = null; |
284 |
StringBuffer value = new StringBuffer(); |
StringBuilder value = new StringBuilder(); |
285 |
while (true) |
while (true) |
286 |
{ |
{ |
287 |
String line = lin.readLine(); |
String line = lin.readLine(); |
337 |
private void addValue(String name, String value) |
private void addValue(String name, String value) |
338 |
{ |
{ |
339 |
Header key = new Header(name); |
Header key = new Header(name); |
340 |
String old = (String) headers.get(key); |
String old = (String) super.get(key); |
341 |
if (old == null) |
if (old == null) |
342 |
{ |
{ |
343 |
headers.put(key, value); |
super.put(key, value); |
344 |
} |
} |
345 |
else |
else |
346 |
{ |
{ |
347 |
headers.put(key, old + ", " + value); |
super.put(key, old + ", " + value); |
348 |
} |
} |
349 |
} |
} |
350 |
|
|