### Eclipse Workspace Patch 1.0 #P httpcomponents-client Index: httpclient-cache/src/main/java/org/apache/http/client/cache/params/CacheParams.java =================================================================== --- httpclient-cache/src/main/java/org/apache/http/client/cache/params/CacheParams.java (revision 0) +++ httpclient-cache/src/main/java/org/apache/http/client/cache/params/CacheParams.java (revision 0) @@ -0,0 +1,50 @@ +package org.apache.http.client.cache.params; + +/** + * Java Beans-style configuration for a + * {@link org.apache.http.impl.client.cache.CachingHttpClient}. + */ +public class CacheParams { + + /** Default setting for the maximum object size that will be + * cached, in bytes. + */ + public final static int DEFAULT_MAX_OBJECT_SIZE_BYTES = 8192; + + private int maxObjectSizeBytes = DEFAULT_MAX_OBJECT_SIZE_BYTES; + private boolean isSharedCache = true; + + /** + * Returns the current maximum object size that will be cached. + * @return size in bytes + */ + public int getMaxObjectSizeBytes() { + return maxObjectSizeBytes; + } + + /** + * Specifies the maximum object size that will be eligible for caching. + * @param maxObjectSizeBytes size in bytes + */ + public void setMaxObjectSizeBytes(int maxObjectSizeBytes) { + this.maxObjectSizeBytes = maxObjectSizeBytes; + } + + /** + * Returns whether the cache will behave as a shared cache or not. + * @return true for a shared cache, false for a non-shared (private) + * cache + */ + public boolean isSharedCache() { + return isSharedCache; + } + + /** + * Sets whether the cache should behave as a shared cache or not. + * @param isSharedCache true to behave as a shared cache, false to + * behave as a non-shared (private) cache. + */ + public void setSharedCache(boolean isSharedCache) { + this.isSharedCache = isSharedCache; + } +} Index: httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DoNotTestProtocolRequirements.java =================================================================== --- httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DoNotTestProtocolRequirements.java (revision 980128) +++ httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DoNotTestProtocolRequirements.java (working copy) @@ -41,6 +41,7 @@ import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.cache.HttpCache; +import org.apache.http.client.cache.params.CacheParams; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.cookie.DateUtils; import org.apache.http.message.BasicHttpRequest; @@ -80,7 +81,9 @@ mockBackend = EasyMock.createMock(HttpClient.class); mockEntity = EasyMock.createMock(HttpEntity.class); mockCache = EasyMock.createMock(HttpCache.class); - impl = new CachingHttpClient(mockBackend, cache, MAX_BYTES); + CacheParams params = new CacheParams(); + params.setMaxObjectSizeBytes(MAX_BYTES); + impl = new CachingHttpClient(mockBackend, cache, params); } private HttpResponse make200Response() { Index: httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java =================================================================== --- httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java (revision 980128) +++ httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java (working copy) @@ -46,6 +46,7 @@ import org.apache.http.client.HttpClient; import org.apache.http.client.cache.HttpCache; import org.apache.http.client.cache.HttpCacheEntry; +import org.apache.http.client.cache.params.CacheParams; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.client.RequestWrapper; import org.apache.http.impl.cookie.DateUtils; @@ -84,6 +85,7 @@ private HttpCache mockCache; private HttpRequest request; private HttpResponse originResponse; + private CacheParams params; private CachingHttpClient impl; @@ -101,7 +103,9 @@ mockBackend = EasyMock.createMock(HttpClient.class); mockEntity = EasyMock.createMock(HttpEntity.class); mockCache = EasyMock.createMock(HttpCache.class); - impl = new CachingHttpClient(mockBackend, cache, MAX_BYTES); + params = new CacheParams(); + params.setMaxObjectSizeBytes(MAX_BYTES); + impl = new CachingHttpClient(mockBackend, cache, params); } private void replayMocks() { @@ -140,7 +144,7 @@ mockCache = EasyMock.createMock(HttpCache.class); mockEntity = EasyMock.createMock(HttpEntity.class); - impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES); + impl = new CachingHttpClient(mockBackend, mockCache, params); EasyMock.expect(mockCache.getEntry((String) EasyMock.anyObject())).andReturn(null) .anyTimes(); @@ -2307,7 +2311,7 @@ mockCache.putEntry(EasyMock.eq("http://foo.example.com/thing"), EasyMock.isA(HttpCacheEntry.class)); - impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES); + impl = new CachingHttpClient(mockBackend, mockCache, params); HttpRequest validate = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); validate.setHeader("If-None-Match", "\"etag\""); @@ -2349,7 +2353,7 @@ CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, hdrs, bytes); - impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES); + impl = new CachingHttpClient(mockBackend, mockCache, params); EasyMock.expect(mockCache.getEntry("http://foo.example.com/thing")).andReturn(entry); @@ -2390,7 +2394,7 @@ CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, hdrs, bytes); - impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES); + impl = new CachingHttpClient(mockBackend, mockCache, params); EasyMock.expect(mockCache.getEntry("http://foo.example.com/thing")).andReturn(entry); EasyMock.expect( @@ -2591,7 +2595,7 @@ CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, hdrs, bytes); - impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES); + impl = new CachingHttpClient(mockBackend, mockCache, params); EasyMock.expect(mockCache.getEntry("http://foo.example.com/thing")).andReturn(entry); @@ -2635,7 +2639,7 @@ CacheEntry entry = new CacheEntry(requestTime, responseTime, hdrs, bytes); - impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES); + impl = new CachingHttpClient(mockBackend, mockCache, params); HttpResponse validated = make200Response(); validated.setHeader("Cache-Control", "public"); Index: httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java =================================================================== --- httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java (revision 980128) +++ httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java (working copy) @@ -51,6 +51,7 @@ import org.apache.http.client.cache.HttpCache; import org.apache.http.client.cache.HttpCacheEntry; import org.apache.http.client.cache.HttpCacheUpdateCallback; +import org.apache.http.client.cache.params.CacheParams; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.entity.ByteArrayEntity; @@ -67,8 +68,6 @@ public class CachingHttpClient implements HttpClient { private final static int MAX_CACHE_ENTRIES = 1000; - private final static int DEFAULT_MAX_OBJECT_SIZE_BYTES = 8192; - private final static boolean SUPPORTS_RANGE_AND_CONTENT_RANGE_HEADERS = false; private final AtomicLong cacheHits = new AtomicLong(); @@ -87,16 +86,21 @@ private final CachedResponseSuitabilityChecker suitabilityChecker; private final ConditionalRequestBuilder conditionalRequestBuilder; - private final int maxObjectSizeBytes; + private final CacheEntryUpdater cacheEntryUpdater; + private final int maxObjectSizeBytes; + private final boolean sharedCache; + private final ResponseProtocolCompliance responseCompliance; private final RequestProtocolCompliance requestCompliance; private final Log log = LogFactory.getLog(getClass()); - public CachingHttpClient(HttpClient client, HttpCache cache, int maxObjectSizeBytes) { + public CachingHttpClient(HttpClient client, HttpCache cache, CacheParams params) { super(); + this.maxObjectSizeBytes = params.getMaxObjectSizeBytes(); + this.sharedCache = params.isSharedCache(); this.backend = client; this.responseCache = cache; this.validityPolicy = new CacheValidityPolicy(); @@ -109,19 +113,39 @@ this.suitabilityChecker = new CachedResponseSuitabilityChecker(this.validityPolicy); this.conditionalRequestBuilder = new ConditionalRequestBuilder(); this.cacheEntryUpdater = new CacheEntryUpdater(); - this.maxObjectSizeBytes = maxObjectSizeBytes; + this.responseCompliance = new ResponseProtocolCompliance(); this.requestCompliance = new RequestProtocolCompliance(); } public CachingHttpClient() { - this(new DefaultHttpClient(), new BasicHttpCache(MAX_CACHE_ENTRIES), DEFAULT_MAX_OBJECT_SIZE_BYTES); + this(new DefaultHttpClient(), new BasicHttpCache(MAX_CACHE_ENTRIES), new CacheParams()); } + + public CachingHttpClient(CacheParams params) { + this(new DefaultHttpClient(), new BasicHttpCache(MAX_CACHE_ENTRIES), params); + } - public CachingHttpClient(HttpCache cache, int maxObjectSizeBytes) { - this(new DefaultHttpClient(), cache, maxObjectSizeBytes); + public CachingHttpClient(HttpClient client) { + this(client, new BasicHttpCache(MAX_CACHE_ENTRIES), new CacheParams()); } + + public CachingHttpClient(HttpClient client, CacheParams params) { + this(client, new BasicHttpCache(MAX_CACHE_ENTRIES), params); + } + + public CachingHttpClient(HttpCache cache) { + this(new DefaultHttpClient(), cache, new CacheParams()); + } + + public CachingHttpClient(HttpCache cache, CacheParams params) { + this(new DefaultHttpClient(), cache, params); + } + public CachingHttpClient(HttpClient client, HttpCache cache) { + this(client, cache, new CacheParams()); + } + CachingHttpClient(HttpClient backend, CacheValidityPolicy validityPolicy, ResponseCachingPolicy responseCachingPolicy, CacheEntryGenerator cacheEntryGenerator, URIExtractor uriExtractor, HttpCache responseCache, CachedHttpResponseGenerator responseGenerator, @@ -130,7 +154,9 @@ ConditionalRequestBuilder conditionalRequestBuilder, CacheEntryUpdater entryUpdater, ResponseProtocolCompliance responseCompliance, RequestProtocolCompliance requestCompliance) { - this.maxObjectSizeBytes = DEFAULT_MAX_OBJECT_SIZE_BYTES; + CacheParams params = new CacheParams(); + this.maxObjectSizeBytes = params.getMaxObjectSizeBytes(); + this.sharedCache = params.isSharedCache(); this.backend = backend; this.validityPolicy = validityPolicy; this.responseCachingPolicy = responseCachingPolicy; @@ -383,7 +409,7 @@ } public boolean isSharedCache() { - return true; + return sharedCache; } Date getCurrentDate() { Index: httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java =================================================================== --- httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java (revision 980128) +++ httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java (working copy) @@ -39,6 +39,7 @@ import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.cache.HttpCache; +import org.apache.http.client.cache.params.CacheParams; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.cookie.DateUtils; import org.apache.http.message.BasicHttpEntityEnclosingRequest; @@ -97,7 +98,10 @@ mockBackend = EasyMock.createMock(HttpClient.class); mockEntity = EasyMock.createMock(HttpEntity.class); mockCache = EasyMock.createMock(HttpCache.class); - impl = new CachingHttpClient(mockBackend, cache, MAX_BYTES); + + CacheParams params = new CacheParams(); + params.setMaxObjectSizeBytes(MAX_BYTES); + impl = new CachingHttpClient(mockBackend, cache, params); } private HttpResponse make200Response() { Index: httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java =================================================================== --- httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java (revision 980128) +++ httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java (working copy) @@ -884,7 +884,7 @@ HttpCache cacheImpl = new BasicHttpCache(100); - CachingHttpClient cachingClient = new CachingHttpClient(httpClient, cacheImpl, 8192); + CachingHttpClient cachingClient = new CachingHttpClient(httpClient, cacheImpl); HttpUriRequest request = new HttpGet("http://www.fancast.com/static-28262/styles/base.css");