All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.hc.client5.http.cache.HttpCacheContext Maven / Gradle / Ivy

There is a newer version: 5.5-alpha1
Show newest version
/*
 * ====================================================================
 * 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
 * .
 *
 */
package org.apache.hc.client5.http.cache;

import java.util.Map;

import javax.net.ssl.SSLSession;

import org.apache.hc.client5.http.HttpRoute;
import org.apache.hc.client5.http.RouteInfo;
import org.apache.hc.client5.http.auth.AuthCache;
import org.apache.hc.client5.http.auth.AuthExchange;
import org.apache.hc.client5.http.auth.AuthScheme;
import org.apache.hc.client5.http.auth.AuthSchemeFactory;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.cookie.CookieOrigin;
import org.apache.hc.client5.http.cookie.CookieSpec;
import org.apache.hc.client5.http.cookie.CookieSpecFactory;
import org.apache.hc.client5.http.cookie.CookieStore;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.http.protocol.RedirectLocations;
import org.apache.hc.core5.annotation.Internal;
import org.apache.hc.core5.http.EndpointDetails;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.ProtocolVersion;
import org.apache.hc.core5.http.config.Lookup;
import org.apache.hc.core5.http.protocol.HttpContext;

/**
 * Cache execution {@link HttpContext}. This class can be re-used for
 * multiple consecutive logically related request executions that represent
 * a single communication session. This context may not be used concurrently.
 * 

* IMPORTANT: This class is NOT thread-safe and MUST NOT be used concurrently by * multiple message exchanges. * * @since 4.3 */ public class HttpCacheContext extends HttpClientContext { /** * @deprecated Use getter methods */ @Deprecated public static final String CACHE_RESPONSE_STATUS = "http.cache.response.status"; static final String REQUEST_CACHE_CONTROL = "http.cache.request-control"; static final String RESPONSE_CACHE_CONTROL = "http.cache.response-control"; static final String CACHE_ENTRY = "http.cache.entry"; /** * @deprecated Use {@link #castOrCreate(HttpContext)}. */ @Deprecated public static HttpCacheContext adapt(final HttpContext context) { if (context instanceof HttpCacheContext) { return (HttpCacheContext) context; } return new Delegate(HttpClientContext.castOrCreate(context)); } /** * Casts the given generic {@link HttpContext} as {@link HttpCacheContext} or * throws an {@link IllegalStateException} if the given context is not suitable. * * @since 5.4 */ public static HttpCacheContext cast(final HttpContext context) { if (context == null) { return null; } if (context instanceof HttpCacheContext) { return (HttpCacheContext) context; } else if (context instanceof HttpClientContext) { return new Delegate((HttpClientContext) context); } else { return new Delegate(HttpClientContext.cast(context)); } } /** * Casts the given generic {@link HttpContext} as {@link HttpCacheContext} or * creates new {@link HttpCacheContext} if the given context is null.. * * @since 5.4 */ public static HttpCacheContext castOrCreate(final HttpContext context) { return context != null ? cast(context) : create(); } public static HttpCacheContext create() { return new HttpCacheContext(); } private CacheResponseStatus responseStatus; private RequestCacheControl requestCacheControl; private ResponseCacheControl responseCacheControl; private HttpCacheEntry cacheEntry; public HttpCacheContext(final HttpContext context) { super(context); } public HttpCacheContext() { super(); } /** * Represents an outcome of the cache operation and the way the response has been * generated. *

* This context attribute is expected to be populated by the protocol handler. */ public CacheResponseStatus getCacheResponseStatus() { return responseStatus; } /** * @since 5.4 */ @Internal public void setCacheResponseStatus(final CacheResponseStatus responseStatus) { this.responseStatus = responseStatus; } /** * Represents cache control requested by the client. *

* This context attribute is expected to be set by the caller. * * @since 5.4 */ public RequestCacheControl getRequestCacheControl() { return requestCacheControl; } /** * Returns cache control requested by the client or {@link RequestCacheControl#DEFAULT} * if not explicitly set in the context. * * @since 5.4 */ public final RequestCacheControl getRequestCacheControlOrDefault() { final RequestCacheControl cacheControl = getRequestCacheControl(); return cacheControl != null ? cacheControl : RequestCacheControl.DEFAULT; } /** * @since 5.4 */ @Internal public void setRequestCacheControl(final RequestCacheControl requestCacheControl) { this.requestCacheControl = requestCacheControl; } /** * Represents cache control enforced by the server. *

* This context attribute is expected to be populated by the protocol handler. * * @since 5.4 */ public ResponseCacheControl getResponseCacheControl() { return responseCacheControl; } /** * Represents cache control enforced by the server or {@link ResponseCacheControl#DEFAULT} * if not explicitly set in the context. * * @since 5.4 */ public final ResponseCacheControl getResponseCacheControlOrDefault() { final ResponseCacheControl cacheControl = getResponseCacheControl(); return cacheControl != null ? cacheControl : ResponseCacheControl.DEFAULT; } /** * @since 5.4 */ @Internal public void setResponseCacheControl(final ResponseCacheControl responseCacheControl) { this.responseCacheControl = responseCacheControl; } /** * Represents the cache entry the resource of which has been used to generate the response. *

* This context attribute is expected to be populated by the protocol handler. * * @since 5.4 */ public HttpCacheEntry getCacheEntry() { return cacheEntry; } /** * @since 5.4 */ @Internal public void setCacheEntry(final HttpCacheEntry cacheEntry) { this.cacheEntry = cacheEntry; } /** * Internal adaptor class that delegates all its method calls to {@link HttpClientContext}. * To be removed in the future. */ @SuppressWarnings("deprecation") @Internal static class Delegate extends HttpCacheContext { private final HttpClientContext clientContext; Delegate(final HttpClientContext clientContext) { super(null); this.clientContext = clientContext; } @Override public CacheResponseStatus getCacheResponseStatus() { return clientContext.getAttribute(CACHE_RESPONSE_STATUS, CacheResponseStatus.class); } @Override public void setCacheResponseStatus(final CacheResponseStatus responseStatus) { clientContext.setAttribute(CACHE_RESPONSE_STATUS, responseStatus); } @Override public RequestCacheControl getRequestCacheControl() { return clientContext.getAttribute(REQUEST_CACHE_CONTROL, RequestCacheControl.class); } @Override public void setRequestCacheControl(final RequestCacheControl requestCacheControl) { clientContext.setAttribute(REQUEST_CACHE_CONTROL, requestCacheControl); } @Override public ResponseCacheControl getResponseCacheControl() { return clientContext.getAttribute(RESPONSE_CACHE_CONTROL, ResponseCacheControl.class); } @Override public void setResponseCacheControl(final ResponseCacheControl responseCacheControl) { clientContext.setAttribute(RESPONSE_CACHE_CONTROL, responseCacheControl); } @Override public HttpCacheEntry getCacheEntry() { return clientContext.getAttribute(CACHE_ENTRY, HttpCacheEntry.class); } @Override public void setCacheEntry(final HttpCacheEntry cacheEntry) { clientContext.setAttribute(CACHE_ENTRY, cacheEntry); } @Override public RouteInfo getHttpRoute() { return clientContext.getHttpRoute(); } @Override @Internal public void setRoute(final HttpRoute route) { clientContext.setRoute(route); } @Override public RedirectLocations getRedirectLocations() { return clientContext.getRedirectLocations(); } @Override @Internal public void setRedirectLocations(final RedirectLocations redirectLocations) { clientContext.setRedirectLocations(redirectLocations); } @Override public CookieStore getCookieStore() { return clientContext.getCookieStore(); } @Override public void setCookieStore(final CookieStore cookieStore) { clientContext.setCookieStore(cookieStore); } @Override public CookieSpec getCookieSpec() { return clientContext.getCookieSpec(); } @Override @Internal public void setCookieSpec(final CookieSpec cookieSpec) { clientContext.setCookieSpec(cookieSpec); } @Override public CookieOrigin getCookieOrigin() { return clientContext.getCookieOrigin(); } @Override @Internal public void setCookieOrigin(final CookieOrigin cookieOrigin) { clientContext.setCookieOrigin(cookieOrigin); } @Override public Lookup getCookieSpecRegistry() { return clientContext.getCookieSpecRegistry(); } @Override public void setCookieSpecRegistry(final Lookup lookup) { clientContext.setCookieSpecRegistry(lookup); } @Override public Lookup getAuthSchemeRegistry() { return clientContext.getAuthSchemeRegistry(); } @Override public void setAuthSchemeRegistry(final Lookup lookup) { clientContext.setAuthSchemeRegistry(lookup); } @Override public CredentialsProvider getCredentialsProvider() { return clientContext.getCredentialsProvider(); } @Override public void setCredentialsProvider(final CredentialsProvider credentialsProvider) { clientContext.setCredentialsProvider(credentialsProvider); } @Override public AuthCache getAuthCache() { return clientContext.getAuthCache(); } @Override public void setAuthCache(final AuthCache authCache) { clientContext.setAuthCache(authCache); } @Override public Map getAuthExchanges() { return clientContext.getAuthExchanges(); } @Override public AuthExchange getAuthExchange(final HttpHost host) { return clientContext.getAuthExchange(host); } @Override public void setAuthExchange(final HttpHost host, final AuthExchange authExchange) { clientContext.setAuthExchange(host, authExchange); } @Override public void resetAuthExchange(final HttpHost host, final AuthScheme authScheme) { clientContext.resetAuthExchange(host, authScheme); } @Override public Object getUserToken() { return clientContext.getUserToken(); } @Override public void setUserToken(final Object userToken) { clientContext.setUserToken(userToken); } @Override public RequestConfig getRequestConfig() { return clientContext.getRequestConfig(); } @Override public void setRequestConfig(final RequestConfig requestConfig) { clientContext.setRequestConfig(requestConfig); } @Override public String getExchangeId() { return clientContext.getExchangeId(); } @Override public void setExchangeId(final String exchangeId) { clientContext.setExchangeId(exchangeId); } @Override public HttpRequest getRequest() { return clientContext.getRequest(); } @Override public void setRequest(final HttpRequest request) { clientContext.setRequest(request); } @Override public HttpResponse getResponse() { return clientContext.getResponse(); } @Override public void setResponse(final HttpResponse response) { clientContext.setResponse(response); } @Override public EndpointDetails getEndpointDetails() { return clientContext.getEndpointDetails(); } @Override public void setEndpointDetails(final EndpointDetails endpointDetails) { clientContext.setEndpointDetails(endpointDetails); } @Override public SSLSession getSSLSession() { return clientContext.getSSLSession(); } @Override public void setSSLSession(final SSLSession sslSession) { clientContext.setSSLSession(sslSession); } @Override public ProtocolVersion getProtocolVersion() { return clientContext.getProtocolVersion(); } @Override public void setProtocolVersion(final ProtocolVersion version) { clientContext.setProtocolVersion(version); } @Override public Object getAttribute(final String id) { return clientContext.getAttribute(id); } @Override public Object setAttribute(final String id, final Object obj) { return clientContext.setAttribute(id, obj); } @Override public Object removeAttribute(final String id) { return clientContext.removeAttribute(id); } @Override public T getAttribute(final String id, final Class clazz) { return clientContext.getAttribute(id, clazz); } @Override public String toString() { return clientContext.toString(); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy