import java.net.*; import java.io.*; import java.util.*; public class SimpleCacheResponse extends CacheResponse { private Map> headers; private SimpleCacheRequest request; private Date expires; public SimpleCacheResponse(SimpleCacheRequest request, URLConnection uc) throws IOException { this.request = request; // deliberate shadowing; we need to fill the map and // then make it unmodifiable Map> headers = new HashMap>(); String value = ""; for (int i = 0;; i++) { String name = uc.getHeaderFieldKey(i); value = uc.getHeaderField(i); if (value == null) break; List values = headers.get(name); if (values == null) { values = new ArrayList(1); headers.put(name, values); } values.add(value); } long expiration = uc.getExpiration(); if (expiration != 0) { this.expires = new Date(expiration); } this.headers = Collections.unmodifiableMap(headers); } public InputStream getBody() { return new ByteArrayInputStream(request.getData()); } public Map> getHeaders() throws IOException { return headers; } public boolean isExpired() { if (expires == null) return false; else { Date now = new Date(); return expires.before(now); } } }