org.deviceconnect.message.basic.protocol.ConnectionRequestExecutor.java Source code

Java tutorial

Introduction

Here is the source code for org.deviceconnect.message.basic.protocol.ConnectionRequestExecutor.java

Source

/*
 ConnectionRequestExecutor.java
 Copyright (c) 2014 NTT DOCOMO,INC.
 Released under the MIT license
 http://opensource.org/licenses/mit-license.php
 */
package org.deviceconnect.message.basic.protocol;

import java.io.IOException;
import java.util.logging.Logger;

import org.apache.http.HttpClientConnection;
import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpRequestExecutor;
import org.deviceconnect.message.conn.HttpConnection;

/**
 * .
 * @author NTT DOCOMO, INC.
 */
public class ConnectionRequestExecutor extends HttpRequestExecutor {

    /**
     * .
     */
    private Logger mLogger = Logger.getLogger("org.deviceconnect.sdk");

    /**
     * ?.
     */
    private HttpConnection mConnection;

    /**
     * .
     * @param conn 
     */
    public ConnectionRequestExecutor(final HttpConnection conn) {
        mLogger.entering(getClass().getName(), "BasicRequestExecutor");
        mConnection = conn;
        mLogger.exiting(getClass().getName(), "BasicRequestExecutor");
    }

    @Override
    public HttpResponse execute(final HttpRequest request, final HttpClientConnection conn,
            final HttpContext context) throws IOException, HttpException {
        mLogger.entering(getClass().getName(), "execute");

        HttpResponse response = doSendRequest(request, mConnection, context);
        if (response == null) {
            response = doReceiveResponse(request, mConnection, context);
        }

        mLogger.exiting(getClass().getName(), "doSendRequest", response);
        return response;
    }

    @Override
    protected HttpResponse doSendRequest(final HttpRequest request, final HttpClientConnection conn,
            final HttpContext context) throws IOException, HttpException {
        mLogger.entering(getClass().getName(), "doSendRequest");

        conn.sendRequestHeader(request);
        if (request instanceof HttpEntityEnclosingRequest) {
            conn.sendRequestEntity((HttpEntityEnclosingRequest) request);
        }
        conn.flush();

        mLogger.exiting(getClass().getName(), "doSendRequest", null);
        return null;
    }

    @Override
    protected HttpResponse doReceiveResponse(final HttpRequest request, final HttpClientConnection conn,
            final HttpContext context) throws IOException, HttpException {
        mLogger.entering(getClass().getName(), "doReceiveResponse");

        HttpResponse response = null;
        int status = 0;

        HttpConnection hconn = (HttpConnection) conn;

        while (response == null || status < HttpStatus.SC_OK) {
            response = (HttpResponse) hconn.receiveMessageHeader();
            if (canResponseHaveBody(request, response)) {
                hconn.receiveMessageEntity(response);
            }
            status = response.getStatusLine().getStatusCode();
        }

        mLogger.exiting(getClass().getName(), "doReceiveResponse", response);
        return response;
    }

}