
com.touwolf.mailchimp.impl.MailchimpBuilder Maven / Gradle / Ivy
package com.touwolf.mailchimp.impl;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.touwolf.mailchimp.MailchimpException;
import com.touwolf.mailchimp.data.MailchimpErrors;
import com.touwolf.mailchimp.data.MailchimpResponse;
import com.touwolf.mailchimp.data.condiction.MailchimpConditions;
import com.touwolf.mailchimp.data.condiction.adapters.ConditionDeserializer;
import com.touwolf.mailchimp.data.condiction.adapters.ConditionSerializer;
import okhttp3.*;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class MailchimpBuilder {
private final Gson GSON = new GsonBuilder()
.registerTypeAdapter(MailchimpConditions.class, new ConditionDeserializer())
.registerTypeAdapter(MailchimpConditions.class, new ConditionSerializer())
.setPrettyPrinting()
.setDateFormat("yyyy-MM-dd HH:mm:ss").create();
private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
private final String basicAuth;
private final String urlBase;
private OkHttpClient client;
public MailchimpBuilder(String urlBase, String apiUser, String apiKey, Integer timeout) {
this.urlBase = urlBase;
this.basicAuth = Credentials.basic(apiUser, apiKey);
this.client = new OkHttpClient()
.newBuilder()
.readTimeout(timeout, TimeUnit.SECONDS)
.build();
}
/**
* Retrieve a resource or group of resouces
*
* @param url
* @param clazzResp
* @param
* @return The response
* @throws MailchimpException
*/
public MailchimpResponse get(String url, Class clazzResp) throws MailchimpException {
return send(url, null, "GET", clazzResp);
}
/**
* Create a new resource
*
* @param url
* @param payload
* @param clazzResp
* @param
* @return The response
* @throws MailchimpException
*/
public MailchimpResponse post(String url, String payload, Class clazzResp) throws MailchimpException {
return send(url, payload, "POST", clazzResp);
}
/**
* Create a new resource
*
* @param url
* @param clazzResp
* @param
* @return The response
* @throws MailchimpException
*/
public MailchimpResponse post(String url, Class clazzResp) throws MailchimpException {
return send(url, "", "POST", clazzResp);
}
/**
* Update an existing resource
*
* @param url
* @param payload
* @param clazzResp
* @param
* @return The response
* @throws MailchimpException
*/
public MailchimpResponse put(String url, String payload, Class clazzResp) throws MailchimpException {
return send(url, payload, "PUT", clazzResp);
}
/**
* Update an existing resource
*
* @param url
* @param payload
* @param clazzResp
* @param
* @return The response
* @throws MailchimpException
*/
public MailchimpResponse patch(String url, String payload, Class clazzResp) throws MailchimpException {
return send(url, payload, "PATCH", clazzResp);
}
/**
* Delete an existing resource
*
* @param url
* @param clazzResp
* @param
* @return The response
* @throws MailchimpException
*/
public MailchimpResponse delete(String url, Class clazzResp) throws MailchimpException {
return send(url, null, "DELETE", clazzResp);
}
/**
* Delete an existing resource
*
* @param url
* @param payload
* @param clazzResp
* @param
* @return The response
* @throws MailchimpException
*/
public MailchimpResponse delete(String url, String payload, Class clazzResp) throws MailchimpException {
return send(url, payload, "DELETE", clazzResp);
}
private MailchimpResponse send(String url, String payload, String verb, Class clazzResp) throws MailchimpException {
try {
RequestBody body = null;
if (null != payload) {
body = RequestBody.create(JSON, payload);
}
Request.Builder builder = new Request.Builder()
.header("Accept", "application/json")
.header("Authorization", basicAuth)
.url(urlBase + url);
Request request = null;
switch (verb) {
case "GET": {
request = builder.get().build();
break;
}
case "POST": {
request = builder.post(body).build();
break;
}
case "PATCH": {
request = builder.patch(body).build();
break;
}
case "DELETE": {
request = null == body ? builder.delete().build() : builder.delete(body).build();
break;
}
case "PUT": {
request = builder.put(body).build();
break;
}
default:
break;
}
Response response = client.newCall(request).execute();
String result = response.body().string();
if (response.code() != 200) {
throw new MailchimpException(GSON.fromJson(result, MailchimpErrors.class), response.code());
}
MailchimpResponse MailchimpResponse = new MailchimpResponse<>(url, payload, result);
MailchimpResponse.setData(GSON.fromJson(result, clazzResp));
MailchimpResponse.setCode(response.code());
return MailchimpResponse;
} catch (IOException ex) {
throw new MailchimpException(ex.getMessage());
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy