com.microsoft.windowsazure.core.pipeline.apache.HttpServiceRequestContext.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.windowsazure.core.pipeline.apache.HttpServiceRequestContext.java

Source

/**
 * Copyright Microsoft Corporation
 * 
 * Licensed 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.
 */

package com.microsoft.windowsazure.core.pipeline.apache;

import com.microsoft.windowsazure.core.pipeline.filter.ServiceRequestContext;
import org.apache.http.Header;
import org.apache.http.HttpRequest;
import org.apache.http.client.methods.HttpRequestWrapper;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.protocol.HttpContext;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;

public class HttpServiceRequestContext implements ServiceRequestContext {
    private final HttpRequest clientRequest;
    private final HttpContext httpContext;

    public HttpServiceRequestContext(HttpRequest clientRequest, HttpContext httpContext) {
        this.clientRequest = clientRequest;
        this.httpContext = httpContext;
    }

    @Override
    public Object getProperty(final String name) {
        return httpContext.getAttribute(name);
    }

    @Override
    public void setProperty(final String name, final Object value) {
        httpContext.setAttribute(name, value);
    }

    @Override
    public Map<String, String> getAllHeaders() {
        Map<String, String> allHeaders = new HashMap<String, String>();
        for (Header header : clientRequest.getAllHeaders()) {
            allHeaders.put(header.getName(), header.getValue());
        }
        return allHeaders;
    }

    @Override
    public URI getURI() {
        try {
            return new URI(clientRequest.getRequestLine().getUri());
        } catch (URISyntaxException e) {
            return null;
        }
    }

    @Override
    public void setURI(final URI uri) {
        // Do nothing. not supported
    }

    @Override
    public URI getFullURI() {
        HttpRequest request = clientRequest;
        for (;;) {
            URI result = tryGetFullURI(request);
            if (result != null) {
                return result;
            }
            if (!(request instanceof HttpRequestWrapper)) {
                break;
            }
            HttpRequestWrapper wrapper = (HttpRequestWrapper) request;
            request = wrapper.getOriginal();
        }
        throw new UnsupportedOperationException("The full URI is not available");
    }

    private static URI tryGetFullURI(HttpRequest request) {
        if (!(request instanceof HttpUriRequest)) {
            return null;
        }
        HttpUriRequest uriRequest = (HttpUriRequest) request;
        URI uri = uriRequest.getURI();
        return isFullURI(uri) ? uri : null;
    }

    private static boolean isFullURI(URI uri) {
        if (uri == null) {
            return false;
        }
        String host = uri.getHost();
        if (host == null || host.length() == 0) {
            return false;
        }
        return true;
    }

    @Override
    public String getMethod() {
        return clientRequest.getRequestLine().getMethod();
    }

    @Override
    public void setMethod(String method) {
        // Do nothing. not supported
    }

    @Override
    public Object getEntity() {
        // Do nothing. not supported
        return null;
    }

    @Override
    public void setEntity(final Object entity) {
        // Do nothing. not supported
    }

    @Override
    public String getHeader(final String name) {
        final Header first = clientRequest.getFirstHeader(name);
        return first != null ? first.getValue() : null;
    }

    @Override
    public void setHeader(final String name, final String value) {
        clientRequest.setHeader(name, value);
    }

    @Override
    public void removeHeader(final String name) {
        clientRequest.removeHeaders(name);
    }
}