org.mule.modules.constantcontact.RequestExecutor.java Source code

Java tutorial

Introduction

Here is the source code for org.mule.modules.constantcontact.RequestExecutor.java

Source

/**
 * Mule Constant Contact Connector
 *
 * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
 *
 * The software in this package is published under the terms of the CPAL v1.0
 * license, a copy of which has been included with this distribution in the
 * LICENSE.txt file.
 */

/**
 * This file was automatically generated by the Mule Development Kit
 */
package org.mule.modules.constantcontact;

import org.apache.commons.httpclient.auth.AuthPolicy;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Logger;

import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;

public class RequestExecutor {

    private static final Logger LOGGER = Logger.getLogger(RequestExecutor.class);
    private DefaultHttpClient httpclient = new DefaultHttpClient();

    public RequestExecutor(String apiKey, String username, String password) {
        String loginUsername = apiKey + "%" + username;
        httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials(loginUsername, password));
        httpclient.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, Arrays.asList(AuthPolicy.BASIC));
    }

    public String doGetRequest(String uri) throws ConstantContactException {
        HttpGet httpGet = new HttpGet(uri);
        return doGetRequest(httpGet);
    }

    public String doGetRequest(HttpGet httpGet) throws ConstantContactException {
        return executeRequest(httpGet).getResponseText();
    }

    public Response doDeleteRequest(String s) throws ConstantContactException {
        HttpDelete httpDelete = new HttpDelete(s);
        return executeRequest(httpDelete);
    }

    public void doDeleteRequest(String uri, int expectedHttpStatusCode) throws ConstantContactException {
        Response response = doDeleteRequest(uri);
        if (response.getHttpStatusCode() != expectedHttpStatusCode) {
            throw new ConstantContactException(
                    "DELETE request return HTTP status code different than expected: expected="
                            + expectedHttpStatusCode + " actual=" + response.getHttpStatusCode(),
                    response.getHttpStatusCode(), response.getResponseText());
        }
    }

    public String doPostRequest(HttpPost httpPost) throws ConstantContactException {
        return executeRequest(httpPost).getResponseText();
    }

    private Response executeRequest(HttpRequestBase httpRequest) throws ConstantContactException {
        InputStream responseStream = null;
        try {
            logRequest(httpRequest);
            HttpResponse httpResponse = httpclient.execute(httpRequest);
            HttpEntity responseEntity = httpResponse.getEntity();
            int status = httpResponse.getStatusLine().getStatusCode();

            Response response;
            if (responseEntity != null) {
                responseStream = responseEntity.getContent();
                response = new Response(status, IOUtils.toString(responseStream));
            } else {
                response = new Response(status, "");
            }

            logResponse(response);
            // If receive anything but a 200 status, return a null input stream
            if (status >= HttpStatus.SC_BAD_REQUEST) {
                throw new ConstantContactException("Received HTTP status code greater than or equal to 400",
                        httpRequest, response);
            }
            return response;
        } catch (IOException e) {
            throw new ConstantContactException(e);
        } finally {
            IOUtils.closeQuietly(responseStream);
        }
    }

    private void logResponse(Response response) {
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("Response received from server: status code: " + response.getHttpStatusCode()
                    + " - response text: " + response.getResponseText());
        }
    }

    private void logRequest(HttpRequestBase httpRequest) throws IOException {
        if (LOGGER.isDebugEnabled()) {
            if (httpRequest instanceof HttpEntityEnclosingRequest) {
                LOGGER.debug("Executing HTTP request: method = " + httpRequest.getMethod() + " - URI = "
                        + httpRequest.getURI() + " - body = "
                        + IOUtils.toString(((HttpEntityEnclosingRequest) httpRequest).getEntity().getContent()));
            } else {
                LOGGER.debug("Executing HTTP request: method = " + httpRequest.getMethod() + " - URI = "
                        + httpRequest.getURI());
            }
        }
    }

    public void doPutRequest(HttpPut httpPut) throws ConstantContactException {
        executeRequest(httpPut);
    }

    public static class Response {
        private int httpStatusCode;
        private String responseText;

        private Response(int httpStatusCode, String responseText) {
            this.httpStatusCode = httpStatusCode;
            this.responseText = responseText;
        }

        public int getHttpStatusCode() {
            return httpStatusCode;
        }

        public String getResponseText() {
            return responseText;
        }
    }
}