/**
* 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;
}
}
}