/*
 * ====================================================================
 * 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 org.apache.http.protocol;

import org.apache.http.HttpConnection;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.util.Args;

Implementation of HttpContext that provides convenience setters for user assignable attributes and getter for readable attributes.
Since:4.3
/** * Implementation of {@link HttpContext} that provides convenience * setters for user assignable attributes and getter for readable attributes. * * @since 4.3 */
public class HttpCoreContext implements HttpContext {
Attribute name of a HttpConnection object that represents the actual HTTP connection.
/** * Attribute name of a {@link org.apache.http.HttpConnection} object that * represents the actual HTTP connection. */
public static final String HTTP_CONNECTION = "http.connection";
Attribute name of a HttpRequest object that represents the actual HTTP request.
/** * Attribute name of a {@link org.apache.http.HttpRequest} object that * represents the actual HTTP request. */
public static final String HTTP_REQUEST = "http.request";
Attribute name of a HttpResponse object that represents the actual HTTP response.
/** * Attribute name of a {@link org.apache.http.HttpResponse} object that * represents the actual HTTP response. */
public static final String HTTP_RESPONSE = "http.response";
Attribute name of a HttpHost object that represents the connection target.
/** * Attribute name of a {@link org.apache.http.HttpHost} object that * represents the connection target. */
public static final String HTTP_TARGET_HOST = "http.target_host";
Attribute name of a Boolean object that represents the the flag indicating whether the actual request has been fully transmitted to the target host.
/** * Attribute name of a {@link Boolean} object that represents the * the flag indicating whether the actual request has been fully transmitted * to the target host. */
public static final String HTTP_REQ_SENT = "http.request_sent"; public static HttpCoreContext create() { return new HttpCoreContext(new BasicHttpContext()); } public static HttpCoreContext adapt(final HttpContext context) { Args.notNull(context, "HTTP context"); return context instanceof HttpCoreContext ? (HttpCoreContext) context : new HttpCoreContext(context); } private final HttpContext context; public HttpCoreContext(final HttpContext context) { super(); this.context = context; } public HttpCoreContext() { super(); this.context = new BasicHttpContext(); } @Override public Object getAttribute(final String id) { return context.getAttribute(id); } @Override public void setAttribute(final String id, final Object obj) { context.setAttribute(id, obj); } @Override public Object removeAttribute(final String id) { return context.removeAttribute(id); } public <T> T getAttribute(final String attribname, final Class<T> clazz) { Args.notNull(clazz, "Attribute class"); final Object obj = getAttribute(attribname); if (obj == null) { return null; } return clazz.cast(obj); } public <T extends HttpConnection> T getConnection(final Class<T> clazz) { return getAttribute(HTTP_CONNECTION, clazz); } public HttpConnection getConnection() { return getAttribute(HTTP_CONNECTION, HttpConnection.class); } public HttpRequest getRequest() { return getAttribute(HTTP_REQUEST, HttpRequest.class); } public boolean isRequestSent() { final Boolean b = getAttribute(HTTP_REQ_SENT, Boolean.class); return b != null && b.booleanValue(); } public HttpResponse getResponse() { return getAttribute(HTTP_RESPONSE, HttpResponse.class); } public void setTargetHost(final HttpHost host) { setAttribute(HTTP_TARGET_HOST, host); } public HttpHost getTargetHost() { return getAttribute(HTTP_TARGET_HOST, HttpHost.class); } }