diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /mobile/android/thirdparty/ch/boye/httpclientandroidlib/client/cache/HttpCacheEntry.java | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'mobile/android/thirdparty/ch/boye/httpclientandroidlib/client/cache/HttpCacheEntry.java')
-rw-r--r-- | mobile/android/thirdparty/ch/boye/httpclientandroidlib/client/cache/HttpCacheEntry.java | 263 |
1 files changed, 263 insertions, 0 deletions
diff --git a/mobile/android/thirdparty/ch/boye/httpclientandroidlib/client/cache/HttpCacheEntry.java b/mobile/android/thirdparty/ch/boye/httpclientandroidlib/client/cache/HttpCacheEntry.java new file mode 100644 index 000000000..d03786279 --- /dev/null +++ b/mobile/android/thirdparty/ch/boye/httpclientandroidlib/client/cache/HttpCacheEntry.java @@ -0,0 +1,263 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + * + */ +package ch.boye.httpclientandroidlib.client.cache; + +import java.io.Serializable; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import ch.boye.httpclientandroidlib.Header; +import ch.boye.httpclientandroidlib.ProtocolVersion; +import ch.boye.httpclientandroidlib.StatusLine; +import ch.boye.httpclientandroidlib.annotation.Immutable; +import ch.boye.httpclientandroidlib.client.utils.DateUtils; +import ch.boye.httpclientandroidlib.message.HeaderGroup; +import ch.boye.httpclientandroidlib.protocol.HTTP; +import ch.boye.httpclientandroidlib.util.Args; + +/** + * Structure used to store an {@link ch.boye.httpclientandroidlib.HttpResponse} in a cache. + * Some entries can optionally depend on system resources that may require + * explicit deallocation. In such a case {@link #getResource()} should return + * a non null instance of {@link Resource} that must be deallocated by calling + * {@link Resource#dispose()} method when no longer used. + * + * @since 4.1 + */ +@Immutable +public class HttpCacheEntry implements Serializable { + + private static final long serialVersionUID = -6300496422359477413L; + + private final Date requestDate; + private final Date responseDate; + private final StatusLine statusLine; + private final HeaderGroup responseHeaders; + private final Resource resource; + private final Map<String,String> variantMap; + private final Date date; + + /** + * Create a new {@link HttpCacheEntry} with variants. + * @param requestDate + * Date/time when the request was made (Used for age + * calculations) + * @param responseDate + * Date/time that the response came back (Used for age + * calculations) + * @param statusLine + * HTTP status line from origin response + * @param responseHeaders + * Header[] from original HTTP Response + * @param resource representing origin response body + * @param variantMap describing cache entries that are variants + * of this parent entry; this maps a "variant key" (derived + * from the varying request headers) to a "cache key" (where + * in the cache storage the particular variant is located) + */ + public HttpCacheEntry( + final Date requestDate, + final Date responseDate, + final StatusLine statusLine, + final Header[] responseHeaders, + final Resource resource, + final Map<String,String> variantMap) { + super(); + Args.notNull(requestDate, "Request date"); + Args.notNull(responseDate, "Response date"); + Args.notNull(statusLine, "Status line"); + Args.notNull(responseHeaders, "Response headers"); + this.requestDate = requestDate; + this.responseDate = responseDate; + this.statusLine = statusLine; + this.responseHeaders = new HeaderGroup(); + this.responseHeaders.setHeaders(responseHeaders); + this.resource = resource; + this.variantMap = variantMap != null + ? new HashMap<String,String>(variantMap) + : null; + this.date = parseDate(); + } + + /** + * Create a new {@link HttpCacheEntry}. + * + * @param requestDate + * Date/time when the request was made (Used for age + * calculations) + * @param responseDate + * Date/time that the response came back (Used for age + * calculations) + * @param statusLine + * HTTP status line from origin response + * @param responseHeaders + * Header[] from original HTTP Response + * @param resource representing origin response body + */ + public HttpCacheEntry(final Date requestDate, final Date responseDate, final StatusLine statusLine, + final Header[] responseHeaders, final Resource resource) { + this(requestDate, responseDate, statusLine, responseHeaders, resource, + new HashMap<String,String>()); + } + + /** + * Find the "Date" response header and parse it into a java.util.Date + * @return the Date value of the header or null if the header is not present + */ + private Date parseDate() { + final Header dateHdr = getFirstHeader(HTTP.DATE_HEADER); + if (dateHdr == null) { + return null; + } + return DateUtils.parseDate(dateHdr.getValue()); + } + + /** + * Returns the {@link StatusLine} from the origin + * {@link ch.boye.httpclientandroidlib.HttpResponse}. + */ + public StatusLine getStatusLine() { + return this.statusLine; + } + + /** + * Returns the {@link ProtocolVersion} from the origin + * {@link ch.boye.httpclientandroidlib.HttpResponse}. + */ + public ProtocolVersion getProtocolVersion() { + return this.statusLine.getProtocolVersion(); + } + + /** + * Gets the reason phrase from the origin + * {@link ch.boye.httpclientandroidlib.HttpResponse}, for example, "Not Modified". + */ + public String getReasonPhrase() { + return this.statusLine.getReasonPhrase(); + } + + /** + * Returns the HTTP response code from the origin + * {@link ch.boye.httpclientandroidlib.HttpResponse}. + */ + public int getStatusCode() { + return this.statusLine.getStatusCode(); + } + + /** + * Returns the time the associated origin request was initiated by the + * caching module. + * @return {@link Date} + */ + public Date getRequestDate() { + return requestDate; + } + + /** + * Returns the time the origin response was received by the caching module. + * @return {@link Date} + */ + public Date getResponseDate() { + return responseDate; + } + + /** + * Returns all the headers that were on the origin response. + */ + public Header[] getAllHeaders() { + return responseHeaders.getAllHeaders(); + } + + /** + * Returns the first header from the origin response with the given + * name. + */ + public Header getFirstHeader(final String name) { + return responseHeaders.getFirstHeader(name); + } + + /** + * Gets all the headers with the given name that were on the origin + * response. + */ + public Header[] getHeaders(final String name) { + return responseHeaders.getHeaders(name); + } + + /** + * Gets the Date value of the "Date" header or null if the header is missing or cannot be + * parsed. + * + * @since 4.3 + */ + public Date getDate() { + return date; + } + + /** + * Returns the {@link Resource} containing the origin response body. + */ + public Resource getResource() { + return this.resource; + } + + /** + * Indicates whether the origin response indicated the associated + * resource had variants (i.e. that the Vary header was set on the + * origin response). + * @return {@code true} if this cached response was a variant + */ + public boolean hasVariants() { + return getFirstHeader(HeaderConstants.VARY) != null; + } + + /** + * Returns an index about where in the cache different variants for + * a given resource are stored. This maps "variant keys" to "cache keys", + * where the variant key is derived from the varying request headers, + * and the cache key is the location in the + * {@link ch.boye.httpclientandroidlib.client.cache.HttpCacheStorage} where that + * particular variant is stored. The first variant returned is used as + * the "parent" entry to hold this index of the other variants. + */ + public Map<String, String> getVariantMap() { + return Collections.unmodifiableMap(variantMap); + } + + /** + * Provides a string representation of this instance suitable for + * human consumption. + */ + @Override + public String toString() { + return "[request date=" + this.requestDate + "; response date=" + this.responseDate + + "; statusLine=" + this.statusLine + "]"; + } + +} |