From 01b642c74ee4a2d8197f6774c4188f741c40752c Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Thu, 31 Jul 2014 12:09:51 +0200 Subject: [PATCH 01/25] Add Rejects and Whitelists Use Jersey --- .gitignore | 3 +- pom.xml | 67 ++++--- .../sprucehill/mandrill/data/error/Error.java | 23 ++- .../mandrill/data/error/MessageError.java | 6 +- .../mandrill/data/error/PreBuildError.java | 19 +- .../data/error/RenderTemplateError.java | 8 +- .../data/error/TemplateMessageError.java | 8 +- .../data/request/AbstractPayload.java | 65 ++++--- .../data/request/AbstractRejectsPayload.java | 79 ++++++++ .../request/AbstractWhitelistsPayload.java | 66 +++++++ .../request/IWithMergeVarPayloadBuilder.java | 2 +- ...hMergeVarRecipientAwarePayloadBuilder.java | 2 +- .../IWithTemplateContentPayloadBuilder.java | 2 +- .../IWithTemplateNamePayloadBuilder.java | 2 +- ...gePayload.java => MessageSendPayload.java} | 169 +++++++++--------- .../data/request/RejectsAddPayload.java | 66 +++++++ .../data/request/RejectsDeletePayload.java | 54 ++++++ .../data/request/RejectsListPayload.java | 67 +++++++ .../data/request/RenderTemplatePayload.java | 43 ++--- ...d.java => TemplateMessageSendPayload.java} | 33 ++-- .../data/request/WhitelistsAddPayload.java | 65 +++++++ .../data/request/WhitelistsDeletePayload.java | 51 ++++++ .../data/request/WhitelistsListPayload.java | 53 ++++++ .../data/response/AnyListAddResponse.java | 50 ++++++ .../data/response/AnyListDeleteResponse.java | 49 +++++ .../data/response/AnyListListResponse.java | 61 +++++++ .../data/response/MessageResponse.java | 27 +-- .../mandrill/service/AbstractService.java | 97 ++++------ .../mandrill/service/IMessageService.java | 27 +-- .../mandrill/service/IRejectsService.java | 92 ++++++++++ .../mandrill/service/ITemplateService.java | 11 +- .../mandrill/service/IWhitelistsService.java | 92 ++++++++++ .../mandrill/service/MessageService.java | 61 ++++--- .../mandrill/service/RejectsService.java | 102 +++++++++++ .../mandrill/service/TemplateService.java | 26 +-- .../mandrill/service/WhitelistsService.java | 101 +++++++++++ 36 files changed, 1403 insertions(+), 346 deletions(-) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java rename src/main/java/io/sprucehill/mandrill/data/request/{MessagePayload.java => MessageSendPayload.java} (77%) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java rename src/main/java/io/sprucehill/mandrill/data/request/{TemplateMessagePayload.java => TemplateMessageSendPayload.java} (78%) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java create mode 100644 src/main/java/io/sprucehill/mandrill/service/IRejectsService.java create mode 100644 src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java create mode 100644 src/main/java/io/sprucehill/mandrill/service/RejectsService.java create mode 100644 src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java diff --git a/.gitignore b/.gitignore index b947989..82809fc 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ target .classpath .project *.iml -.idea \ No newline at end of file +.idea +atlassian-ide-plugin.xml \ No newline at end of file diff --git a/pom.xml b/pom.xml index 898cab3..a70a42b 100644 --- a/pom.xml +++ b/pom.xml @@ -90,17 +90,12 @@ - com.fasterxml.jackson.core - jackson-databind + org.glassfish.jersey.core + jersey-client - org.spockframework - spock-core - test - - - org.apache.httpcomponents - httpclient + org.glassfish.jersey.media + jersey-media-json-jackson org.slf4j @@ -111,30 +106,24 @@ UTF-8 3.1 - 2.2.1 - 2.0.2 + 2.3 0.6-groovy-1.8 4.2.1 - 1.6.4 + 2.11 + 1.7.7 - com.fasterxml.jackson.core - jackson-databind - ${version.jackson} + org.glassfish.jersey.core + jersey-client + ${version.jersey} - org.spockframework - spock-core - ${version.spock} - test - - - org.apache.httpcomponents - httpclient - ${version.httpclient} + org.glassfish.jersey.media + jersey-media-json-jackson + ${version.jersey} org.slf4j @@ -144,4 +133,34 @@ + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.1 + + + org.codehaus.mojo + versions-maven-plugin + 2.1 + + + + diff --git a/src/main/java/io/sprucehill/mandrill/data/error/Error.java b/src/main/java/io/sprucehill/mandrill/data/error/Error.java index 2f743b6..7075e2e 100644 --- a/src/main/java/io/sprucehill/mandrill/data/error/Error.java +++ b/src/main/java/io/sprucehill/mandrill/data/error/Error.java @@ -68,35 +68,31 @@ protected static abstract class Init, U extends Error> { protected U object; - protected Init(U object) { + protected Init(final U object) { this.object = object; } - protected abstract T self(); - - protected void postInit() { } - protected void preBuild() { - } - - public T withStatus(String status) { + public T withStatus(final String status) { object.status = status; return self(); } - public T withCode(Integer code) { + protected abstract T self(); + + public T withCode(final Integer code) { object.code = code; return self(); } - public T withName(String name) { + public T withName(final String name) { object.name = name; return self(); } - public T withMessage(String message) { + public T withMessage(final String message) { object.message = message; return self(); } @@ -105,9 +101,12 @@ public U build() { preBuild(); return object; } + + protected void preBuild() { + } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { super(new Error()); diff --git a/src/main/java/io/sprucehill/mandrill/data/error/MessageError.java b/src/main/java/io/sprucehill/mandrill/data/error/MessageError.java index f24d027..fb83d53 100644 --- a/src/main/java/io/sprucehill/mandrill/data/error/MessageError.java +++ b/src/main/java/io/sprucehill/mandrill/data/error/MessageError.java @@ -25,7 +25,7 @@ */ public class MessageError extends Error { - protected static abstract class Init, U extends MessageError> extends Error.Init { + protected static abstract class Init, U extends MessageError> extends Error.Init { private static final Set names; @@ -37,7 +37,7 @@ protected static abstract class Init, U extends MessageError names = Collections.unmodifiableSet(namesTmp); } - protected Init(U object) { + protected Init(final U object) { super(object); } @@ -50,7 +50,7 @@ public T withName(String name) { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { super(new MessageError()); diff --git a/src/main/java/io/sprucehill/mandrill/data/error/PreBuildError.java b/src/main/java/io/sprucehill/mandrill/data/error/PreBuildError.java index 49dd5c9..d453a6b 100644 --- a/src/main/java/io/sprucehill/mandrill/data/error/PreBuildError.java +++ b/src/main/java/io/sprucehill/mandrill/data/error/PreBuildError.java @@ -24,28 +24,27 @@ */ public class PreBuildError extends Exception { - private Map preBuildErrors; + private Map preBuildErrors; - public PreBuildError(Map preBuildErrors) { + public PreBuildError(final Map preBuildErrors) { super(concatPreBuildErrors(preBuildErrors)); this.preBuildErrors = Collections.unmodifiableMap(preBuildErrors); } - public Map getPreBuildErrors() { - return preBuildErrors; - } - - private static String concatPreBuildErrors(Map preBuildErrors) { + private static String concatPreBuildErrors(final Map preBuildErrors) { StringBuilder builder = null; - for (Map.Entry preBuildError : preBuildErrors.entrySet()) { + for (final Map.Entry preBuildError : preBuildErrors.entrySet()) { if (null == builder) { builder = new StringBuilder(); - } - else { + } else { builder.append(", "); } builder.append(preBuildError.getKey()); } return null == builder ? "" : builder.toString(); } + + public Map getPreBuildErrors() { + return preBuildErrors; + } } diff --git a/src/main/java/io/sprucehill/mandrill/data/error/RenderTemplateError.java b/src/main/java/io/sprucehill/mandrill/data/error/RenderTemplateError.java index 3faf1ec..2f7b727 100644 --- a/src/main/java/io/sprucehill/mandrill/data/error/RenderTemplateError.java +++ b/src/main/java/io/sprucehill/mandrill/data/error/RenderTemplateError.java @@ -25,7 +25,7 @@ */ public class RenderTemplateError extends Error { - protected static abstract class Init, U extends RenderTemplateError> extends Error.Init { + protected static abstract class Init, U extends RenderTemplateError> extends Error.Init { private static final Set names; @@ -38,12 +38,12 @@ protected static abstract class Init, U extends RenderTempla names = Collections.unmodifiableSet(namesTmp); } - protected Init(U object) { + protected Init(final U object) { super(object); } @Override - public T withName(String name) { + public T withName(final String name) { if (names.contains(name)) { return super.withName(name); } @@ -51,7 +51,7 @@ public T withName(String name) { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { super(new RenderTemplateError()); diff --git a/src/main/java/io/sprucehill/mandrill/data/error/TemplateMessageError.java b/src/main/java/io/sprucehill/mandrill/data/error/TemplateMessageError.java index 32fcdc8..73ae051 100644 --- a/src/main/java/io/sprucehill/mandrill/data/error/TemplateMessageError.java +++ b/src/main/java/io/sprucehill/mandrill/data/error/TemplateMessageError.java @@ -25,7 +25,7 @@ */ public class TemplateMessageError extends MessageError { - protected static abstract class Init, U extends TemplateMessageError> extends MessageError.Init { + protected static abstract class Init, U extends TemplateMessageError> extends MessageError.Init { private static final Set names; @@ -35,12 +35,12 @@ protected static abstract class Init, U extends TemplateMess names = Collections.unmodifiableSet(namesTmp); } - protected Init(U object) { + protected Init(final U object) { super(object); } @Override - public T withName(String name) { + public T withName(final String name) { if (names.contains(name)) { return super.withName(name); } @@ -48,7 +48,7 @@ public T withName(String name) { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { super(new TemplateMessageError()); diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java index e86dcf8..15d0a1e 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java @@ -16,32 +16,29 @@ package io.sprucehill.mandrill.data.request; +import java.util.HashMap; +import java.util.Map; + import com.fasterxml.jackson.annotation.JsonProperty; + import io.sprucehill.mandrill.data.AbstractJsonBase; import io.sprucehill.mandrill.data.error.PreBuildError; -import java.util.HashMap; -import java.util.Map; - /** * @author Michael Duergner */ public abstract class AbstractPayload extends AbstractJsonBase { public static final String PRE_BUILD_KEY_NOT_SET = "KET_NOT_SET"; - - public abstract String getPath(); - @JsonProperty protected String key; - public static abstract class Init, U extends AbstractPayload> { + public abstract String getPath(); - private Map preBuildErrors = new HashMap(); + public static abstract class Init, U extends AbstractPayload> { protected U object; - - protected abstract T self(); + private Map preBuildErrors = new HashMap(); protected Init(U object) { this.object = object; @@ -50,14 +47,33 @@ protected Init(U object) { protected void postInit() { } + public T withKey(final String key) { + object.key = key; + return self(); + } + + protected abstract T self(); + + public boolean hasKey() { + return null != object.key && !object.key.isEmpty(); + } + + public U build() throws PreBuildError { + preBuild(); + if (0 < preBuildErrors.size()) { + throw new PreBuildError(preBuildErrors); + } + return object; + } + /** * Override this method to add additional pre build validation to your payload object; - * + *

* NOTE: always call super.preBuild() as first statement in you own implementation! */ protected void preBuild() { if (null == object.key || object.key.isEmpty()) { - addPreBuildError(PRE_BUILD_KEY_NOT_SET,"'key' must be set and may not be empty!"); + addPreBuildError(PRE_BUILD_KEY_NOT_SET, "'key' must be set and may not be empty!"); } } @@ -68,30 +84,13 @@ protected void preBuild() { * @param preBuildErrorMessage */ protected final void addPreBuildError(String preBuildErrorKey, String preBuildErrorMessage) { - preBuildErrors.put(preBuildErrorKey,preBuildErrorMessage); - } - - public T withKey(String key) { - object.key = key; - return self(); - } - - public boolean hasKey() { - return null != object.key && !object.key.isEmpty(); - } - - public U build() throws PreBuildError { - preBuild(); - if (0 < preBuildErrors.size()) { - throw new PreBuildError(preBuildErrors); - } - return object; + preBuildErrors.put(preBuildErrorKey, preBuildErrorMessage); } } - public static abstract class Builder extends Init { + public static abstract class Builder extends Init { - protected Builder(AbstractPayload object) { + protected Builder(final AbstractPayload object) { super(object); } @@ -100,4 +99,4 @@ protected Builder self() { return this; } } -} \ No newline at end of file +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java new file mode 100644 index 0000000..247bb18 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java @@ -0,0 +1,79 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.sprucehill.mandrill.data.AbstractJsonBase; +import io.sprucehill.mandrill.data.error.PreBuildError; + +/** + * @author Michael Duergner + */ +public abstract class AbstractRejectsPayload extends AbstractPayload { + + @JsonProperty + protected String email; + + @JsonProperty + protected String subaccount; + + public abstract String getPath(); + + public static abstract class Init, U extends AbstractRejectsPayload> + extends AbstractPayload.Init { + + protected Init(U object) { + super(object); + } + + public T withEmail(final String email) { + object.email = email; + return self(); + } + + public T withSubaccount(final String subaccount) { + object.subaccount = subaccount; + return self(); + } + + protected abstract T self(); + + public boolean hasEmail() { + return null != object.email && !object.email.isEmpty(); + } + + public boolean hasSubaccount() { + return null != object.subaccount && !object.subaccount.isEmpty(); + } + } + + public static abstract class Builder extends Init { + + protected Builder(final AbstractRejectsPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java new file mode 100644 index 0000000..b405bb7 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java @@ -0,0 +1,66 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public abstract class AbstractWhitelistsPayload extends AbstractPayload { + + @JsonProperty + protected String email; + + public abstract String getPath(); + + public static abstract class Init, U extends AbstractWhitelistsPayload> + extends AbstractPayload.Init { + + protected U object; + + protected Init(U object) { + super(object); + } + + public T withEmail(final String email) { + object.email = email; + return self(); + } + + protected abstract T self(); + + public boolean hasEmail() { + return null != object.email && !object.email.isEmpty(); + } + } + + public static abstract class Builder extends Init { + + protected Builder(final AbstractWhitelistsPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarPayloadBuilder.java index dda4716..4b0c08b 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarPayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarPayloadBuilder.java @@ -21,5 +21,5 @@ */ public interface IWithMergeVarPayloadBuilder { - T withMergeVar(String name, String content); + T withMergeVar(final String name, final String content); } diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarRecipientAwarePayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarRecipientAwarePayloadBuilder.java index 80a62ed..2738af1 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarRecipientAwarePayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarRecipientAwarePayloadBuilder.java @@ -21,5 +21,5 @@ */ public interface IWithMergeVarRecipientAwarePayloadBuilder extends IWithMergeVarPayloadBuilder { - T withMergeVar(String recipient, String name, String content); + T withMergeVar(final String recipient, final String name, final String content); } diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateContentPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateContentPayloadBuilder.java index 5b7323b..ac4a518 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateContentPayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateContentPayloadBuilder.java @@ -21,5 +21,5 @@ */ public interface IWithTemplateContentPayloadBuilder { - T withTemplateContent(String name, String content); + T withTemplateContent(final String name, final String content); } diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateNamePayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateNamePayloadBuilder.java index 4112e4b..76a5f08 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateNamePayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateNamePayloadBuilder.java @@ -21,5 +21,5 @@ */ public interface IWithTemplateNamePayloadBuilder { - T withTemplateName(String templateName); + T withTemplateName(final String templateName); } diff --git a/src/main/java/io/sprucehill/mandrill/data/request/MessagePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/MessageSendPayload.java similarity index 77% rename from src/main/java/io/sprucehill/mandrill/data/request/MessagePayload.java rename to src/main/java/io/sprucehill/mandrill/data/request/MessageSendPayload.java index fc20329..b5addf7 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/MessagePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/MessageSendPayload.java @@ -16,16 +16,22 @@ package io.sprucehill.mandrill.data.request; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.sprucehill.mandrill.data.AbstractJsonBase; - import java.util.ArrayList; import java.util.List; +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.sprucehill.mandrill.data.AbstractJsonBase; + /** * @author Michael Duergner */ -public class MessagePayload extends AbstractPayload { +public class MessageSendPayload extends AbstractPayload { + + @JsonProperty + protected Message message = new Message(); + @JsonProperty + protected boolean async = Boolean.FALSE; @Override public String getPath() { @@ -40,24 +46,25 @@ public static final class Recipient extends AbstractJsonBase { @JsonProperty protected String name; - protected Recipient() {} - - protected Recipient(String email) { - this.email = email; + protected Recipient() { } - protected Recipient(String email, String name) { + protected Recipient(final String email, final String name) { this(email); this.name = name; } + protected Recipient(final String email) { + this.email = email; + } + @Override public int hashCode() { return null == email ? super.hashCode() : email.hashCode(); } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (null == o) { return false; } @@ -65,7 +72,7 @@ public boolean equals(Object o) { return false; } - return null == email ? super.equals(o) : email.equals(((Recipient)o).email); + return null == email ? super.equals(o) : email.equals(((Recipient) o).email); } } @@ -77,9 +84,10 @@ public static final class Variable extends AbstractJsonBase { @JsonProperty protected String content; - protected Variable() {} + protected Variable() { + } - protected Variable(String name, String content) { + protected Variable(final String name, final String content) { this.name = name; this.content = content; } @@ -90,7 +98,7 @@ public int hashCode() { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (null == o) { return false; } @@ -98,7 +106,7 @@ public boolean equals(Object o) { return false; } - return null == name ? super.equals(o) : name.equals(((Variable)o).name); + return null == name ? super.equals(o) : name.equals(((Variable) o).name); } } @@ -111,13 +119,14 @@ public static final class RecipientMergeVars extends AbstractJsonBase { @JsonProperty protected List vars = new ArrayList(); - protected RecipientMergeVars() {} + protected RecipientMergeVars() { + } - protected RecipientMergeVars(String recipient) { + protected RecipientMergeVars(final String recipient) { this.recipient = recipient; } - protected RecipientMergeVars(String recipient, List vars) { + protected RecipientMergeVars(final String recipient, final List vars) { this.recipient = recipient; this.vars = vars; } @@ -128,7 +137,7 @@ public int hashCode() { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (null == o) { return false; } @@ -137,7 +146,7 @@ public boolean equals(Object o) { return false; } - return null == recipient ? super.equals(o) : recipient.equals(((RecipientMergeVars)o).recipient); + return null == recipient ? super.equals(o) : recipient.equals(((RecipientMergeVars) o).recipient); } } @@ -150,13 +159,14 @@ public static final class RecipientMetadata extends AbstractJsonBase { @JsonProperty protected List values = new ArrayList(); - protected RecipientMetadata() {} + protected RecipientMetadata() { + } - protected RecipientMetadata(String recipient) { + protected RecipientMetadata(final String recipient) { this.recipient = recipient; } - protected RecipientMetadata(String recipient, List values) { + protected RecipientMetadata(final String recipient, final List values) { this.recipient = recipient; this.values = values; } @@ -167,7 +177,7 @@ public int hashCode() { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (null == o) { return false; } @@ -176,7 +186,7 @@ public boolean equals(Object o) { return false; } - return null == recipient ? super.equals(o) : recipient.equals(((RecipientMetadata)o).recipient); + return null == recipient ? super.equals(o) : recipient.equals(((RecipientMetadata) o).recipient); } } @@ -189,11 +199,12 @@ public static final class Attachment extends AbstractJsonBase { protected String name; @JsonProperty - protected String content; + protected byte[] content; - protected Attachment() {} + protected Attachment() { + } - protected Attachment(String type, String name, String content) { + protected Attachment(final String type, final String name, final byte[] content) { this.type = type; this.name = name; this.content = content; @@ -205,7 +216,7 @@ public int hashCode() { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (null == o) { return false; } @@ -213,7 +224,7 @@ public boolean equals(Object o) { return false; } - return null == name ? super.equals(o) : name.equals(((Attachment)o).name); + return null == name ? super.equals(o) : name.equals(((Attachment) o).name); } } @@ -240,11 +251,11 @@ public static final class Message extends AbstractJsonBase { protected List to = new ArrayList(); @JsonProperty( - value = "inline_css") + value = "inline_css") protected boolean inlineCss = Boolean.FALSE; @JsonProperty( - value = "track_opens") + value = "track_opens") protected boolean trackOpens = Boolean.FALSE; @JsonProperty( @@ -297,43 +308,39 @@ public static final class Message extends AbstractJsonBase { protected List attachments = new ArrayList(); } - @JsonProperty - protected Message message = new Message(); - - @JsonProperty - protected boolean async = Boolean.FALSE; - - public static abstract class Init, U extends MessagePayload> extends AbstractPayload.Init implements IWithMergeVarRecipientAwarePayloadBuilder { + public static abstract class Init, U extends MessageSendPayload> + extends AbstractPayload.Init + implements IWithMergeVarRecipientAwarePayloadBuilder { protected Init(U object) { super(object); } - public T withHtml(String html) { + public T withHtml(final String html) { object.message.html = html; return self(); } - public T withText(String text) { + public T withText(final String text) { object.message.text = text; return self(); } - public T withSubject(String subject) { + public T withSubject(final String subject) { object.message.subject = subject; return self(); } - public T withFromEmail(String fromEmail) { + public T withFromEmail(final String fromEmail) { object.message.fromEmail = fromEmail; - return self(); + return self(); } public boolean hasFromEmail() { return null != object.message.fromEmail && !object.message.fromEmail.isEmpty(); } - public T withFromName(String fromName) { + public T withFromName(final String fromName) { object.message.fromName = fromName; return self(); } @@ -342,31 +349,31 @@ public boolean hasFromName() { return null != object.message.fromName && !object.message.fromName.isEmpty(); } - private T withRecipient(Recipient recipient) { + public T withTo(final String email) { + return withRecipient(new Recipient(email)); + } + + private T withRecipient(final Recipient recipient) { if (!object.message.to.contains(recipient)) { object.message.to.add(recipient); } return self(); } - public T withTo(String email) { - return withRecipient(new Recipient(email)); - } - - public T withTo(String email, String name) { + public T withTo(final String email, final String name) { return withRecipient(new Recipient(email, name)); } - public T withInlineCss(){ - object.message.inlineCss = Boolean.TRUE; - return self(); + public T withInlineCss() { + object.message.inlineCss = Boolean.TRUE; + return self(); } - public T withoutInlineCss(){ - object.message.inlineCss = Boolean.FALSE; - return self(); + public T withoutInlineCss() { + object.message.inlineCss = Boolean.FALSE; + return self(); } - + public T withTrackOpens() { object.message.trackOpens = Boolean.TRUE; return self(); @@ -417,77 +424,75 @@ public T withoutPreserveRecipients() { return self(); } - public T withBccAddress(String bccAddress){ + public T withBccAddress(final String bccAddress) { object.message.bccAddress = bccAddress; return self(); } - public T withGlobalMergeVar(String name, String content) { - Variable var = new Variable(name,content); + public T withMergeVar(final String name, final String content) { + return withGlobalMergeVar(name, content); + } + + public T withGlobalMergeVar(final String name, final String content) { + Variable var = new Variable(name, content); if (!object.message.globalMergeVars.contains(var)) { object.message.globalMergeVars.add(var); } return self(); } - public T withMergeVar(String name, String content) { - return withGlobalMergeVar(name,content); - } - - public T withMergeVar(String recipient, String name, String content) { + public T withMergeVar(final String recipient, final String name, final String content) { RecipientMergeVars mergeVars = new RecipientMergeVars(recipient); int index = object.message.mergeVars.indexOf(mergeVars); if (-1 != index) { mergeVars = object.message.mergeVars.get(index); - } - else { + } else { object.message.mergeVars.add(mergeVars); } - mergeVars.vars.add(new Variable(name,content)); + mergeVars.vars.add(new Variable(name, content)); return self(); } - public T withTag(String tag) { + public T withTag(final String tag) { if (!object.message.tags.contains(tag)) { object.message.tags.add(tag); } return self(); } - public T withGoogleAnalyticsDomain(String googleAnalyticsDomain) { + public T withGoogleAnalyticsDomain(final String googleAnalyticsDomain) { if (!object.message.googleAnalyticsDomains.contains(googleAnalyticsDomain)) { object.message.googleAnalyticsDomains.add(googleAnalyticsDomain); } return self(); } - public T withGoogleAnalyticsCampaign(String googleAnalyticsCampaign) { + public T withGoogleAnalyticsCampaign(final String googleAnalyticsCampaign) { object.message.googleAnalyticsCampaign = googleAnalyticsCampaign; return self(); } - public T withMetadata(String metadata) { + public T withMetadata(final String metadata) { if (!object.message.metadata.contains(metadata)) { object.message.metadata.add(metadata); } return self(); } - public T withRecipientMetadata(String recipient, String metadata) { + public T withRecipientMetadata(final String recipient, final String metadata) { RecipientMetadata recipientMetadata = new RecipientMetadata(recipient); int index = object.message.recipientMetadata.indexOf(recipientMetadata); if (-1 != index) { recipientMetadata = object.message.recipientMetadata.get(index); - } - else { + } else { object.message.recipientMetadata.add(recipientMetadata); } recipientMetadata.values.add(metadata); return self(); } - public T withAttachment(String type, String name, String content) { - Attachment attachment = new Attachment(type,name,content); + public T withAttachment(final String type, final String name, final byte[] content) { + Attachment attachment = new Attachment(type, name, content); if (!object.message.attachments.contains(attachment)) { object.message.attachments.add(attachment); } @@ -505,13 +510,13 @@ public T doSynchronous() { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { - super(new MessagePayload()); + super(new MessageSendPayload()); } - protected Builder(MessagePayload object) { + protected Builder(final MessageSendPayload object) { super(object); } @@ -520,4 +525,4 @@ protected Builder self() { return this; } } -} \ No newline at end of file +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java new file mode 100644 index 0000000..85f5fdd --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java @@ -0,0 +1,66 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class RejectsAddPayload extends AbstractRejectsPayload { + + @JsonProperty + protected String comment; + + @Override + public String getPath() { + return "/rejects/add.json"; + } + + public static abstract class Init, U extends RejectsAddPayload> + extends AbstractRejectsPayload.Init { + + protected Init(final U object) { + super(object); + } + + public T withComment(final String comment) { + object.comment = comment; + return self(); + } + + public boolean hasComment() { + return null != object.comment && !object.comment.isEmpty(); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new RejectsAddPayload()); + } + + protected Builder(final RejectsAddPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java new file mode 100644 index 0000000..4e8ebb2 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java @@ -0,0 +1,54 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class RejectsDeletePayload extends AbstractRejectsPayload { + + @Override + public String getPath() { + return "/rejects/delete.json"; + } + + public static abstract class Init, U extends RejectsDeletePayload> + extends AbstractRejectsPayload.Init { + + protected Init(final U object) { + super(object); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new RejectsDeletePayload()); + } + + protected Builder(final RejectsDeletePayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java new file mode 100644 index 0000000..2189a3e --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java @@ -0,0 +1,67 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class RejectsListPayload extends AbstractRejectsPayload { + + @JsonProperty("include_expired") + protected boolean includeExpired = Boolean.FALSE; + + @Override + public String getPath() { + return "/rejects/add.json"; + } + + public static abstract class Init, U extends RejectsListPayload> + extends AbstractRejectsPayload.Init { + + protected Init(final U object) { + super(object); + } + + public T withIncludeExpired() { + object.includeExpired = Boolean.TRUE; + return self(); + } + + public T withoutIncludeExpired() { + object.includeExpired = Boolean.FALSE; + return self(); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new RejectsListPayload()); + } + + protected Builder(final RejectsListPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java index 5f68f3c..b5a12b1 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java @@ -16,12 +16,13 @@ package io.sprucehill.mandrill.data.request; +import java.util.ArrayList; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import io.sprucehill.mandrill.data.AbstractJsonBase; -import java.util.ArrayList; -import java.util.List; +import io.sprucehill.mandrill.data.AbstractJsonBase; /** * @author Michael Duergner @@ -29,6 +30,13 @@ public class RenderTemplatePayload extends AbstractPayload { public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; + @JsonProperty(value = "template_name") + protected String templateName; + @JsonProperty(value = "template_content") + @JsonInclude(value = JsonInclude.Include.NON_NULL) + protected List templateContent = new ArrayList(); + @JsonProperty(value = "merge_vars") + protected List mergeVars = new ArrayList(); @Override public String getPath() { @@ -43,7 +51,8 @@ public static final class Variable extends AbstractJsonBase { @JsonProperty protected String content; - protected Variable() {} + protected Variable() { + } protected Variable(String name, String content) { this.name = name; @@ -64,25 +73,11 @@ public boolean equals(Object o) { return false; } - return null == name ? super.equals(o) : name.equals(((Variable)o).name); + return null == name ? super.equals(o) : name.equals(((Variable) o).name); } } - @JsonProperty( - value = "template_name") - protected String templateName; - - @JsonProperty( - value = "template_content") - @JsonInclude( - value = JsonInclude.Include.NON_NULL) - protected List templateContent = new ArrayList(); - - @JsonProperty( - value = "merge_vars") - protected List mergeVars = new ArrayList(); - - protected static abstract class Init, U extends RenderTemplatePayload> extends AbstractPayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder, IWithMergeVarPayloadBuilder { + protected static abstract class Init, U extends RenderTemplatePayload> extends AbstractPayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder, IWithMergeVarPayloadBuilder { protected Init(U object) { super(object); @@ -94,7 +89,7 @@ public T withTemplateName(String templateName) { } public T withTemplateContent(String name, String content) { - Variable variable = new Variable(name,content); + Variable variable = new Variable(name, content); if (!object.templateContent.contains(variable)) { object.templateContent.add(variable); } @@ -102,7 +97,7 @@ public T withTemplateContent(String name, String content) { } public T withMergeVar(String name, String content) { - Variable variable = new Variable(name,content); + Variable variable = new Variable(name, content); if (!object.mergeVars.contains(variable)) { object.mergeVars.add(variable); } @@ -113,12 +108,12 @@ public T withMergeVar(String name, String content) { protected void preBuild() { super.preBuild(); if (null == object.templateName || object.templateName.isEmpty()) { - addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET,"'template_name' must be set and may not be empty!"); + addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET, "'template_name' must be set and may not be empty!"); } } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { super(new RenderTemplatePayload()); diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessagePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java similarity index 78% rename from src/main/java/io/sprucehill/mandrill/data/request/TemplateMessagePayload.java rename to src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java index 01581b3..4cb7b14 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessagePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java @@ -16,35 +16,35 @@ package io.sprucehill.mandrill.data.request; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; - import java.util.ArrayList; import java.util.List; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + /** * @author Michael Duergner */ -public class TemplateMessagePayload extends MessagePayload { +public class TemplateMessageSendPayload extends MessageSendPayload { public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; - - @Override - public String getPath() { - return "/messages/send-template.json"; - } - @JsonProperty( value = "template_name") protected String templateName; - @JsonProperty( value = "template_content") @JsonInclude( value = JsonInclude.Include.NON_NULL) protected List templateContent = new ArrayList(); - protected static abstract class Init, U extends TemplateMessagePayload> extends MessagePayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder { + @Override + public String getPath() { + return "/messages/send-template.json"; + } + + protected static abstract class Init, U extends TemplateMessageSendPayload> + extends MessageSendPayload.Init implements IWithTemplateNamePayloadBuilder, + IWithTemplateContentPayloadBuilder { protected Init(U object) { super(object); @@ -56,7 +56,7 @@ public T withTemplateName(String templateName) { } public T withTemplateContent(String name, String content) { - Variable variable = new Variable(name,content); + Variable variable = new Variable(name, content); if (!object.templateContent.contains(variable)) { object.templateContent.add(variable); } @@ -67,15 +67,16 @@ public T withTemplateContent(String name, String content) { protected void preBuild() { super.preBuild(); if (null == object.templateName || object.templateName.isEmpty()) { - addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET,"'template_name' must be set and may not be empty!"); + addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET, + "'template_name' must be set and may not be empty!"); } } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { - super(new TemplateMessagePayload()); + super(new TemplateMessageSendPayload()); } @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java new file mode 100644 index 0000000..46b10ab --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java @@ -0,0 +1,65 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class WhitelistsAddPayload extends AbstractWhitelistsPayload { + @JsonProperty + protected String comment; + + @Override + public String getPath() { + return "/whitelists/add.json"; + } + + public static abstract class Init, U extends WhitelistsAddPayload> + extends AbstractWhitelistsPayload.Init { + + protected Init(final U object) { + super(object); + } + + public T withComment(final String comment) { + object.comment = comment; + return self(); + } + + public boolean hasComment() { + return null != object.comment && !object.comment.isEmpty(); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new WhitelistsAddPayload()); + } + + protected Builder(final WhitelistsAddPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java new file mode 100644 index 0000000..b660ec1 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java @@ -0,0 +1,51 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * @author Michael Duergner + */ +public class WhitelistsDeletePayload extends AbstractWhitelistsPayload { + @Override + public String getPath() { + return "/whitelists/delete.json"; + } + + public static abstract class Init, U extends WhitelistsDeletePayload> + extends AbstractWhitelistsPayload.Init { + + protected Init(final U object) { + super(object); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new WhitelistsDeletePayload()); + } + + protected Builder(final WhitelistsDeletePayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java new file mode 100644 index 0000000..d28d82c --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java @@ -0,0 +1,53 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class WhitelistsListPayload extends AbstractWhitelistsPayload { + @Override + public String getPath() { + return "/whitelists/list.json"; + } + + public static abstract class Init, U extends WhitelistsListPayload> + extends AbstractWhitelistsPayload.Init { + + protected Init(final U object) { + super(object); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new WhitelistsListPayload()); + } + + protected Builder(final WhitelistsListPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java new file mode 100644 index 0000000..d17d81c --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java @@ -0,0 +1,50 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.response; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class AnyListAddResponse extends Response { + + @JsonProperty + protected String email; + @JsonProperty + protected boolean added; + + public String getEmail() { + return email; + } + + public boolean isAdded() { + return added; + } + + @Override + public String toString() { + return new StringBuilder("MessageResponse [email: "). + append(email). + append(", added: "). + append(added). + append("]"). + toString(); + } + +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java new file mode 100644 index 0000000..8e32273 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java @@ -0,0 +1,49 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.response; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class AnyListDeleteResponse extends Response { + + @JsonProperty + protected String email; + @JsonProperty + protected boolean deleted; + + public String getEmail() { + return email; + } + + public boolean isDeleted() { + return deleted; + } + + @Override + public String toString() { + return new StringBuilder("MessageResponse [email: "). + append(email). + append(", deleted: "). + append(deleted). + append("]"). + toString(); + } + +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java new file mode 100644 index 0000000..8dd1a2d --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java @@ -0,0 +1,61 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.response; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class AnyListListResponse extends Response { + + @JsonProperty + protected String email; + @JsonProperty + protected String detail; + @JsonProperty("created_at") + @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT") + protected Date createdAt; + + public String getEmail() { + return email; + } + + public String getDetail() { + return detail; + } + + public Date getCreatedAt() { + return createdAt; + } + + @Override + public String toString() { + return new StringBuilder("MessageResponse [email: "). + append(email). + append(", detail: "). + append(detail). + append(", created_at: "). + append(createdAt). + append("]"). + toString(); + } + +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java index ea1c480..819e005 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java @@ -24,20 +24,12 @@ */ public class MessageResponse extends Response { - public static enum Status { - SENT,QUEUED,REJECTED,INVALID; - - @JsonCreator - public static Status parse(String value) { - return valueOf(value.toUpperCase()); - } - } - @JsonProperty protected String email; - @JsonProperty protected Status status; + @JsonProperty("reject_reason") + protected String rejectReason; public String getEmail() { return email; @@ -47,13 +39,28 @@ public Status getStatus() { return status; } + public String getRejectReason() { + return rejectReason; + } + @Override public String toString() { return new StringBuilder("MessageResponse [email: "). append(email). append(", status: "). append(status). + append(", reject_reason: "). + append(rejectReason). append("]"). toString(); } + + public static enum Status { + SENT, QUEUED, REJECTED, INVALID; + + @JsonCreator + public static Status parse(String value) { + return valueOf(value.toUpperCase()); + } + } } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java index 2d04080..9f172c6 100644 --- a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java +++ b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java @@ -16,65 +16,50 @@ package io.sprucehill.mandrill.service; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.sprucehill.mandrill.data.request.AbstractPayload; -import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.conn.PoolingClientConnectionManager; +import java.io.IOException; + +import javax.annotation.PostConstruct; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Response; + +import org.glassfish.jersey.client.JerseyClient; +import org.glassfish.jersey.client.JerseyClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.PostConstruct; -import java.io.IOException; +import io.sprucehill.mandrill.data.request.AbstractPayload; /** * @author Michael Duergner */ public abstract class AbstractService { - final Logger logger = LoggerFactory.getLogger(getClass()); + protected final Logger LOGGER = LoggerFactory.getLogger(getClass()); - String baseUrl = "https://mandrillapp.com/api/1.0"; + protected String baseUrl = "https://mandrillapp.com/api/1.0"; - HttpClient httpClient; + protected JerseyClient jerseyClient; - ObjectMapper objectMapper; - - String key; + protected String key; /** - * * @param baseUrl */ - public void setBaseUrl(String baseUrl) { + public void setBaseUrl(final String baseUrl) { this.baseUrl = baseUrl; } /** - * - * @param httpClient + * @param jerseyClient */ - public void setHttpClient(HttpClient httpClient) { - this.httpClient = httpClient; + public void setClient(final JerseyClient jerseyClient) { + this.jerseyClient = jerseyClient; } /** - * - * @param objectMapper - */ - public void setObjectMapper(ObjectMapper objectMapper) { - this.objectMapper = objectMapper; - } - - /** - * * @param key */ - public void setKey(String key) { + public void setKey(final String key) { this.key = key; } @@ -84,40 +69,32 @@ public final void postConstruct() { } void onPostConstruct() { - if (null == httpClient) { - httpClient = new DefaultHttpClient(new PoolingClientConnectionManager()); - } - if (null == objectMapper) { - objectMapper = new ObjectMapper(); + if (null == jerseyClient) { + jerseyClient = JerseyClientBuilder.createClient(); } } - ,U extends AbstractPayload> void integrateDefaultValues(AbstractPayload.Init payloadBuilder) { + , U extends AbstractPayload> void integrateDefaultValues(AbstractPayload.Init payloadBuilder) { if (!payloadBuilder.hasKey() && null != key && !key.isEmpty()) { payloadBuilder.withKey(key); } } - T send(final AbstractPayload payload, TypeReference responseClass, Class errorClass) throws E, IOException { - try { - HttpPost request = new HttpPost(baseUrl+payload.getPath()); - String body = objectMapper.writeValueAsString(payload); - logger.info(body); - request.setEntity(new StringEntity(body,"UTF-8")); - HttpResponse response = httpClient.execute(request); - if (200 == response.getStatusLine().getStatusCode()) { - T result = objectMapper.readValue(response.getEntity().getContent(),responseClass); - return result; - } - else { - E error = objectMapper.readValue(response.getEntity().getContent(),errorClass); - logger.debug("Got error {} while calling {}.", error.toString(), payload.getPath()); - throw error; - } - } - catch (IOException e) { - logger.debug("Got {} while calling {}.",e.getClass().getSimpleName(),payload.getPath()); - throw e; + T send(final AbstractPayload payload, final Class responseClass, + final Class errorClass) throws E, IOException { + final Response response = jerseyClient + .target(baseUrl) + .path(payload.getPath()) + .request() + .post(Entity.json(payload)); + + if (200 == response.getStatus()) { + final T result = response.readEntity(responseClass); + return result; + } else { + final E error = response.readEntity(errorClass); + LOGGER.debug("Got error {} while calling {}.", error.toString(), payload.getPath()); + throw error; } } -} \ No newline at end of file +} diff --git a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java index cf48507..b26ed2a 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java @@ -16,56 +16,57 @@ package io.sprucehill.mandrill.service; +import java.io.IOException; +import java.util.List; + import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; -import io.sprucehill.mandrill.data.request.MessagePayload; -import io.sprucehill.mandrill.data.request.TemplateMessagePayload; +import io.sprucehill.mandrill.data.request.MessageSendPayload; +import io.sprucehill.mandrill.data.request.RejectsAddPayload; +import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; import io.sprucehill.mandrill.data.response.MessageResponse; -import java.io.IOException; -import java.util.List; - /** * @author Michael Duergner */ public interface IMessageService { /** - * * @param payload * @return * @throws MessageError * @throws IOException */ - List sendMessage(MessagePayload payload) throws MessageError, IOException; + List sendMessage(final MessageSendPayload payload) + throws MessageError, IOException; /** - * * @param payloadBuilder * @return * @throws PreBuildError * @throws MessageError * @throws IOException */ - List sendMessage(MessagePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException; + List sendMessage(final MessageSendPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; /** - * * @param payload * @return * @throws TemplateMessageError * @throws IOException */ - List sendTemplateMessage(TemplateMessagePayload payload) throws TemplateMessageError, IOException; + List sendTemplateMessage(final TemplateMessageSendPayload payload) + throws TemplateMessageError, IOException; /** - * * @param payloadBuilder * @return * @throws PreBuildError * @throws TemplateMessageError * @throws IOException */ - List sendTemplateMessage(TemplateMessagePayload.Builder payloadBuilder) throws PreBuildError, TemplateMessageError, IOException; + List sendTemplateMessage(final TemplateMessageSendPayload.Builder payloadBuilder) + throws PreBuildError, TemplateMessageError, IOException; } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java b/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java new file mode 100644 index 0000000..67c0b25 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java @@ -0,0 +1,92 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import io.sprucehill.mandrill.data.error.MessageError; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.error.TemplateMessageError; +import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; +import io.sprucehill.mandrill.data.response.MessageResponse; + +/** + * @author Michael Duergner + */ +public interface IRejectsService { + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List add(final RejectsAddPayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List add(final RejectsAddPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List delete(final RejectsDeletePayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List delete(final RejectsDeletePayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List list(final RejectsListPayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List list(final RejectsListPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java b/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java index 3730f54..7197b08 100644 --- a/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java @@ -16,33 +16,32 @@ package io.sprucehill.mandrill.service; +import java.io.IOException; + import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.RenderTemplateError; import io.sprucehill.mandrill.data.request.RenderTemplatePayload; -import java.io.IOException; - /** * @author Michael Duergner */ public interface ITemplateService { /** - * * @param payload * @return * @throws RenderTemplateError * @throws IOException */ - String render(RenderTemplatePayload payload) throws RenderTemplateError,IOException; + String render(final RenderTemplatePayload payload) throws RenderTemplateError, IOException; /** - * * @param payloadBuilder * @return * @throws PreBuildError * @throws RenderTemplateError * @throws IOException */ - String render(RenderTemplatePayload.Builder payloadBuilder) throws PreBuildError, RenderTemplateError,IOException; + String render(final RenderTemplatePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; } diff --git a/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java new file mode 100644 index 0000000..bf9d7e8 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java @@ -0,0 +1,92 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import io.sprucehill.mandrill.data.error.MessageError; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.WhitelistsAddPayload; +import io.sprucehill.mandrill.data.request.WhitelistsDeletePayload; +import io.sprucehill.mandrill.data.request.WhitelistsListPayload; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; + +/** + * @author Michael Duergner + */ +public interface IWhitelistsService { + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List add(final WhitelistsAddPayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List add(final WhitelistsAddPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List delete(final WhitelistsDeletePayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List delete(final WhitelistsDeletePayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List list(final WhitelistsListPayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List list(final WhitelistsListPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index bbec75e..a631397 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -16,17 +16,19 @@ package io.sprucehill.mandrill.service; -import com.fasterxml.jackson.core.type.TypeReference; +import java.io.IOException; +import java.util.List; + +import com.sun.xml.internal.ws.resources.SenderMessages; + import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; -import io.sprucehill.mandrill.data.request.MessagePayload; -import io.sprucehill.mandrill.data.request.TemplateMessagePayload; +import io.sprucehill.mandrill.data.request.MessageSendPayload; +import io.sprucehill.mandrill.data.request.RejectsAddPayload; +import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; import io.sprucehill.mandrill.data.response.MessageResponse; -import java.io.IOException; -import java.util.List; - /** * @author Michael Duergner */ @@ -36,58 +38,61 @@ public class MessageService extends AbstractService implements IMessageService { private String fromName; - public void setFromEmail(String fromEmail) { + public void setFromEmail(final String fromEmail) { this.fromEmail = fromEmail; } - public void setFromName(String fromName) { + public void setFromName(final String fromName) { this.fromName = fromName; } @Override - public List sendMessage(MessagePayload payload) throws MessageError, IOException { + public List sendMessage(final MessageSendPayload payload) throws MessageError, IOException { try { - List messageResponses = send(payload,new TypeReference>() {},MessageError.class); + final List messageResponses = + send(payload, List.class, MessageError.class); return messageResponses; - } - catch (MessageError e) { - logger.warn("Got MessageError with code {}, name {} and message {} when sending message!",new Object[] {e.getCode().toString(),e.getName(),e.getMessage()}); + } catch (MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); throw e; - } - catch (IOException e) { - logger.error("Got IOException while sending message!"); + } catch (IOException e) { + LOGGER.error("Got IOException while sending message!"); throw e; } } @Override - public List sendMessage(MessagePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + public List sendMessage(final MessageSendPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { integrateDefaultValues(payloadBuilder); return sendMessage(payloadBuilder.build()); } @Override - public List sendTemplateMessage(TemplateMessagePayload payload) throws TemplateMessageError, IOException { + public List sendTemplateMessage(final TemplateMessageSendPayload payload) + throws TemplateMessageError, IOException { try { - List messageResponses = send(payload,new TypeReference>() {},MessageError.class); + final List messageResponses = + send(payload, List.class, MessageError.class); return messageResponses; - } - catch (MessageError e) { - logger.warn("Got MessageError with code {}, name {} and message {} when sending message!",new Object[] {e.getCode().toString(),e.getName(),e.getMessage()}); + } catch (MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); throw e; - } - catch (IOException e) { - logger.error("Got IOException while sending message!"); + } catch (IOException e) { + LOGGER.error("Got IOException while sending message!"); throw e; } } - public List sendTemplateMessage(TemplateMessagePayload.Builder payloadBuilder) throws PreBuildError, TemplateMessageError, IOException { + public List sendTemplateMessage( + final TemplateMessageSendPayload.Builder payloadBuilder) + throws PreBuildError, TemplateMessageError, IOException { integrateDefaultValues(payloadBuilder); return sendTemplateMessage(payloadBuilder.build()); } - , U extends MessagePayload> void integrateDefaultValues(MessagePayload.Init payloadBuilder) { + , U extends MessageSendPayload> void integrateDefaultValues( + final MessageSendPayload.Init payloadBuilder) { super.integrateDefaultValues(payloadBuilder); if (!payloadBuilder.hasFromEmail() && null != fromEmail && !fromEmail.isEmpty()) { payloadBuilder.withFromEmail(fromEmail); @@ -96,4 +101,4 @@ , U extends MessagePayload> void integrateDe payloadBuilder.withFromName(fromName); } } -} \ No newline at end of file +} diff --git a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java new file mode 100644 index 0000000..296f288 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java @@ -0,0 +1,102 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import io.sprucehill.mandrill.data.error.MessageError; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.error.TemplateMessageError; +import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; +import io.sprucehill.mandrill.data.response.MessageResponse; + +/** + * @author Michael Duergner + */ +public class RejectsService extends AbstractService implements IRejectsService { + + @Override + public List add(final RejectsAddPayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding reject!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while adding reject!"); + throw e; + } + } + + @Override + public List add(final RejectsAddPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return add(payloadBuilder.build()); + } + + @Override + public List delete(final RejectsDeletePayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting reject!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while deleting reject!"); + throw e; + } + } + + @Override + public List delete(final RejectsDeletePayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return delete(payloadBuilder.build()); + } + + @Override + public List list(final RejectsListPayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing rejects!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while listing rejects!"); + throw e; + } + } + + @Override + public List list(final RejectsListPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return list(payloadBuilder.build()); + } + +} diff --git a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java index 76c0e3e..e9d0ad4 100644 --- a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java @@ -16,38 +16,40 @@ package io.sprucehill.mandrill.service; -import com.fasterxml.jackson.core.type.TypeReference; +import java.io.IOException; + import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.RenderTemplateError; import io.sprucehill.mandrill.data.request.RenderTemplatePayload; import io.sprucehill.mandrill.data.response.RenderTemplateResponse; -import java.io.IOException; - /** * @author Michael Duergner */ public class TemplateService extends AbstractService implements ITemplateService { @Override - public String render(RenderTemplatePayload payload) throws RenderTemplateError, IOException { + public String render(final RenderTemplatePayload payload) + throws RenderTemplateError, IOException { try { - RenderTemplateResponse renderTemplateResponse = send(payload,new TypeReference() {},RenderTemplateError.class); + final RenderTemplateResponse renderTemplateResponse = + send(payload, RenderTemplateResponse.class, RenderTemplateError.class); return renderTemplateResponse.getHtml(); - } - catch (MessageError e) { - logger.warn("Got RenderTemplateError with code {}, name {} and message {} when rendering template!",new Object[] {e.getCode().toString(),e.getName(),e.getMessage()}); + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", new Object[]{e.getCode().toString(), e.getName(), + e.getMessage()}); throw e; - } - catch (IOException e) { - logger.error("Got IOException while rendering template!"); + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); throw e; } } @Override - public String render(RenderTemplatePayload.Builder payloadBuilder) throws PreBuildError, RenderTemplateError,IOException { + public String render(final RenderTemplatePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { integrateDefaultValues(payloadBuilder); return render(payloadBuilder.build()); } diff --git a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java new file mode 100644 index 0000000..df0ff60 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java @@ -0,0 +1,101 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import io.sprucehill.mandrill.data.error.MessageError; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.WhitelistsAddPayload; +import io.sprucehill.mandrill.data.request.WhitelistsDeletePayload; +import io.sprucehill.mandrill.data.request.WhitelistsListPayload; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; + +/** + * @author Michael Duergner + */ +public class WhitelistsService extends AbstractService implements IWhitelistsService { + + @Override + public List add(final WhitelistsAddPayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding whitelist!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while sending message!"); + throw e; + } + } + + @Override + public List add(final WhitelistsAddPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return add(payloadBuilder.build()); + } + + @Override + public List delete(final WhitelistsDeletePayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting whitelist!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while deleting whitelist!"); + throw e; + } + } + + @Override + public List delete(final WhitelistsDeletePayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return delete(payloadBuilder.build()); + } + + @Override + public List list(final WhitelistsListPayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing whitelists!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while listing whitelists!"); + throw e; + } + } + + @Override + public List list(final WhitelistsListPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return list(payloadBuilder.build()); + } +} From 0869d3af962d356eef6c86a94a053a9c03cc935b Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Thu, 31 Jul 2014 12:15:10 +0200 Subject: [PATCH 02/25] Remove unused import --- .../java/io/sprucehill/mandrill/service/MessageService.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index a631397..d53e997 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -19,13 +19,10 @@ import java.io.IOException; import java.util.List; -import com.sun.xml.internal.ws.resources.SenderMessages; - import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; import io.sprucehill.mandrill.data.request.MessageSendPayload; -import io.sprucehill.mandrill.data.request.RejectsAddPayload; import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; import io.sprucehill.mandrill.data.response.MessageResponse; From 1844947e452644c41a30dc2bde35f9c623f88663 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Thu, 31 Jul 2014 14:26:56 +0200 Subject: [PATCH 03/25] Fix reject list url --- .../io/sprucehill/mandrill/data/request/RejectsListPayload.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java index 2189a3e..57ffa99 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java @@ -28,7 +28,7 @@ public class RejectsListPayload extends AbstractRejectsPayload { @Override public String getPath() { - return "/rejects/add.json"; + return "/rejects/list.json"; } public static abstract class Init, U extends RejectsListPayload> From a3fa77e028541a3682032b081cb7d24578a603ef Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Wed, 6 Aug 2014 13:33:19 +0200 Subject: [PATCH 04/25] Add Tests for RejectsService and WhitelistsService --- pom.xml | 108 ++++++++++++++---- .../data/request/AbstractRejectsPayload.java | 6 - .../request/AbstractWhitelistsPayload.java | 5 - .../data/request/RejectsDeletePayload.java | 2 - .../data/request/WhitelistsListPayload.java | 2 - .../data/response/AnyListAddResponse.java | 1 - .../mandrill/service/AbstractService.java | 53 ++++++--- .../mandrill/service/IMessageService.java | 1 - .../mandrill/service/IRejectsService.java | 14 +-- .../mandrill/service/IWhitelistsService.java | 8 +- .../mandrill/service/MessageService.java | 3 +- .../mandrill/service/RejectsService.java | 35 +++--- .../mandrill/service/TemplateService.java | 3 +- .../mandrill/service/WhitelistsService.java | 28 +++-- .../io/sprucehill/mandrill/AbstractTest.java | 21 ++++ .../mandrill/service/RejectsServiceTest.java | 54 +++++++++ .../service/WhitelistsServiceTest.java | 56 +++++++++ 17 files changed, 309 insertions(+), 91 deletions(-) create mode 100644 src/test/java/io/sprucehill/mandrill/AbstractTest.java create mode 100644 src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java create mode 100644 src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java diff --git a/pom.xml b/pom.xml index a70a42b..f5d7aa4 100644 --- a/pom.xml +++ b/pom.xml @@ -41,39 +41,99 @@ + + org.apache.maven.plugins + maven-antrun-plugin + 1.7 + + + org.apache.maven.plugins + maven-assembly-plugin + 2.4 + org.apache.maven.plugins maven-compiler-plugin - ${version.maven-compiler} + 3.1 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.8 + + + org.apache.maven.plugins + maven-release-plugin + 2.5 org.apache.maven.plugins maven-source-plugin - ${version.maven-source} + 2.3 + + + attach-sources + verify + + jar-no-fork + + + org.apache.maven.plugins - maven-compiler-plugin - - 1.6 - 1.6 - + maven-clean-plugin + 2.5 + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.1 + + + org.apache.maven.plugins + maven-enforcer-plugin + 1.3.1 + + + org.apache.maven.plugins + maven-install-plugin + 2.5.1 + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + org.apache.maven.plugins + maven-resources-plugin + 2.6 org.apache.maven.plugins - maven-source-plugin - - - attach-sources - verify - - jar-no-fork - - - + maven-site-plugin + 3.3 + + + org.apache.maven.plugins + maven-surefire-plugin + 2.17 + + + + mandrill.apikey + ${mandrill.apikey} + + + @@ -101,16 +161,18 @@ org.slf4j slf4j-api + + junit + junit + UTF-8 - 3.1 - 2.3 - 0.6-groovy-1.8 4.2.1 2.11 1.7.7 + 4.11 @@ -130,6 +192,12 @@ slf4j-api ${version.slf4j} + + junit + junit + ${version.junit} + test + diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java index 247bb18..a073d01 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java @@ -16,14 +16,8 @@ package io.sprucehill.mandrill.data.request; -import java.util.HashMap; -import java.util.Map; - import com.fasterxml.jackson.annotation.JsonProperty; -import io.sprucehill.mandrill.data.AbstractJsonBase; -import io.sprucehill.mandrill.data.error.PreBuildError; - /** * @author Michael Duergner */ diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java index b405bb7..0644084 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java @@ -16,9 +16,6 @@ package io.sprucehill.mandrill.data.request; -import java.util.HashMap; -import java.util.Map; - import com.fasterxml.jackson.annotation.JsonProperty; /** @@ -34,8 +31,6 @@ public abstract class AbstractWhitelistsPayload extends AbstractPayload { public static abstract class Init, U extends AbstractWhitelistsPayload> extends AbstractPayload.Init { - protected U object; - protected Init(U object) { super(object); } diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java index 4e8ebb2..6dbac72 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java @@ -16,8 +16,6 @@ package io.sprucehill.mandrill.data.request; -import com.fasterxml.jackson.annotation.JsonProperty; - /** * @author Michael Duergner */ diff --git a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java index d28d82c..ada78e1 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java @@ -16,8 +16,6 @@ package io.sprucehill.mandrill.data.request; -import com.fasterxml.jackson.annotation.JsonProperty; - /** * @author Michael Duergner */ diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java index d17d81c..6dc5554 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java @@ -16,7 +16,6 @@ package io.sprucehill.mandrill.data.response; -import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; /** diff --git a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java index 9f172c6..05b3598 100644 --- a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java +++ b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java @@ -36,31 +36,58 @@ public abstract class AbstractService { protected final Logger LOGGER = LoggerFactory.getLogger(getClass()); - protected String baseUrl = "https://mandrillapp.com/api/1.0"; + private static String baseUrl = "https://mandrillapp.com/api/1.0"; - protected JerseyClient jerseyClient; + private static JerseyClient jerseyClient; - protected String key; + private static String key; /** * @param baseUrl */ - public void setBaseUrl(final String baseUrl) { - this.baseUrl = baseUrl; + public static void setBaseUrl(final String baseUrl) { + AbstractService.baseUrl = baseUrl; + } + + /** + * + * @return + */ + public static String getBaseUrl() { + return baseUrl; } /** * @param jerseyClient */ - public void setClient(final JerseyClient jerseyClient) { - this.jerseyClient = jerseyClient; + public static void setClient(final JerseyClient jerseyClient) { + AbstractService.jerseyClient = jerseyClient; + } + + /** + * + * @return + */ + public static JerseyClient getJerseyClient() { + if (jerseyClient == null) { + synchronized (AbstractService.class) { + if (jerseyClient == null) { + jerseyClient = JerseyClientBuilder.createClient(); + } + } + } + return jerseyClient; } /** * @param key */ - public void setKey(final String key) { - this.key = key; + public static void setKey(final String key) { + AbstractService.key = key; + } + + public static String getKey() { + return key; } @PostConstruct @@ -69,9 +96,7 @@ public final void postConstruct() { } void onPostConstruct() { - if (null == jerseyClient) { - jerseyClient = JerseyClientBuilder.createClient(); - } + getJerseyClient(); } , U extends AbstractPayload> void integrateDefaultValues(AbstractPayload.Init payloadBuilder) { @@ -82,8 +107,8 @@ , U extends AbstractPayload> void integrate T send(final AbstractPayload payload, final Class responseClass, final Class errorClass) throws E, IOException { - final Response response = jerseyClient - .target(baseUrl) + final Response response = getJerseyClient() + .target(getBaseUrl()) .path(payload.getPath()) .request() .post(Entity.json(payload)); diff --git a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java index b26ed2a..8c0349d 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java @@ -23,7 +23,6 @@ import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; import io.sprucehill.mandrill.data.request.MessageSendPayload; -import io.sprucehill.mandrill.data.request.RejectsAddPayload; import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; import io.sprucehill.mandrill.data.response.MessageResponse; diff --git a/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java b/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java index 67c0b25..04f186b 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java @@ -21,12 +21,12 @@ import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; -import io.sprucehill.mandrill.data.error.TemplateMessageError; -import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.request.RejectsAddPayload; +import io.sprucehill.mandrill.data.request.RejectsDeletePayload; +import io.sprucehill.mandrill.data.request.RejectsListPayload; import io.sprucehill.mandrill.data.response.AnyListAddResponse; import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; import io.sprucehill.mandrill.data.response.AnyListListResponse; -import io.sprucehill.mandrill.data.response.MessageResponse; /** * @author Michael Duergner @@ -38,7 +38,7 @@ public interface IRejectsService { * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List add(final RejectsAddPayload payload) + AnyListAddResponse add(final RejectsAddPayload payload) throws MessageError, IOException; /** @@ -48,7 +48,7 @@ List add(final RejectsAddPayload payload) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List add(final RejectsAddPayload.Builder payloadBuilder) + AnyListAddResponse add(final RejectsAddPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException; /** @@ -57,7 +57,7 @@ List add(final RejectsAddPayload.Builder payloadBuilder) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List delete(final RejectsDeletePayload payload) + AnyListDeleteResponse delete(final RejectsDeletePayload payload) throws MessageError, IOException; /** @@ -67,7 +67,7 @@ List delete(final RejectsDeletePayload payload) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List delete(final RejectsDeletePayload.Builder payloadBuilder) + AnyListDeleteResponse delete(final RejectsDeletePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException; /** diff --git a/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java index bf9d7e8..da20928 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java @@ -38,7 +38,7 @@ public interface IWhitelistsService { * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List add(final WhitelistsAddPayload payload) + AnyListAddResponse add(final WhitelistsAddPayload payload) throws MessageError, IOException; /** @@ -48,7 +48,7 @@ List add(final WhitelistsAddPayload payload) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List add(final WhitelistsAddPayload.Builder payloadBuilder) + AnyListAddResponse add(final WhitelistsAddPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException; /** @@ -57,7 +57,7 @@ List add(final WhitelistsAddPayload.Builder payloadBuilder) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List delete(final WhitelistsDeletePayload payload) + AnyListDeleteResponse delete(final WhitelistsDeletePayload payload) throws MessageError, IOException; /** @@ -67,7 +67,7 @@ List delete(final WhitelistsDeletePayload payload) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List delete(final WhitelistsDeletePayload.Builder payloadBuilder) + AnyListDeleteResponse delete(final WhitelistsDeletePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException; /** diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index d53e997..01ba943 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -50,7 +50,8 @@ public List sendMessage(final MessageSendPayload payload) throw send(payload, List.class, MessageError.class); return messageResponses; } catch (MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (IOException e) { LOGGER.error("Got IOException while sending message!"); diff --git a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java index 296f288..ec966ee 100644 --- a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java @@ -21,12 +21,12 @@ import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; -import io.sprucehill.mandrill.data.error.TemplateMessageError; -import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.request.RejectsAddPayload; +import io.sprucehill.mandrill.data.request.RejectsDeletePayload; +import io.sprucehill.mandrill.data.request.RejectsListPayload; import io.sprucehill.mandrill.data.response.AnyListAddResponse; import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; import io.sprucehill.mandrill.data.response.AnyListListResponse; -import io.sprucehill.mandrill.data.response.MessageResponse; /** * @author Michael Duergner @@ -34,14 +34,15 @@ public class RejectsService extends AbstractService implements IRejectsService { @Override - public List add(final RejectsAddPayload payload) + public AnyListAddResponse add(final RejectsAddPayload payload) throws MessageError, IOException { try { - final List messageResponses = - send(payload, List.class, MessageError.class); + final AnyListAddResponse messageResponses = + send(payload, AnyListAddResponse.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding reject!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding reject!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while adding reject!"); @@ -50,20 +51,22 @@ public List add(final RejectsAddPayload payload) } @Override - public List add(final RejectsAddPayload.Builder payloadBuilder) + public AnyListAddResponse add(final RejectsAddPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return add(payloadBuilder.build()); } @Override - public List delete(final RejectsDeletePayload payload) + public AnyListDeleteResponse delete(final RejectsDeletePayload payload) throws MessageError, IOException { try { - final List messageResponses = - send(payload, List.class, MessageError.class); + final AnyListDeleteResponse messageResponses = + send(payload, AnyListDeleteResponse.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting reject!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting reject!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while deleting reject!"); @@ -72,8 +75,9 @@ public List delete(final RejectsDeletePayload payload) } @Override - public List delete(final RejectsDeletePayload.Builder payloadBuilder) + public AnyListDeleteResponse delete(final RejectsDeletePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return delete(payloadBuilder.build()); } @@ -85,7 +89,8 @@ public List list(final RejectsListPayload payload) send(payload, List.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing rejects!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing rejects!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while listing rejects!"); @@ -96,7 +101,7 @@ public List list(final RejectsListPayload payload) @Override public List list(final RejectsListPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return list(payloadBuilder.build()); } - } diff --git a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java index e9d0ad4..a68215c 100644 --- a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java @@ -38,8 +38,7 @@ public String render(final RenderTemplatePayload payload) return renderTemplateResponse.getHtml(); } catch (final MessageError e) { LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + - "rendering template!", new Object[]{e.getCode().toString(), e.getName(), - e.getMessage()}); + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while rendering template!"); diff --git a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java index df0ff60..f12d1c4 100644 --- a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java @@ -21,6 +21,7 @@ import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.MessageSendPayload; import io.sprucehill.mandrill.data.request.WhitelistsAddPayload; import io.sprucehill.mandrill.data.request.WhitelistsDeletePayload; import io.sprucehill.mandrill.data.request.WhitelistsListPayload; @@ -34,14 +35,15 @@ public class WhitelistsService extends AbstractService implements IWhitelistsService { @Override - public List add(final WhitelistsAddPayload payload) + public AnyListAddResponse add(final WhitelistsAddPayload payload) throws MessageError, IOException { try { - final List messageResponses = - send(payload, List.class, MessageError.class); + final AnyListAddResponse messageResponses = + send(payload, AnyListAddResponse.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding whitelist!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding whitelist!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while sending message!"); @@ -50,20 +52,21 @@ public List add(final WhitelistsAddPayload payload) } @Override - public List add(final WhitelistsAddPayload.Builder payloadBuilder) + public AnyListAddResponse add(final WhitelistsAddPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return add(payloadBuilder.build()); } @Override - public List delete(final WhitelistsDeletePayload payload) + public AnyListDeleteResponse delete(final WhitelistsDeletePayload payload) throws MessageError, IOException { try { - final List messageResponses = - send(payload, List.class, MessageError.class); + final AnyListDeleteResponse messageResponses = + send(payload, AnyListDeleteResponse.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting whitelist!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting whitelist!", e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while deleting whitelist!"); @@ -72,8 +75,9 @@ public List delete(final WhitelistsDeletePayload payload) } @Override - public List delete(final WhitelistsDeletePayload.Builder payloadBuilder) + public AnyListDeleteResponse delete(final WhitelistsDeletePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return delete(payloadBuilder.build()); } @@ -85,7 +89,8 @@ public List list(final WhitelistsListPayload payload) send(payload, List.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing whitelists!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing whitelists!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while listing whitelists!"); @@ -96,6 +101,7 @@ public List list(final WhitelistsListPayload payload) @Override public List list(final WhitelistsListPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return list(payloadBuilder.build()); } } diff --git a/src/test/java/io/sprucehill/mandrill/AbstractTest.java b/src/test/java/io/sprucehill/mandrill/AbstractTest.java new file mode 100644 index 0000000..cb5b76f --- /dev/null +++ b/src/test/java/io/sprucehill/mandrill/AbstractTest.java @@ -0,0 +1,21 @@ +package io.sprucehill.mandrill; + +import org.junit.Before; + +import io.sprucehill.mandrill.service.AbstractService; + +/** + * Created by stephan on 06.08.14. + */ +public abstract class AbstractTest { + protected String apikey = null; + + @Before + public void init() { + apikey = System.getenv("mandrill.apikey"); + if (apikey == null) { + throw new IllegalArgumentException("No apikey in environment"); + } + AbstractService.setKey(apikey); + } +} diff --git a/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java new file mode 100644 index 0000000..6162583 --- /dev/null +++ b/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java @@ -0,0 +1,54 @@ +package io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +import io.sprucehill.mandrill.AbstractTest; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.RejectsAddPayload; +import io.sprucehill.mandrill.data.request.RejectsDeletePayload; +import io.sprucehill.mandrill.data.request.RejectsListPayload; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; + +public class RejectsServiceTest extends AbstractTest { + private static final String EMAIL = "reject@test.com"; + + @Test + public void add() throws PreBuildError, IOException { + final RejectsService rejectsService = new RejectsService(); + + final AnyListAddResponse response = rejectsService.add( + new RejectsAddPayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(EMAIL, response.getEmail()); + Assert.assertTrue(response.isAdded()); + } + + @Test + public void delete() throws PreBuildError, IOException { + final RejectsService rejectsService = new RejectsService(); + + final AnyListDeleteResponse response = rejectsService.delete( + new RejectsDeletePayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(EMAIL, response.getEmail()); + Assert.assertTrue(response.isDeleted()); + } + + @Test + public void list() throws PreBuildError, IOException { + final RejectsService rejectsService = new RejectsService(); + + rejectsService.add(new RejectsAddPayload.Builder().withEmail(EMAIL)); + + final List response = rejectsService.list( + new RejectsListPayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(1, response.size()); + } +} diff --git a/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java new file mode 100644 index 0000000..88a540e --- /dev/null +++ b/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java @@ -0,0 +1,56 @@ +package io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import org.junit.Test; + +import io.sprucehill.mandrill.AbstractTest; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.WhitelistsAddPayload; +import io.sprucehill.mandrill.data.request.WhitelistsDeletePayload; +import io.sprucehill.mandrill.data.request.WhitelistsListPayload; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; + +import org.junit.Assert; + +public class WhitelistsServiceTest extends AbstractTest { + private static final String EMAIL = "whitelist@test.com"; + + @Test + public void add() throws PreBuildError, IOException { + final WhitelistsService whitelistsService = new WhitelistsService(); + + final AnyListAddResponse response = whitelistsService.add( + new WhitelistsAddPayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(EMAIL, response.getEmail()); + Assert.assertTrue(response.isAdded()); + } + + @Test + public void delete() throws PreBuildError, IOException { + final WhitelistsService whitelistsService = new WhitelistsService(); + + + final AnyListDeleteResponse response = whitelistsService.delete( + new WhitelistsDeletePayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(EMAIL, response.getEmail()); + Assert.assertTrue(response.isDeleted()); + } + + @Test + public void list() throws PreBuildError, IOException { + final WhitelistsService whitelistsService = new WhitelistsService(); + + whitelistsService.add(new WhitelistsAddPayload.Builder().withEmail(EMAIL)); + + final List response = whitelistsService.list( + new WhitelistsListPayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(1, response.size()); + } +} From f8ef56a758adb90bb0533f5917f57c2d9ef8b601 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Wed, 6 Aug 2014 16:06:53 +0200 Subject: [PATCH 05/25] Add MessageServiceTest --- pom.xml | 10 +++ .../mandrill/service/MessageService.java | 3 +- .../io/sprucehill/mandrill/AbstractTest.java | 8 +++ .../mandrill/service/MessageServiceTest.java | 63 +++++++++++++++++++ 4 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java diff --git a/pom.xml b/pom.xml index f5d7aa4..c39ce1d 100644 --- a/pom.xml +++ b/pom.xml @@ -165,6 +165,10 @@ junit junit + + org.mockito + mockito-all + @@ -198,6 +202,12 @@ ${version.junit} test + + org.mockito + mockito-all + 1.9.5 + test + diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index 01ba943..0be517e 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -74,7 +74,8 @@ public List sendTemplateMessage(final TemplateMessageSendPayloa send(payload, List.class, MessageError.class); return messageResponses; } catch (MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (IOException e) { LOGGER.error("Got IOException while sending message!"); diff --git a/src/test/java/io/sprucehill/mandrill/AbstractTest.java b/src/test/java/io/sprucehill/mandrill/AbstractTest.java index cb5b76f..9ea1192 100644 --- a/src/test/java/io/sprucehill/mandrill/AbstractTest.java +++ b/src/test/java/io/sprucehill/mandrill/AbstractTest.java @@ -12,7 +12,15 @@ public abstract class AbstractTest { @Before public void init() { + // 1. try apikey = System.getenv("mandrill.apikey"); + + // 2. try + if (apikey == null) { + apikey = System.getenv("mandrill.apikey"); + } + + // failed? if (apikey == null) { throw new IllegalArgumentException("No apikey in environment"); } diff --git a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java new file mode 100644 index 0000000..3177731 --- /dev/null +++ b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java @@ -0,0 +1,63 @@ +package io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +import io.sprucehill.mandrill.AbstractTest; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.response.MessageResponse; + +public class MessageServiceTest extends AbstractTest { + private static final String EMAIL = "test@test.com"; + private static final String TEMPLATE = "testtemplate"; + private static final String FROM_EMAIL = "info@test.com"; + private static final String FROM_NAME = "Testservice"; + + @Test + public void send() throws PreBuildError, IOException { + final MessageService messageService = new MessageService(); + + final List response = messageService.sendMessage( + new MessageSendPayload.Builder().withTo(EMAIL).withSubject("Mandrill Test") + .withText("This is an automatic test for emails send using Mandrill")); + + Assert.assertFalse(response.isEmpty()); + //Assert.assertEquals(EMAIL, response.getEmail()); + //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); + } + + @Test + public void sendWithFrom() throws PreBuildError, IOException { + final MessageService messageService = new MessageService(); + messageService.setFromEmail(FROM_EMAIL); + messageService.setFromName(FROM_NAME); + + + + final List response = messageService.sendMessage( + new MessageSendPayload.Builder().withTo(EMAIL).withSubject("Mandrill Test") + .withText("This is an automatic test for emails send using Mandrill")); + + Assert.assertFalse(response.isEmpty()); + //Assert.assertEquals(EMAIL, response.getEmail()); + //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); + } + + @Test + public void sendTemplate() throws PreBuildError, IOException { + final MessageService messageService = new MessageService(); + + final List response = messageService.sendTemplateMessage( + new TemplateMessageSendPayload.Builder().withTo(EMAIL) + .withTemplateName(TEMPLATE)); + + Assert.assertFalse(response.isEmpty()); + //Assert.assertEquals(EMAIL, response.getEmail()); + //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); + } + +} From 3b4ad40d4ba2f5786c5bb320f23a7da91654038f Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Wed, 6 Aug 2014 16:08:10 +0200 Subject: [PATCH 06/25] Fix environment variable name for second try --- src/test/java/io/sprucehill/mandrill/AbstractTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/io/sprucehill/mandrill/AbstractTest.java b/src/test/java/io/sprucehill/mandrill/AbstractTest.java index 9ea1192..35aa645 100644 --- a/src/test/java/io/sprucehill/mandrill/AbstractTest.java +++ b/src/test/java/io/sprucehill/mandrill/AbstractTest.java @@ -17,7 +17,7 @@ public void init() { // 2. try if (apikey == null) { - apikey = System.getenv("mandrill.apikey"); + apikey = System.getenv("mandrill_apikey"); } // failed? From 32f290c083638a269e29b517e76629d2e87359bf Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Wed, 6 Aug 2014 17:48:36 +0200 Subject: [PATCH 07/25] Fix url form MessageService.sendTemplate Add TemplateService --- .../request/IWithFromEmailPayloadBuilder.java | 26 +++ .../request/IWithFromNamePayloadBuilder.java | 26 +++ .../data/request/IWithFromPayloadBuilder.java | 25 +++ .../request/IWithLabelPayloadBuilder.java | 26 +++ .../data/request/IWithNamePayloadBuilder.java | 26 +++ .../mandrill/data/request/LabelPayload.java | 41 +++++ ...d.java => MessageSendTemplatePayload.java} | 8 +- .../request/TemplateAddOrUpdatePayload.java | 95 ++++++++++ .../data/request/TemplateAddPayload.java | 44 +++++ .../data/request/TemplateDeletePayload.java | 39 +++++ .../data/request/TemplateInfoPayload.java | 39 +++++ .../data/request/TemplateListPayload.java | 39 +++++ .../data/request/TemplatePayload.java | 86 +++++++++ .../data/request/TemplatePublishPayload.java | 39 +++++ ...ayload.java => TemplateRenderPayload.java} | 8 +- .../data/request/TemplateUpdatePayload.java | 40 +++++ .../data/response/AnyListAddResponse.java | 11 +- .../data/response/AnyListDeleteResponse.java | 11 +- .../data/response/AnyListListResponse.java | 13 +- .../data/response/MessageResponse.java | 12 +- ...ponse.java => TemplateRenderResponse.java} | 9 +- .../data/response/TemplateResponse.java | 164 ++++++++++++++++++ .../mandrill/service/IMessageService.java | 6 +- .../mandrill/service/ITemplateService.java | 118 ++++++++++++- .../mandrill/service/MessageService.java | 6 +- .../mandrill/service/TemplateService.java | 162 ++++++++++++++++- .../mandrill/service/MessageServiceTest.java | 5 +- .../mandrill/service/TemplateServiceTest.java | 53 ++++++ 28 files changed, 1113 insertions(+), 64 deletions(-) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java rename src/main/java/io/sprucehill/mandrill/data/request/{TemplateMessageSendPayload.java => MessageSendTemplatePayload.java} (91%) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java rename src/main/java/io/sprucehill/mandrill/data/request/{RenderTemplatePayload.java => TemplateRenderPayload.java} (93%) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java rename src/main/java/io/sprucehill/mandrill/data/response/{RenderTemplateResponse.java => TemplateRenderResponse.java} (80%) create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java create mode 100644 src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java new file mode 100644 index 0000000..22dd999 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java @@ -0,0 +1,26 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + * @param + */ +public interface IWithFromEmailPayloadBuilder { + T withFromEmail(final String email); + +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java new file mode 100644 index 0000000..9758e3f --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java @@ -0,0 +1,26 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + * @param + */ +public interface IWithFromNamePayloadBuilder { + T withFromName(final String name); + +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java new file mode 100644 index 0000000..a0a3f3c --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java @@ -0,0 +1,25 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + * @param + */ +public interface IWithFromPayloadBuilder extends IWithFromEmailPayloadBuilder, + IWithFromNamePayloadBuilder { +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java new file mode 100644 index 0000000..9041f56 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java @@ -0,0 +1,26 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + * @param + */ +public interface IWithLabelPayloadBuilder { + + T withLabel(final String label); +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java new file mode 100644 index 0000000..41e83d3 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java @@ -0,0 +1,26 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + * @param + */ +public interface IWithNamePayloadBuilder { + + T withName(final String name); +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java new file mode 100644 index 0000000..c342772 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java @@ -0,0 +1,41 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.sprucehill.mandrill.data.AbstractJsonBase; + +/** + * + */ +public abstract class LabelPayload extends AbstractPayload { + @JsonProperty(value = "label") + protected String label; + + protected static abstract class Init, U extends LabelPayload> extends AbstractPayload.Init implements IWithLabelPayloadBuilder { + + protected Init(U object) { + super(object); + } + + public T withLabel(String label) { + object.label = label; + return self(); + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/MessageSendTemplatePayload.java similarity index 91% rename from src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java rename to src/main/java/io/sprucehill/mandrill/data/request/MessageSendTemplatePayload.java index 4cb7b14..974c09f 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/MessageSendTemplatePayload.java @@ -25,7 +25,7 @@ /** * @author Michael Duergner */ -public class TemplateMessageSendPayload extends MessageSendPayload { +public class MessageSendTemplatePayload extends MessageSendPayload { public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; @JsonProperty( @@ -42,7 +42,7 @@ public String getPath() { return "/messages/send-template.json"; } - protected static abstract class Init, U extends TemplateMessageSendPayload> + protected static abstract class Init, U extends MessageSendTemplatePayload> extends MessageSendPayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder { @@ -73,10 +73,10 @@ protected void preBuild() { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { - super(new TemplateMessageSendPayload()); + super(new MessageSendTemplatePayload()); } @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java new file mode 100644 index 0000000..e315363 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java @@ -0,0 +1,95 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * + */ +public abstract class TemplateAddOrUpdatePayload extends TemplatePayload { + + public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; + @JsonProperty(value = "from_email") + protected String fromEmail; + @JsonProperty(value = "from_name") + protected String fromName; + @JsonProperty(value = "subject") + protected String subject; + @JsonProperty(value = "code") + protected String code; + @JsonProperty(value = "text") + protected String text; + @JsonProperty(value = "publish") + protected boolean publish; + @JsonProperty(value = "labels") + protected List labels; + + protected static abstract class Init, U extends TemplateAddOrUpdatePayload> extends TemplatePayload.Init implements IWithFromPayloadBuilder { + + protected Init(U object) { + super(object); + } + + public T withFromEmail(String fromEmail) { + object.fromEmail = fromEmail; + return self(); + } + + public T withFromName(String name) { + object.fromName = name; + return self(); + } + + public T withSubject(String subject) { + object.subject = subject; + return self(); + } + + public T withCode(String code) { + object.code = code; + return self(); + } + + public T withText(String text) { + object.text = text; + return self(); + } + + public T withPublish(boolean publish) { + object.publish = publish; + return self(); + } + + public T withLabel(String label) { + if (!object.labels.contains(label)) { + object.labels.add(label); + } + return self(); + } + + @Override + protected void preBuild() { + super.preBuild(); + if (null == object.name || object.name.isEmpty()) { + addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET, "'template_name' must be set and may not be empty!"); + } + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java new file mode 100644 index 0000000..fb797f1 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java @@ -0,0 +1,44 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * + */ +public class TemplateAddPayload extends TemplateAddOrUpdatePayload { + @Override + public String getPath() { + return "/templates/add.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplateAddPayload()); + } + + @Override + protected Builder self() { + return this; + } + } + +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java new file mode 100644 index 0000000..e93dd71 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java @@ -0,0 +1,39 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + */ +public class TemplateDeletePayload extends TemplatePayload { + @Override + public String getPath() { + return "/templates/delete.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplateDeletePayload()); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java new file mode 100644 index 0000000..f14997a --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java @@ -0,0 +1,39 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + */ +public class TemplateInfoPayload extends TemplatePayload { + @Override + public String getPath() { + return "/templates/info.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplateInfoPayload()); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java new file mode 100644 index 0000000..9949993 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java @@ -0,0 +1,39 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + */ +public class TemplateListPayload extends LabelPayload { + @Override + public String getPath() { + return "/templates/list.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplateListPayload()); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java new file mode 100644 index 0000000..156eb9d --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java @@ -0,0 +1,86 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.sprucehill.mandrill.data.AbstractJsonBase; + +/** + * + */ +public abstract class TemplatePayload extends AbstractPayload { + + public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; + + @JsonProperty(value = "name") + protected String name; + + public static final class Variable extends AbstractJsonBase { + + @JsonProperty + protected String name; + + @JsonProperty + protected String content; + + protected Variable() { + } + + protected Variable(String name, String content) { + this.name = name; + this.content = content; + } + + @Override + public int hashCode() { + return null == name ? super.hashCode() : name.hashCode(); + } + + @Override + public boolean equals(Object o) { + if (null == o) { + return false; + } + if (!Variable.class.isAssignableFrom(o.getClass())) { + return false; + } + + return null == name ? super.equals(o) : name.equals(((Variable) o).name); + } + } + + protected static abstract class Init, U extends TemplatePayload> extends AbstractPayload.Init implements IWithNamePayloadBuilder { + + protected Init(U object) { + super(object); + } + + public T withName(String name) { + object.name = name; + return self(); + } + + @Override + protected void preBuild() { + super.preBuild(); + if (null == object.name || object.name.isEmpty()) { + addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET, "'template_name' must be set and may not be empty!"); + } + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java new file mode 100644 index 0000000..5c3021b --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java @@ -0,0 +1,39 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + */ +public class TemplatePublishPayload extends TemplatePayload { + @Override + public String getPath() { + return "/templates/publish.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplatePublishPayload()); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateRenderPayload.java similarity index 93% rename from src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java rename to src/main/java/io/sprucehill/mandrill/data/request/TemplateRenderPayload.java index b5a12b1..55925d5 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateRenderPayload.java @@ -27,7 +27,7 @@ /** * @author Michael Duergner */ -public class RenderTemplatePayload extends AbstractPayload { +public class TemplateRenderPayload extends AbstractPayload { public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; @JsonProperty(value = "template_name") @@ -77,7 +77,7 @@ public boolean equals(Object o) { } } - protected static abstract class Init, U extends RenderTemplatePayload> extends AbstractPayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder, IWithMergeVarPayloadBuilder { + protected static abstract class Init, U extends TemplateRenderPayload> extends AbstractPayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder, IWithMergeVarPayloadBuilder { protected Init(U object) { super(object); @@ -113,10 +113,10 @@ protected void preBuild() { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { - super(new RenderTemplatePayload()); + super(new TemplateRenderPayload()); } @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java new file mode 100644 index 0000000..165f554 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java @@ -0,0 +1,40 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + */ +public class TemplateUpdatePayload extends TemplateAddOrUpdatePayload { + @Override + public String getPath() { + return "/templates/update.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplateUpdatePayload()); + } + + @Override + protected Builder self() { + return this; + } + } + +} diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java index 6dc5554..dda2185 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java @@ -18,8 +18,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; +import jersey.repackaged.com.google.common.base.Objects; + /** - * @author Michael Duergner + * */ public class AnyListAddResponse extends Response { @@ -38,12 +40,7 @@ public boolean isAdded() { @Override public String toString() { - return new StringBuilder("MessageResponse [email: "). - append(email). - append(", added: "). - append(added). - append("]"). - toString(); + return Objects.toStringHelper(this).add("email", email).add("added", added).toString(); } } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java index 8e32273..1cc396d 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java @@ -18,8 +18,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; +import jersey.repackaged.com.google.common.base.Objects; + /** - * @author Michael Duergner + * */ public class AnyListDeleteResponse extends Response { @@ -38,12 +40,7 @@ public boolean isDeleted() { @Override public String toString() { - return new StringBuilder("MessageResponse [email: "). - append(email). - append(", deleted: "). - append(deleted). - append("]"). - toString(); + return Objects.toStringHelper(this).add("email", email).add("deleted", deleted).toString(); } } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java index 8dd1a2d..ef52156 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java @@ -17,12 +17,13 @@ package io.sprucehill.mandrill.data.response; import java.util.Date; +import java.util.Objects; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; /** - * @author Michael Duergner + * */ public class AnyListListResponse extends Response { @@ -48,14 +49,8 @@ public Date getCreatedAt() { @Override public String toString() { - return new StringBuilder("MessageResponse [email: "). - append(email). - append(", detail: "). - append(detail). - append(", created_at: "). - append(createdAt). - append("]"). - toString(); + return jersey.repackaged.com.google.common.base.Objects.toStringHelper(this) + .add("email", email).add("detail", detail).add("createdAt", createdAt).toString(); } } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java index 819e005..fee7d1c 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java @@ -19,6 +19,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import jersey.repackaged.com.google.common.base.Objects; + /** * @author Michael Duergner */ @@ -45,14 +47,8 @@ public String getRejectReason() { @Override public String toString() { - return new StringBuilder("MessageResponse [email: "). - append(email). - append(", status: "). - append(status). - append(", reject_reason: "). - append(rejectReason). - append("]"). - toString(); + return Objects.toStringHelper(this).add("email", email).add("status", status) + .add("rejectReaseon", rejectReason).toString(); } public static enum Status { diff --git a/src/main/java/io/sprucehill/mandrill/data/response/RenderTemplateResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/TemplateRenderResponse.java similarity index 80% rename from src/main/java/io/sprucehill/mandrill/data/response/RenderTemplateResponse.java rename to src/main/java/io/sprucehill/mandrill/data/response/TemplateRenderResponse.java index 1bc61e2..f1bb37e 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/RenderTemplateResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/TemplateRenderResponse.java @@ -18,10 +18,12 @@ import com.fasterxml.jackson.annotation.JsonProperty; +import jersey.repackaged.com.google.common.base.Objects; + /** * @author Michael Duergner */ -public class RenderTemplateResponse extends Response { +public class TemplateRenderResponse extends Response { @JsonProperty private String html; @@ -32,9 +34,6 @@ public String getHtml() { @Override public String toString() { - return new StringBuilder("RenderTemplateResponse [html: "). - append(html). - append("]"). - toString(); + return Objects.toStringHelper(this).add("html", html).toString(); } } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java new file mode 100644 index 0000000..7d29655 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java @@ -0,0 +1,164 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.response; + +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; + +import jersey.repackaged.com.google.common.base.Objects; + +/** + * @author Michael Duergner + */ +public class TemplateResponse extends Response { + + @JsonProperty + private String slug; + + @JsonProperty + private String name; + + @JsonProperty + private List labels; + + @JsonProperty + private String code; + + @JsonProperty + private String subject; + + @JsonProperty("from_email") + private String fromEmail; + + @JsonProperty("from_name") + private String fromName; + + @JsonProperty + private String text; + + @JsonProperty("publish_name") + private String publishName; + + @JsonProperty("publish_code") + private String publishCode; + + @JsonProperty("publish_subject") + private String publishSubject; + + @JsonProperty("publish_from_email") + private String publishFromEmail; + + @JsonProperty("publish_from_name") + private String publishFromName; + + @JsonProperty("publish_text") + private String publishText; + + @JsonProperty("published_at") + @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT") + private Date publishedAt; + + @JsonProperty("created_at") + @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT") + private Date createdAt; + + @JsonProperty("updated_at") + @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT") + private Date updatedAt; + + public String getSlug() { + return slug; + } + + public String getName() { + return name; + } + + public List getLabels() { + return labels; + } + + public String getCode() { + return code; + } + + public String getSubject() { + return subject; + } + + public String getFromEmail() { + return fromEmail; + } + + public String getFromName() { + return fromName; + } + + public String getText() { + return text; + } + + public String getPublishName() { + return publishName; + } + + public String getPublishCode() { + return publishCode; + } + + public String getPublishSubject() { + return publishSubject; + } + + public String getPublishFromEmail() { + return publishFromEmail; + } + + public String getPublishFromName() { + return publishFromName; + } + + public String getPublishText() { + return publishText; + } + + public Date getPublishedAt() { + return publishedAt; + } + + public Date getCreatedAt() { + return createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + @Override + public String toString() { + return Objects.toStringHelper(this).add("slug", slug).add("name", name).add("label", labels) + .add("code", code).add("subject", subject).add("fromEmail", fromEmail) + .add("fromName", fromName).add("text", text).add("publishName", publishName) + .add("publishCode", publishCode).add("publishSubject", publishSubject) + .add("publishFromEmail", publishFromEmail).add("publishFromName", publishFromName) + .add("publish_text", publishText).add("published_at", publishedAt) + .add("created_at", createdAt).add("updated_at", updatedAt).toString(); + } +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java index 8c0349d..4d799f6 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java @@ -23,7 +23,7 @@ import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; import io.sprucehill.mandrill.data.request.MessageSendPayload; -import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; +import io.sprucehill.mandrill.data.request.MessageSendTemplatePayload; import io.sprucehill.mandrill.data.response.MessageResponse; /** @@ -56,7 +56,7 @@ List sendMessage(final MessageSendPayload.Builder payloadBuilde * @throws TemplateMessageError * @throws IOException */ - List sendTemplateMessage(final TemplateMessageSendPayload payload) + List sendTemplateMessage(final MessageSendTemplatePayload payload) throws TemplateMessageError, IOException; /** @@ -66,6 +66,6 @@ List sendTemplateMessage(final TemplateMessageSendPayload paylo * @throws TemplateMessageError * @throws IOException */ - List sendTemplateMessage(final TemplateMessageSendPayload.Builder payloadBuilder) + List sendTemplateMessage(final MessageSendTemplatePayload.Builder payloadBuilder) throws PreBuildError, TemplateMessageError, IOException; } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java b/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java index 7197b08..138b3f0 100644 --- a/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java @@ -17,10 +17,12 @@ package io.sprucehill.mandrill.service; import java.io.IOException; +import java.util.List; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.RenderTemplateError; -import io.sprucehill.mandrill.data.request.RenderTemplatePayload; +import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.response.TemplateResponse; /** * @author Michael Duergner @@ -33,7 +35,7 @@ public interface ITemplateService { * @throws RenderTemplateError * @throws IOException */ - String render(final RenderTemplatePayload payload) throws RenderTemplateError, IOException; + String render(final TemplateRenderPayload payload) throws RenderTemplateError, IOException; /** * @param payloadBuilder @@ -42,6 +44,116 @@ public interface ITemplateService { * @throws RenderTemplateError * @throws IOException */ - String render(final RenderTemplatePayload.Builder payloadBuilder) + String render(final TemplateRenderPayload.Builder payloadBuilder) throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse add(final TemplateAddPayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse add(final TemplateAddPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse update(final TemplateUpdatePayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse update(final TemplateUpdatePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse publish(final TemplatePublishPayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse publish(final TemplatePublishPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse delete(final TemplateDeletePayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse delete(final TemplateDeletePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse info(final TemplateInfoPayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse info(final TemplateInfoPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + List list(final TemplateListPayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + List list(final TemplateListPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + } diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index 0be517e..c565d05 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -23,7 +23,7 @@ import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; import io.sprucehill.mandrill.data.request.MessageSendPayload; -import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; +import io.sprucehill.mandrill.data.request.MessageSendTemplatePayload; import io.sprucehill.mandrill.data.response.MessageResponse; /** @@ -67,7 +67,7 @@ public List sendMessage(final MessageSendPayload.Builder payloa } @Override - public List sendTemplateMessage(final TemplateMessageSendPayload payload) + public List sendTemplateMessage(final MessageSendTemplatePayload payload) throws TemplateMessageError, IOException { try { final List messageResponses = @@ -84,7 +84,7 @@ public List sendTemplateMessage(final TemplateMessageSendPayloa } public List sendTemplateMessage( - final TemplateMessageSendPayload.Builder payloadBuilder) + final MessageSendTemplatePayload.Builder payloadBuilder) throws PreBuildError, TemplateMessageError, IOException { integrateDefaultValues(payloadBuilder); return sendTemplateMessage(payloadBuilder.build()); diff --git a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java index a68215c..6f49a92 100644 --- a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java @@ -17,12 +17,14 @@ package io.sprucehill.mandrill.service; import java.io.IOException; +import java.util.List; import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.RenderTemplateError; -import io.sprucehill.mandrill.data.request.RenderTemplatePayload; -import io.sprucehill.mandrill.data.response.RenderTemplateResponse; +import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.response.TemplateRenderResponse; +import io.sprucehill.mandrill.data.response.TemplateResponse; /** * @author Michael Duergner @@ -30,12 +32,12 @@ public class TemplateService extends AbstractService implements ITemplateService { @Override - public String render(final RenderTemplatePayload payload) + public String render(final TemplateRenderPayload payload) throws RenderTemplateError, IOException { try { - final RenderTemplateResponse renderTemplateResponse = - send(payload, RenderTemplateResponse.class, RenderTemplateError.class); - return renderTemplateResponse.getHtml(); + final TemplateRenderResponse templateRenderResponse = + send(payload, TemplateRenderResponse.class, RenderTemplateError.class); + return templateRenderResponse.getHtml(); } catch (final MessageError e) { LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); @@ -47,9 +49,155 @@ public String render(final RenderTemplatePayload payload) } @Override - public String render(final RenderTemplatePayload.Builder payloadBuilder) + public String render(final TemplateRenderPayload.Builder payloadBuilder) throws PreBuildError, RenderTemplateError, IOException { integrateDefaultValues(payloadBuilder); return render(payloadBuilder.build()); } + + @Override + public TemplateResponse add(final TemplateAddPayload payload) + throws RenderTemplateError, IOException { + try { + final TemplateResponse templateResponse = + send(payload, TemplateResponse.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public TemplateResponse add(final TemplateAddPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return add(payloadBuilder.build()); + } + + @Override + public TemplateResponse update(final TemplateUpdatePayload payload) + throws RenderTemplateError, IOException { + try { + final TemplateResponse templateResponse = + send(payload, TemplateResponse.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public TemplateResponse update(final TemplateUpdatePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return update(payloadBuilder.build()); + } + + @Override + public TemplateResponse publish(final TemplatePublishPayload payload) + throws RenderTemplateError, IOException { + try { + final TemplateResponse templateResponse = + send(payload, TemplateResponse.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public TemplateResponse publish(final TemplatePublishPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return publish(payloadBuilder.build()); + } + + @Override + public TemplateResponse delete(final TemplateDeletePayload payload) + throws RenderTemplateError, IOException { + try { + final TemplateResponse templateResponse = + send(payload, TemplateResponse.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public TemplateResponse delete(final TemplateDeletePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return delete(payloadBuilder.build()); + } + + + @Override + public TemplateResponse info(final TemplateInfoPayload payload) + throws RenderTemplateError, IOException { + try { + final TemplateResponse templateResponse = + send(payload, TemplateResponse.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public TemplateResponse info(final TemplateInfoPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return info(payloadBuilder.build()); + } + + @Override + public List list(final TemplateListPayload payload) + throws RenderTemplateError, IOException { + try { + final List templateResponse = + send(payload, List.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public List list(final TemplateListPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return list(payloadBuilder.build()); + } + } diff --git a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java index 3177731..c0e682b 100644 --- a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java @@ -36,8 +36,6 @@ public void sendWithFrom() throws PreBuildError, IOException { messageService.setFromEmail(FROM_EMAIL); messageService.setFromName(FROM_NAME); - - final List response = messageService.sendMessage( new MessageSendPayload.Builder().withTo(EMAIL).withSubject("Mandrill Test") .withText("This is an automatic test for emails send using Mandrill")); @@ -52,12 +50,11 @@ public void sendTemplate() throws PreBuildError, IOException { final MessageService messageService = new MessageService(); final List response = messageService.sendTemplateMessage( - new TemplateMessageSendPayload.Builder().withTo(EMAIL) + new MessageSendTemplatePayload.Builder().withTo(EMAIL) .withTemplateName(TEMPLATE)); Assert.assertFalse(response.isEmpty()); //Assert.assertEquals(EMAIL, response.getEmail()); //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); } - } diff --git a/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java new file mode 100644 index 0000000..7f5e26d --- /dev/null +++ b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java @@ -0,0 +1,53 @@ +package io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; + +import io.sprucehill.mandrill.AbstractTest; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.TemplateAddPayload; +import io.sprucehill.mandrill.data.request.TemplateRenderPayload; +import io.sprucehill.mandrill.data.request.TemplateUpdatePayload; +import io.sprucehill.mandrill.data.response.TemplateResponse; + +public class TemplateServiceTest extends AbstractTest { + private static final String TEMPLATE = "testtemplate"; + + @Ignore + @Test + public void add() throws PreBuildError, IOException { + final TemplateService messageService = new TemplateService(); + + final TemplateResponse response = messageService.add( + new TemplateAddPayload.Builder().withName(TEMPLATE)); + + Assert.assertEquals(TEMPLATE, response.getName()); + } + + @Test + public void update() throws PreBuildError, IOException { + final TemplateService messageService = new TemplateService(); + + final TemplateResponse response = messageService.update( + new TemplateUpdatePayload.Builder().withName(TEMPLATE)); + + Assert.assertEquals(TEMPLATE, response.getName()); + } + + + @Test + public void render() throws PreBuildError, IOException { + final TemplateService messageService = new TemplateService(); + + final String response = messageService.render( + new TemplateRenderPayload.Builder().withTemplateName(TEMPLATE)); + + //Assert.assertFalse(response.isEmpty()); + //Assert.assertEquals(EMAIL, response.getEmail()); + //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); + } +} From d1c39a2753e52dcc802137ee828ac9117fd46a50 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Thu, 7 Aug 2014 13:21:23 +0200 Subject: [PATCH 08/25] Update Tests --- .../data/request/AbstractRejectsPayload.java | 2 - .../mandrill/service/TemplateServiceTest.java | 62 ++++++++++++++++--- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java index a073d01..ed5ef23 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java @@ -29,8 +29,6 @@ public abstract class AbstractRejectsPayload extends AbstractPayload { @JsonProperty protected String subaccount; - public abstract String getPath(); - public static abstract class Init, U extends AbstractRejectsPayload> extends AbstractPayload.Init { diff --git a/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java index 7f5e26d..9fd9b67 100644 --- a/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java @@ -1,6 +1,7 @@ package io.sprucehill.mandrill.service; import java.io.IOException; +import java.util.Date; import java.util.List; import org.junit.Assert; @@ -9,33 +10,49 @@ import io.sprucehill.mandrill.AbstractTest; import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.error.RenderTemplateError; import io.sprucehill.mandrill.data.request.TemplateAddPayload; +import io.sprucehill.mandrill.data.request.TemplateDeletePayload; import io.sprucehill.mandrill.data.request.TemplateRenderPayload; import io.sprucehill.mandrill.data.request.TemplateUpdatePayload; import io.sprucehill.mandrill.data.response.TemplateResponse; public class TemplateServiceTest extends AbstractTest { - private static final String TEMPLATE = "testtemplate"; + private static final String TEMPLATE = "testtemplate" + System.currentTimeMillis(); - @Ignore @Test public void add() throws PreBuildError, IOException { final TemplateService messageService = new TemplateService(); - final TemplateResponse response = messageService.add( - new TemplateAddPayload.Builder().withName(TEMPLATE)); + try { + final TemplateResponse response = messageService.add( + new TemplateAddPayload.Builder().withName(TEMPLATE)); + + Assert.assertEquals(TEMPLATE, response.getName()); + } finally { + delete(); + } - Assert.assertEquals(TEMPLATE, response.getName()); } @Test public void update() throws PreBuildError, IOException { final TemplateService messageService = new TemplateService(); - final TemplateResponse response = messageService.update( - new TemplateUpdatePayload.Builder().withName(TEMPLATE)); + try { + try { + messageService.add(new TemplateAddPayload.Builder().withName(TEMPLATE)); + } catch (final RenderTemplateError e) { + // Ignore + } + + final TemplateResponse response = messageService.update( + new TemplateUpdatePayload.Builder().withName(TEMPLATE)); - Assert.assertEquals(TEMPLATE, response.getName()); + Assert.assertEquals(TEMPLATE, response.getName()); + } finally { + delete(); + } } @@ -43,8 +60,33 @@ public void update() throws PreBuildError, IOException { public void render() throws PreBuildError, IOException { final TemplateService messageService = new TemplateService(); - final String response = messageService.render( - new TemplateRenderPayload.Builder().withTemplateName(TEMPLATE)); + try { + try { + messageService.add(new TemplateAddPayload.Builder().withName(TEMPLATE)); + } catch (final RenderTemplateError e) { + // Ignore + } + + final String response = messageService.render( + new TemplateRenderPayload.Builder().withTemplateName(TEMPLATE)); + } finally { + delete(); + } + + //Assert.assertFalse(response.isEmpty()); + //Assert.assertEquals(EMAIL, response.getEmail()); + //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); + } + + public void delete() throws PreBuildError, IOException { + final TemplateService messageService = new TemplateService(); + + try { + final TemplateResponse response = messageService.delete( + new TemplateDeletePayload.Builder().withName(TEMPLATE)); + } catch (RenderTemplateError ex) { + // Ignore + } //Assert.assertFalse(response.isEmpty()); //Assert.assertEquals(EMAIL, response.getEmail()); From f31e99603540fab3c0b5e69b3c941ef6c6daa0be Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Tue, 12 Aug 2014 11:14:54 +0200 Subject: [PATCH 09/25] Fix apiKey resolving. Properties were missing --- .../io/sprucehill/mandrill/AbstractTest.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/test/java/io/sprucehill/mandrill/AbstractTest.java b/src/test/java/io/sprucehill/mandrill/AbstractTest.java index 35aa645..4bb4f6f 100644 --- a/src/test/java/io/sprucehill/mandrill/AbstractTest.java +++ b/src/test/java/io/sprucehill/mandrill/AbstractTest.java @@ -5,25 +5,35 @@ import io.sprucehill.mandrill.service.AbstractService; /** - * Created by stephan on 06.08.14. + * Abstract test providing apiKey. */ public abstract class AbstractTest { - protected String apikey = null; + protected String apiKey = null; @Before public void init() { // 1. try - apikey = System.getenv("mandrill.apikey"); + apiKey = System.getenv("mandrill.apikey"); // 2. try - if (apikey == null) { - apikey = System.getenv("mandrill_apikey"); + if (apiKey == null || apiKey.isEmpty()) { + apiKey = System.getenv("mandrill_apikey"); + } + + // 3. try + if (apiKey == null || apiKey.isEmpty()) { + apiKey = System.getProperty("mandrill.apikey"); + } + + // 4. try + if (apiKey == null || apiKey.isEmpty()) { + apiKey = System.getProperty("mandrill_apikey"); } // failed? - if (apikey == null) { - throw new IllegalArgumentException("No apikey in environment"); + if (apiKey == null) { + throw new IllegalArgumentException("No apiKey in environment"); } - AbstractService.setKey(apikey); + AbstractService.setKey(apiKey); } } From eee42a6c19c1488c234792c79963384ebb5d2150 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Tue, 19 Aug 2014 15:36:28 +0200 Subject: [PATCH 10/25] Fix responses with List.class --- .../AnyListListResponseGenericType.java | 8 ++++++++ .../MessageResponseListGenericType.java | 8 ++++++++ .../response/TemplateResponseGenericType.java | 8 ++++++++ .../mandrill/service/AbstractService.java | 20 +++++++++++++++++++ .../mandrill/service/MessageService.java | 7 +++++-- .../mandrill/service/RejectsService.java | 3 ++- .../mandrill/service/TemplateService.java | 3 ++- .../mandrill/service/WhitelistsService.java | 3 ++- 8 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java new file mode 100644 index 0000000..781715b --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java @@ -0,0 +1,8 @@ +package io.sprucehill.mandrill.data.response; + +import java.util.List; + +import javax.ws.rs.core.GenericType; + +public class AnyListListResponseGenericType extends GenericType> { +} diff --git a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java new file mode 100644 index 0000000..a9c12a3 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java @@ -0,0 +1,8 @@ +package io.sprucehill.mandrill.data.response; + +import java.util.List; + +import javax.ws.rs.core.GenericType; + +public class MessageResponseListGenericType extends GenericType> { +} diff --git a/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java new file mode 100644 index 0000000..e06af4b --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java @@ -0,0 +1,8 @@ +package io.sprucehill.mandrill.data.response; + +import java.util.List; + +import javax.ws.rs.core.GenericType; + +public class TemplateResponseGenericType extends GenericType> { +} diff --git a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java index 05b3598..cb9a45b 100644 --- a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java +++ b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java @@ -20,6 +20,7 @@ import javax.annotation.PostConstruct; import javax.ws.rs.client.Entity; +import javax.ws.rs.core.GenericType; import javax.ws.rs.core.Response; import org.glassfish.jersey.client.JerseyClient; @@ -122,4 +123,23 @@ T send(final AbstractPayload payload, final Class respon throw error; } } + + T send(final AbstractPayload payload, final GenericType responseClass, + final Class errorClass) throws E, IOException { + final Response response = getJerseyClient() + .target(getBaseUrl()) + .path(payload.getPath()) + .request() + .post(Entity.json(payload)); + + if (200 == response.getStatus()) { + final T result = response.readEntity(responseClass); + return result; + } else { + final E error = response.readEntity(errorClass); + LOGGER.debug("Got error {} while calling {}.", error.toString(), payload.getPath()); + throw error; + } + } + } diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index c565d05..f89c89b 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -19,12 +19,15 @@ import java.io.IOException; import java.util.List; +import javax.ws.rs.core.GenericType; + import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; import io.sprucehill.mandrill.data.request.MessageSendPayload; import io.sprucehill.mandrill.data.request.MessageSendTemplatePayload; import io.sprucehill.mandrill.data.response.MessageResponse; +import io.sprucehill.mandrill.data.response.MessageResponseListGenericType; /** * @author Michael Duergner @@ -47,7 +50,7 @@ public void setFromName(final String fromName) { public List sendMessage(final MessageSendPayload payload) throws MessageError, IOException { try { final List messageResponses = - send(payload, List.class, MessageError.class); + send(payload, new MessageResponseListGenericType(), MessageError.class); return messageResponses; } catch (MessageError e) { LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", @@ -71,7 +74,7 @@ public List sendTemplateMessage(final MessageSendTemplatePayloa throws TemplateMessageError, IOException { try { final List messageResponses = - send(payload, List.class, MessageError.class); + send(payload, new MessageResponseListGenericType(), MessageError.class); return messageResponses; } catch (MessageError e) { LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", diff --git a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java index ec966ee..490cc60 100644 --- a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java @@ -27,6 +27,7 @@ import io.sprucehill.mandrill.data.response.AnyListAddResponse; import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; import io.sprucehill.mandrill.data.response.AnyListListResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponseGenericType; /** * @author Michael Duergner @@ -86,7 +87,7 @@ public List list(final RejectsListPayload payload) throws MessageError, IOException { try { final List messageResponses = - send(payload, List.class, MessageError.class); + send(payload, new AnyListListResponseGenericType(), MessageError.class); return messageResponses; } catch (final MessageError e) { LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing rejects!", diff --git a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java index 6f49a92..dddeced 100644 --- a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java @@ -25,6 +25,7 @@ import io.sprucehill.mandrill.data.request.*; import io.sprucehill.mandrill.data.response.TemplateRenderResponse; import io.sprucehill.mandrill.data.response.TemplateResponse; +import io.sprucehill.mandrill.data.response.TemplateResponseGenericType; /** * @author Michael Duergner @@ -181,7 +182,7 @@ public List list(final TemplateListPayload payload) throws RenderTemplateError, IOException { try { final List templateResponse = - send(payload, List.class, RenderTemplateError.class); + send(payload, new TemplateResponseGenericType(), RenderTemplateError.class); return templateResponse; } catch (final MessageError e) { LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + diff --git a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java index f12d1c4..e844d5a 100644 --- a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java @@ -28,6 +28,7 @@ import io.sprucehill.mandrill.data.response.AnyListAddResponse; import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; import io.sprucehill.mandrill.data.response.AnyListListResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponseGenericType; /** * @author Michael Duergner @@ -86,7 +87,7 @@ public List list(final WhitelistsListPayload payload) throws MessageError, IOException { try { final List messageResponses = - send(payload, List.class, MessageError.class); + send(payload, new AnyListListResponseGenericType(), MessageError.class); return messageResponses; } catch (final MessageError e) { LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing whitelists!", From 298cb5234ce1faaa4097cc205f8ead7a8e84829f Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Thu, 31 Jul 2014 12:09:51 +0200 Subject: [PATCH 11/25] Add Rejects and Whitelists Use Jersey --- .gitignore | 3 +- pom.xml | 66 +++++--- .../sprucehill/mandrill/data/error/Error.java | 23 ++- .../mandrill/data/error/MessageError.java | 6 +- .../mandrill/data/error/PreBuildError.java | 19 ++- .../data/error/RenderTemplateError.java | 8 +- .../data/error/TemplateMessageError.java | 8 +- .../data/request/AbstractPayload.java | 65 ++++---- .../data/request/AbstractRejectsPayload.java | 79 +++++++++ .../request/AbstractWhitelistsPayload.java | 66 ++++++++ .../request/IWithMergeVarPayloadBuilder.java | 2 +- ...hMergeVarRecipientAwarePayloadBuilder.java | 2 +- .../IWithTemplateContentPayloadBuilder.java | 2 +- .../IWithTemplateNamePayloadBuilder.java | 2 +- ...gePayload.java => MessageSendPayload.java} | 150 +++++++++--------- .../data/request/RejectsAddPayload.java | 66 ++++++++ .../data/request/RejectsDeletePayload.java | 54 +++++++ .../data/request/RejectsListPayload.java | 67 ++++++++ .../data/request/RenderTemplatePayload.java | 43 +++-- ...d.java => TemplateMessageSendPayload.java} | 33 ++-- .../data/request/WhitelistsAddPayload.java | 65 ++++++++ .../data/request/WhitelistsDeletePayload.java | 51 ++++++ .../data/request/WhitelistsListPayload.java | 53 +++++++ .../data/response/AnyListAddResponse.java | 50 ++++++ .../data/response/AnyListDeleteResponse.java | 49 ++++++ .../data/response/AnyListListResponse.java | 61 +++++++ .../data/response/MessageResponse.java | 27 ++-- .../mandrill/service/AbstractService.java | 97 +++++------ .../mandrill/service/IMessageService.java | 27 ++-- .../mandrill/service/IRejectsService.java | 92 +++++++++++ .../mandrill/service/ITemplateService.java | 11 +- .../mandrill/service/IWhitelistsService.java | 92 +++++++++++ .../mandrill/service/MessageService.java | 61 +++---- .../mandrill/service/RejectsService.java | 102 ++++++++++++ .../mandrill/service/TemplateService.java | 26 +-- .../mandrill/service/WhitelistsService.java | 101 ++++++++++++ 36 files changed, 1393 insertions(+), 336 deletions(-) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java rename src/main/java/io/sprucehill/mandrill/data/request/{MessagePayload.java => MessageSendPayload.java} (80%) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java rename src/main/java/io/sprucehill/mandrill/data/request/{TemplateMessagePayload.java => TemplateMessageSendPayload.java} (78%) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java create mode 100644 src/main/java/io/sprucehill/mandrill/service/IRejectsService.java create mode 100644 src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java create mode 100644 src/main/java/io/sprucehill/mandrill/service/RejectsService.java create mode 100644 src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java diff --git a/.gitignore b/.gitignore index b947989..82809fc 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ target .classpath .project *.iml -.idea \ No newline at end of file +.idea +atlassian-ide-plugin.xml \ No newline at end of file diff --git a/pom.xml b/pom.xml index 17038f4..c612c39 100644 --- a/pom.xml +++ b/pom.xml @@ -110,17 +110,12 @@ - com.fasterxml.jackson.core - jackson-databind + org.glassfish.jersey.core + jersey-client - org.spockframework - spock-core - test - - - org.apache.httpcomponents - httpclient + org.glassfish.jersey.media + jersey-media-json-jackson org.slf4j @@ -131,31 +126,26 @@ UTF-8 3.1 - 2.2.1 2.9.1 2.0.2 + 2.3 0.6-groovy-1.8 4.2.1 - 1.6.4 + 2.11 + 1.7.7 - com.fasterxml.jackson.core - jackson-databind - ${version.jackson} + org.glassfish.jersey.core + jersey-client + ${version.jersey} - org.spockframework - spock-core - ${version.spock} - test - - - org.apache.httpcomponents - httpclient - ${version.httpclient} + org.glassfish.jersey.media + jersey-media-json-jackson + ${version.jersey} org.slf4j @@ -165,4 +155,34 @@ + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.1 + + + org.codehaus.mojo + versions-maven-plugin + 2.1 + + + + diff --git a/src/main/java/io/sprucehill/mandrill/data/error/Error.java b/src/main/java/io/sprucehill/mandrill/data/error/Error.java index 2f743b6..7075e2e 100644 --- a/src/main/java/io/sprucehill/mandrill/data/error/Error.java +++ b/src/main/java/io/sprucehill/mandrill/data/error/Error.java @@ -68,35 +68,31 @@ protected static abstract class Init, U extends Error> { protected U object; - protected Init(U object) { + protected Init(final U object) { this.object = object; } - protected abstract T self(); - - protected void postInit() { } - protected void preBuild() { - } - - public T withStatus(String status) { + public T withStatus(final String status) { object.status = status; return self(); } - public T withCode(Integer code) { + protected abstract T self(); + + public T withCode(final Integer code) { object.code = code; return self(); } - public T withName(String name) { + public T withName(final String name) { object.name = name; return self(); } - public T withMessage(String message) { + public T withMessage(final String message) { object.message = message; return self(); } @@ -105,9 +101,12 @@ public U build() { preBuild(); return object; } + + protected void preBuild() { + } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { super(new Error()); diff --git a/src/main/java/io/sprucehill/mandrill/data/error/MessageError.java b/src/main/java/io/sprucehill/mandrill/data/error/MessageError.java index f24d027..fb83d53 100644 --- a/src/main/java/io/sprucehill/mandrill/data/error/MessageError.java +++ b/src/main/java/io/sprucehill/mandrill/data/error/MessageError.java @@ -25,7 +25,7 @@ */ public class MessageError extends Error { - protected static abstract class Init, U extends MessageError> extends Error.Init { + protected static abstract class Init, U extends MessageError> extends Error.Init { private static final Set names; @@ -37,7 +37,7 @@ protected static abstract class Init, U extends MessageError names = Collections.unmodifiableSet(namesTmp); } - protected Init(U object) { + protected Init(final U object) { super(object); } @@ -50,7 +50,7 @@ public T withName(String name) { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { super(new MessageError()); diff --git a/src/main/java/io/sprucehill/mandrill/data/error/PreBuildError.java b/src/main/java/io/sprucehill/mandrill/data/error/PreBuildError.java index 49dd5c9..d453a6b 100644 --- a/src/main/java/io/sprucehill/mandrill/data/error/PreBuildError.java +++ b/src/main/java/io/sprucehill/mandrill/data/error/PreBuildError.java @@ -24,28 +24,27 @@ */ public class PreBuildError extends Exception { - private Map preBuildErrors; + private Map preBuildErrors; - public PreBuildError(Map preBuildErrors) { + public PreBuildError(final Map preBuildErrors) { super(concatPreBuildErrors(preBuildErrors)); this.preBuildErrors = Collections.unmodifiableMap(preBuildErrors); } - public Map getPreBuildErrors() { - return preBuildErrors; - } - - private static String concatPreBuildErrors(Map preBuildErrors) { + private static String concatPreBuildErrors(final Map preBuildErrors) { StringBuilder builder = null; - for (Map.Entry preBuildError : preBuildErrors.entrySet()) { + for (final Map.Entry preBuildError : preBuildErrors.entrySet()) { if (null == builder) { builder = new StringBuilder(); - } - else { + } else { builder.append(", "); } builder.append(preBuildError.getKey()); } return null == builder ? "" : builder.toString(); } + + public Map getPreBuildErrors() { + return preBuildErrors; + } } diff --git a/src/main/java/io/sprucehill/mandrill/data/error/RenderTemplateError.java b/src/main/java/io/sprucehill/mandrill/data/error/RenderTemplateError.java index 3faf1ec..2f7b727 100644 --- a/src/main/java/io/sprucehill/mandrill/data/error/RenderTemplateError.java +++ b/src/main/java/io/sprucehill/mandrill/data/error/RenderTemplateError.java @@ -25,7 +25,7 @@ */ public class RenderTemplateError extends Error { - protected static abstract class Init, U extends RenderTemplateError> extends Error.Init { + protected static abstract class Init, U extends RenderTemplateError> extends Error.Init { private static final Set names; @@ -38,12 +38,12 @@ protected static abstract class Init, U extends RenderTempla names = Collections.unmodifiableSet(namesTmp); } - protected Init(U object) { + protected Init(final U object) { super(object); } @Override - public T withName(String name) { + public T withName(final String name) { if (names.contains(name)) { return super.withName(name); } @@ -51,7 +51,7 @@ public T withName(String name) { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { super(new RenderTemplateError()); diff --git a/src/main/java/io/sprucehill/mandrill/data/error/TemplateMessageError.java b/src/main/java/io/sprucehill/mandrill/data/error/TemplateMessageError.java index 32fcdc8..73ae051 100644 --- a/src/main/java/io/sprucehill/mandrill/data/error/TemplateMessageError.java +++ b/src/main/java/io/sprucehill/mandrill/data/error/TemplateMessageError.java @@ -25,7 +25,7 @@ */ public class TemplateMessageError extends MessageError { - protected static abstract class Init, U extends TemplateMessageError> extends MessageError.Init { + protected static abstract class Init, U extends TemplateMessageError> extends MessageError.Init { private static final Set names; @@ -35,12 +35,12 @@ protected static abstract class Init, U extends TemplateMess names = Collections.unmodifiableSet(namesTmp); } - protected Init(U object) { + protected Init(final U object) { super(object); } @Override - public T withName(String name) { + public T withName(final String name) { if (names.contains(name)) { return super.withName(name); } @@ -48,7 +48,7 @@ public T withName(String name) { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { super(new TemplateMessageError()); diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java index e86dcf8..15d0a1e 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java @@ -16,32 +16,29 @@ package io.sprucehill.mandrill.data.request; +import java.util.HashMap; +import java.util.Map; + import com.fasterxml.jackson.annotation.JsonProperty; + import io.sprucehill.mandrill.data.AbstractJsonBase; import io.sprucehill.mandrill.data.error.PreBuildError; -import java.util.HashMap; -import java.util.Map; - /** * @author Michael Duergner */ public abstract class AbstractPayload extends AbstractJsonBase { public static final String PRE_BUILD_KEY_NOT_SET = "KET_NOT_SET"; - - public abstract String getPath(); - @JsonProperty protected String key; - public static abstract class Init, U extends AbstractPayload> { + public abstract String getPath(); - private Map preBuildErrors = new HashMap(); + public static abstract class Init, U extends AbstractPayload> { protected U object; - - protected abstract T self(); + private Map preBuildErrors = new HashMap(); protected Init(U object) { this.object = object; @@ -50,14 +47,33 @@ protected Init(U object) { protected void postInit() { } + public T withKey(final String key) { + object.key = key; + return self(); + } + + protected abstract T self(); + + public boolean hasKey() { + return null != object.key && !object.key.isEmpty(); + } + + public U build() throws PreBuildError { + preBuild(); + if (0 < preBuildErrors.size()) { + throw new PreBuildError(preBuildErrors); + } + return object; + } + /** * Override this method to add additional pre build validation to your payload object; - * + *

* NOTE: always call super.preBuild() as first statement in you own implementation! */ protected void preBuild() { if (null == object.key || object.key.isEmpty()) { - addPreBuildError(PRE_BUILD_KEY_NOT_SET,"'key' must be set and may not be empty!"); + addPreBuildError(PRE_BUILD_KEY_NOT_SET, "'key' must be set and may not be empty!"); } } @@ -68,30 +84,13 @@ protected void preBuild() { * @param preBuildErrorMessage */ protected final void addPreBuildError(String preBuildErrorKey, String preBuildErrorMessage) { - preBuildErrors.put(preBuildErrorKey,preBuildErrorMessage); - } - - public T withKey(String key) { - object.key = key; - return self(); - } - - public boolean hasKey() { - return null != object.key && !object.key.isEmpty(); - } - - public U build() throws PreBuildError { - preBuild(); - if (0 < preBuildErrors.size()) { - throw new PreBuildError(preBuildErrors); - } - return object; + preBuildErrors.put(preBuildErrorKey, preBuildErrorMessage); } } - public static abstract class Builder extends Init { + public static abstract class Builder extends Init { - protected Builder(AbstractPayload object) { + protected Builder(final AbstractPayload object) { super(object); } @@ -100,4 +99,4 @@ protected Builder self() { return this; } } -} \ No newline at end of file +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java new file mode 100644 index 0000000..247bb18 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java @@ -0,0 +1,79 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.sprucehill.mandrill.data.AbstractJsonBase; +import io.sprucehill.mandrill.data.error.PreBuildError; + +/** + * @author Michael Duergner + */ +public abstract class AbstractRejectsPayload extends AbstractPayload { + + @JsonProperty + protected String email; + + @JsonProperty + protected String subaccount; + + public abstract String getPath(); + + public static abstract class Init, U extends AbstractRejectsPayload> + extends AbstractPayload.Init { + + protected Init(U object) { + super(object); + } + + public T withEmail(final String email) { + object.email = email; + return self(); + } + + public T withSubaccount(final String subaccount) { + object.subaccount = subaccount; + return self(); + } + + protected abstract T self(); + + public boolean hasEmail() { + return null != object.email && !object.email.isEmpty(); + } + + public boolean hasSubaccount() { + return null != object.subaccount && !object.subaccount.isEmpty(); + } + } + + public static abstract class Builder extends Init { + + protected Builder(final AbstractRejectsPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java new file mode 100644 index 0000000..b405bb7 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java @@ -0,0 +1,66 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public abstract class AbstractWhitelistsPayload extends AbstractPayload { + + @JsonProperty + protected String email; + + public abstract String getPath(); + + public static abstract class Init, U extends AbstractWhitelistsPayload> + extends AbstractPayload.Init { + + protected U object; + + protected Init(U object) { + super(object); + } + + public T withEmail(final String email) { + object.email = email; + return self(); + } + + protected abstract T self(); + + public boolean hasEmail() { + return null != object.email && !object.email.isEmpty(); + } + } + + public static abstract class Builder extends Init { + + protected Builder(final AbstractWhitelistsPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarPayloadBuilder.java index dda4716..4b0c08b 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarPayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarPayloadBuilder.java @@ -21,5 +21,5 @@ */ public interface IWithMergeVarPayloadBuilder { - T withMergeVar(String name, String content); + T withMergeVar(final String name, final String content); } diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarRecipientAwarePayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarRecipientAwarePayloadBuilder.java index 80a62ed..2738af1 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarRecipientAwarePayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithMergeVarRecipientAwarePayloadBuilder.java @@ -21,5 +21,5 @@ */ public interface IWithMergeVarRecipientAwarePayloadBuilder extends IWithMergeVarPayloadBuilder { - T withMergeVar(String recipient, String name, String content); + T withMergeVar(final String recipient, final String name, final String content); } diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateContentPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateContentPayloadBuilder.java index 5b7323b..ac4a518 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateContentPayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateContentPayloadBuilder.java @@ -21,5 +21,5 @@ */ public interface IWithTemplateContentPayloadBuilder { - T withTemplateContent(String name, String content); + T withTemplateContent(final String name, final String content); } diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateNamePayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateNamePayloadBuilder.java index 4112e4b..76a5f08 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateNamePayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithTemplateNamePayloadBuilder.java @@ -21,5 +21,5 @@ */ public interface IWithTemplateNamePayloadBuilder { - T withTemplateName(String templateName); + T withTemplateName(final String templateName); } diff --git a/src/main/java/io/sprucehill/mandrill/data/request/MessagePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/MessageSendPayload.java similarity index 80% rename from src/main/java/io/sprucehill/mandrill/data/request/MessagePayload.java rename to src/main/java/io/sprucehill/mandrill/data/request/MessageSendPayload.java index 80688cb..23a0ddb 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/MessagePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/MessageSendPayload.java @@ -16,16 +16,22 @@ package io.sprucehill.mandrill.data.request; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.sprucehill.mandrill.data.AbstractJsonBase; - import java.util.ArrayList; import java.util.List; +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.sprucehill.mandrill.data.AbstractJsonBase; + /** * @author Michael Duergner */ -public class MessagePayload extends AbstractPayload { +public class MessageSendPayload extends AbstractPayload { + + @JsonProperty + protected Message message = new Message(); + @JsonProperty + protected boolean async = Boolean.FALSE; @Override public String getPath() { @@ -75,7 +81,7 @@ public int hashCode() { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (null == o) { return false; } @@ -83,7 +89,7 @@ public boolean equals(Object o) { return false; } - return null == email ? super.equals(o) : email.equals(((Recipient)o).email); + return null == email ? super.equals(o) : email.equals(((Recipient) o).email); } } @@ -95,9 +101,10 @@ public static final class Variable extends AbstractJsonBase { @JsonProperty protected String content; - protected Variable() {} + protected Variable() { + } - protected Variable(String name, String content) { + protected Variable(final String name, final String content) { this.name = name; this.content = content; } @@ -108,7 +115,7 @@ public int hashCode() { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (null == o) { return false; } @@ -116,7 +123,7 @@ public boolean equals(Object o) { return false; } - return null == name ? super.equals(o) : name.equals(((Variable)o).name); + return null == name ? super.equals(o) : name.equals(((Variable) o).name); } } @@ -129,13 +136,14 @@ public static final class RecipientMergeVars extends AbstractJsonBase { @JsonProperty protected List vars = new ArrayList(); - protected RecipientMergeVars() {} + protected RecipientMergeVars() { + } - protected RecipientMergeVars(String recipient) { + protected RecipientMergeVars(final String recipient) { this.recipient = recipient; } - protected RecipientMergeVars(String recipient, List vars) { + protected RecipientMergeVars(final String recipient, final List vars) { this.recipient = recipient; this.vars = vars; } @@ -146,7 +154,7 @@ public int hashCode() { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (null == o) { return false; } @@ -155,7 +163,7 @@ public boolean equals(Object o) { return false; } - return null == recipient ? super.equals(o) : recipient.equals(((RecipientMergeVars)o).recipient); + return null == recipient ? super.equals(o) : recipient.equals(((RecipientMergeVars) o).recipient); } } @@ -168,13 +176,14 @@ public static final class RecipientMetadata extends AbstractJsonBase { @JsonProperty protected List values = new ArrayList(); - protected RecipientMetadata() {} + protected RecipientMetadata() { + } - protected RecipientMetadata(String recipient) { + protected RecipientMetadata(final String recipient) { this.recipient = recipient; } - protected RecipientMetadata(String recipient, List values) { + protected RecipientMetadata(final String recipient, final List values) { this.recipient = recipient; this.values = values; } @@ -185,7 +194,7 @@ public int hashCode() { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (null == o) { return false; } @@ -194,7 +203,7 @@ public boolean equals(Object o) { return false; } - return null == recipient ? super.equals(o) : recipient.equals(((RecipientMetadata)o).recipient); + return null == recipient ? super.equals(o) : recipient.equals(((RecipientMetadata) o).recipient); } } @@ -207,11 +216,12 @@ public static final class Attachment extends AbstractJsonBase { protected String name; @JsonProperty - protected String content; + protected byte[] content; - protected Attachment() {} + protected Attachment() { + } - protected Attachment(String type, String name, String content) { + protected Attachment(final String type, final String name, final byte[] content) { this.type = type; this.name = name; this.content = content; @@ -223,7 +233,7 @@ public int hashCode() { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (null == o) { return false; } @@ -231,7 +241,7 @@ public boolean equals(Object o) { return false; } - return null == name ? super.equals(o) : name.equals(((Attachment)o).name); + return null == name ? super.equals(o) : name.equals(((Attachment) o).name); } } @@ -258,11 +268,11 @@ public static final class Message extends AbstractJsonBase { protected List to = new ArrayList(); @JsonProperty( - value = "inline_css") + value = "inline_css") protected boolean inlineCss = Boolean.FALSE; @JsonProperty( - value = "track_opens") + value = "track_opens") protected boolean trackOpens = Boolean.FALSE; @JsonProperty( @@ -315,43 +325,39 @@ public static final class Message extends AbstractJsonBase { protected List attachments = new ArrayList(); } - @JsonProperty - protected Message message = new Message(); - - @JsonProperty - protected boolean async = Boolean.FALSE; - - public static abstract class Init, U extends MessagePayload> extends AbstractPayload.Init implements IWithMergeVarRecipientAwarePayloadBuilder { + public static abstract class Init, U extends MessageSendPayload> + extends AbstractPayload.Init + implements IWithMergeVarRecipientAwarePayloadBuilder { protected Init(U object) { super(object); } - public T withHtml(String html) { + public T withHtml(final String html) { object.message.html = html; return self(); } - public T withText(String text) { + public T withText(final String text) { object.message.text = text; return self(); } - public T withSubject(String subject) { + public T withSubject(final String subject) { object.message.subject = subject; return self(); } - public T withFromEmail(String fromEmail) { + public T withFromEmail(final String fromEmail) { object.message.fromEmail = fromEmail; - return self(); + return self(); } public boolean hasFromEmail() { return null != object.message.fromEmail && !object.message.fromEmail.isEmpty(); } - public T withFromName(String fromName) { + public T withFromName(final String fromName) { object.message.fromName = fromName; return self(); } @@ -360,17 +366,17 @@ public boolean hasFromName() { return null != object.message.fromName && !object.message.fromName.isEmpty(); } - private T withRecipient(Recipient recipient) { + public T withTo(final String email) { + return withRecipient(new Recipient(email)); + } + + private T withRecipient(final Recipient recipient) { if (!object.message.to.contains(recipient)) { object.message.to.add(recipient); } return self(); } - public T withTo(String email) { - return withRecipient(new Recipient(email)); - } - public T withCc(String email) { return withRecipient(new Recipient(email, Recipient.Type.cc)); } @@ -396,11 +402,11 @@ public T withInlineCss(){ return self(); } - public T withoutInlineCss(){ - object.message.inlineCss = Boolean.FALSE; - return self(); + public T withoutInlineCss() { + object.message.inlineCss = Boolean.FALSE; + return self(); } - + public T withTrackOpens() { object.message.trackOpens = Boolean.TRUE; return self(); @@ -451,77 +457,75 @@ public T withoutPreserveRecipients() { return self(); } - public T withBccAddress(String bccAddress){ + public T withBccAddress(final String bccAddress) { object.message.bccAddress = bccAddress; return self(); } - public T withGlobalMergeVar(String name, String content) { - Variable var = new Variable(name,content); + public T withMergeVar(final String name, final String content) { + return withGlobalMergeVar(name, content); + } + + public T withGlobalMergeVar(final String name, final String content) { + Variable var = new Variable(name, content); if (!object.message.globalMergeVars.contains(var)) { object.message.globalMergeVars.add(var); } return self(); } - public T withMergeVar(String name, String content) { - return withGlobalMergeVar(name,content); - } - - public T withMergeVar(String recipient, String name, String content) { + public T withMergeVar(final String recipient, final String name, final String content) { RecipientMergeVars mergeVars = new RecipientMergeVars(recipient); int index = object.message.mergeVars.indexOf(mergeVars); if (-1 != index) { mergeVars = object.message.mergeVars.get(index); - } - else { + } else { object.message.mergeVars.add(mergeVars); } - mergeVars.vars.add(new Variable(name,content)); + mergeVars.vars.add(new Variable(name, content)); return self(); } - public T withTag(String tag) { + public T withTag(final String tag) { if (!object.message.tags.contains(tag)) { object.message.tags.add(tag); } return self(); } - public T withGoogleAnalyticsDomain(String googleAnalyticsDomain) { + public T withGoogleAnalyticsDomain(final String googleAnalyticsDomain) { if (!object.message.googleAnalyticsDomains.contains(googleAnalyticsDomain)) { object.message.googleAnalyticsDomains.add(googleAnalyticsDomain); } return self(); } - public T withGoogleAnalyticsCampaign(String googleAnalyticsCampaign) { + public T withGoogleAnalyticsCampaign(final String googleAnalyticsCampaign) { object.message.googleAnalyticsCampaign = googleAnalyticsCampaign; return self(); } - public T withMetadata(String metadata) { + public T withMetadata(final String metadata) { if (!object.message.metadata.contains(metadata)) { object.message.metadata.add(metadata); } return self(); } - public T withRecipientMetadata(String recipient, String metadata) { + public T withRecipientMetadata(final String recipient, final String metadata) { RecipientMetadata recipientMetadata = new RecipientMetadata(recipient); int index = object.message.recipientMetadata.indexOf(recipientMetadata); if (-1 != index) { recipientMetadata = object.message.recipientMetadata.get(index); - } - else { + } else { object.message.recipientMetadata.add(recipientMetadata); } recipientMetadata.values.add(metadata); return self(); } - public T withAttachment(String type, String name, String content) { - Attachment attachment = new Attachment(type,name,content); + public T withAttachment(final String type, final String name, final byte[] content) { + Attachment attachment = new Attachment(type, name, content); if (!object.message.attachments.contains(attachment)) { object.message.attachments.add(attachment); } @@ -539,13 +543,13 @@ public T doSynchronous() { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { - super(new MessagePayload()); + super(new MessageSendPayload()); } - protected Builder(MessagePayload object) { + protected Builder(final MessageSendPayload object) { super(object); } @@ -554,4 +558,4 @@ protected Builder self() { return this; } } -} \ No newline at end of file +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java new file mode 100644 index 0000000..85f5fdd --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java @@ -0,0 +1,66 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class RejectsAddPayload extends AbstractRejectsPayload { + + @JsonProperty + protected String comment; + + @Override + public String getPath() { + return "/rejects/add.json"; + } + + public static abstract class Init, U extends RejectsAddPayload> + extends AbstractRejectsPayload.Init { + + protected Init(final U object) { + super(object); + } + + public T withComment(final String comment) { + object.comment = comment; + return self(); + } + + public boolean hasComment() { + return null != object.comment && !object.comment.isEmpty(); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new RejectsAddPayload()); + } + + protected Builder(final RejectsAddPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java new file mode 100644 index 0000000..4e8ebb2 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java @@ -0,0 +1,54 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class RejectsDeletePayload extends AbstractRejectsPayload { + + @Override + public String getPath() { + return "/rejects/delete.json"; + } + + public static abstract class Init, U extends RejectsDeletePayload> + extends AbstractRejectsPayload.Init { + + protected Init(final U object) { + super(object); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new RejectsDeletePayload()); + } + + protected Builder(final RejectsDeletePayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java new file mode 100644 index 0000000..2189a3e --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java @@ -0,0 +1,67 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class RejectsListPayload extends AbstractRejectsPayload { + + @JsonProperty("include_expired") + protected boolean includeExpired = Boolean.FALSE; + + @Override + public String getPath() { + return "/rejects/add.json"; + } + + public static abstract class Init, U extends RejectsListPayload> + extends AbstractRejectsPayload.Init { + + protected Init(final U object) { + super(object); + } + + public T withIncludeExpired() { + object.includeExpired = Boolean.TRUE; + return self(); + } + + public T withoutIncludeExpired() { + object.includeExpired = Boolean.FALSE; + return self(); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new RejectsListPayload()); + } + + protected Builder(final RejectsListPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java index 5f68f3c..b5a12b1 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java @@ -16,12 +16,13 @@ package io.sprucehill.mandrill.data.request; +import java.util.ArrayList; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import io.sprucehill.mandrill.data.AbstractJsonBase; -import java.util.ArrayList; -import java.util.List; +import io.sprucehill.mandrill.data.AbstractJsonBase; /** * @author Michael Duergner @@ -29,6 +30,13 @@ public class RenderTemplatePayload extends AbstractPayload { public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; + @JsonProperty(value = "template_name") + protected String templateName; + @JsonProperty(value = "template_content") + @JsonInclude(value = JsonInclude.Include.NON_NULL) + protected List templateContent = new ArrayList(); + @JsonProperty(value = "merge_vars") + protected List mergeVars = new ArrayList(); @Override public String getPath() { @@ -43,7 +51,8 @@ public static final class Variable extends AbstractJsonBase { @JsonProperty protected String content; - protected Variable() {} + protected Variable() { + } protected Variable(String name, String content) { this.name = name; @@ -64,25 +73,11 @@ public boolean equals(Object o) { return false; } - return null == name ? super.equals(o) : name.equals(((Variable)o).name); + return null == name ? super.equals(o) : name.equals(((Variable) o).name); } } - @JsonProperty( - value = "template_name") - protected String templateName; - - @JsonProperty( - value = "template_content") - @JsonInclude( - value = JsonInclude.Include.NON_NULL) - protected List templateContent = new ArrayList(); - - @JsonProperty( - value = "merge_vars") - protected List mergeVars = new ArrayList(); - - protected static abstract class Init, U extends RenderTemplatePayload> extends AbstractPayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder, IWithMergeVarPayloadBuilder { + protected static abstract class Init, U extends RenderTemplatePayload> extends AbstractPayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder, IWithMergeVarPayloadBuilder { protected Init(U object) { super(object); @@ -94,7 +89,7 @@ public T withTemplateName(String templateName) { } public T withTemplateContent(String name, String content) { - Variable variable = new Variable(name,content); + Variable variable = new Variable(name, content); if (!object.templateContent.contains(variable)) { object.templateContent.add(variable); } @@ -102,7 +97,7 @@ public T withTemplateContent(String name, String content) { } public T withMergeVar(String name, String content) { - Variable variable = new Variable(name,content); + Variable variable = new Variable(name, content); if (!object.mergeVars.contains(variable)) { object.mergeVars.add(variable); } @@ -113,12 +108,12 @@ public T withMergeVar(String name, String content) { protected void preBuild() { super.preBuild(); if (null == object.templateName || object.templateName.isEmpty()) { - addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET,"'template_name' must be set and may not be empty!"); + addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET, "'template_name' must be set and may not be empty!"); } } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { super(new RenderTemplatePayload()); diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessagePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java similarity index 78% rename from src/main/java/io/sprucehill/mandrill/data/request/TemplateMessagePayload.java rename to src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java index 01581b3..4cb7b14 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessagePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java @@ -16,35 +16,35 @@ package io.sprucehill.mandrill.data.request; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; - import java.util.ArrayList; import java.util.List; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + /** * @author Michael Duergner */ -public class TemplateMessagePayload extends MessagePayload { +public class TemplateMessageSendPayload extends MessageSendPayload { public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; - - @Override - public String getPath() { - return "/messages/send-template.json"; - } - @JsonProperty( value = "template_name") protected String templateName; - @JsonProperty( value = "template_content") @JsonInclude( value = JsonInclude.Include.NON_NULL) protected List templateContent = new ArrayList(); - protected static abstract class Init, U extends TemplateMessagePayload> extends MessagePayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder { + @Override + public String getPath() { + return "/messages/send-template.json"; + } + + protected static abstract class Init, U extends TemplateMessageSendPayload> + extends MessageSendPayload.Init implements IWithTemplateNamePayloadBuilder, + IWithTemplateContentPayloadBuilder { protected Init(U object) { super(object); @@ -56,7 +56,7 @@ public T withTemplateName(String templateName) { } public T withTemplateContent(String name, String content) { - Variable variable = new Variable(name,content); + Variable variable = new Variable(name, content); if (!object.templateContent.contains(variable)) { object.templateContent.add(variable); } @@ -67,15 +67,16 @@ public T withTemplateContent(String name, String content) { protected void preBuild() { super.preBuild(); if (null == object.templateName || object.templateName.isEmpty()) { - addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET,"'template_name' must be set and may not be empty!"); + addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET, + "'template_name' must be set and may not be empty!"); } } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { - super(new TemplateMessagePayload()); + super(new TemplateMessageSendPayload()); } @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java new file mode 100644 index 0000000..46b10ab --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java @@ -0,0 +1,65 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class WhitelistsAddPayload extends AbstractWhitelistsPayload { + @JsonProperty + protected String comment; + + @Override + public String getPath() { + return "/whitelists/add.json"; + } + + public static abstract class Init, U extends WhitelistsAddPayload> + extends AbstractWhitelistsPayload.Init { + + protected Init(final U object) { + super(object); + } + + public T withComment(final String comment) { + object.comment = comment; + return self(); + } + + public boolean hasComment() { + return null != object.comment && !object.comment.isEmpty(); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new WhitelistsAddPayload()); + } + + protected Builder(final WhitelistsAddPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java new file mode 100644 index 0000000..b660ec1 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java @@ -0,0 +1,51 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * @author Michael Duergner + */ +public class WhitelistsDeletePayload extends AbstractWhitelistsPayload { + @Override + public String getPath() { + return "/whitelists/delete.json"; + } + + public static abstract class Init, U extends WhitelistsDeletePayload> + extends AbstractWhitelistsPayload.Init { + + protected Init(final U object) { + super(object); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new WhitelistsDeletePayload()); + } + + protected Builder(final WhitelistsDeletePayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java new file mode 100644 index 0000000..d28d82c --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java @@ -0,0 +1,53 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class WhitelistsListPayload extends AbstractWhitelistsPayload { + @Override + public String getPath() { + return "/whitelists/list.json"; + } + + public static abstract class Init, U extends WhitelistsListPayload> + extends AbstractWhitelistsPayload.Init { + + protected Init(final U object) { + super(object); + } + } + + public static class Builder extends Init { + + public Builder() { + super(new WhitelistsListPayload()); + } + + protected Builder(final WhitelistsListPayload object) { + super(object); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java new file mode 100644 index 0000000..d17d81c --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java @@ -0,0 +1,50 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.response; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class AnyListAddResponse extends Response { + + @JsonProperty + protected String email; + @JsonProperty + protected boolean added; + + public String getEmail() { + return email; + } + + public boolean isAdded() { + return added; + } + + @Override + public String toString() { + return new StringBuilder("MessageResponse [email: "). + append(email). + append(", added: "). + append(added). + append("]"). + toString(); + } + +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java new file mode 100644 index 0000000..8e32273 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java @@ -0,0 +1,49 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.response; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class AnyListDeleteResponse extends Response { + + @JsonProperty + protected String email; + @JsonProperty + protected boolean deleted; + + public String getEmail() { + return email; + } + + public boolean isDeleted() { + return deleted; + } + + @Override + public String toString() { + return new StringBuilder("MessageResponse [email: "). + append(email). + append(", deleted: "). + append(deleted). + append("]"). + toString(); + } + +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java new file mode 100644 index 0000000..8dd1a2d --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java @@ -0,0 +1,61 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.response; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author Michael Duergner + */ +public class AnyListListResponse extends Response { + + @JsonProperty + protected String email; + @JsonProperty + protected String detail; + @JsonProperty("created_at") + @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT") + protected Date createdAt; + + public String getEmail() { + return email; + } + + public String getDetail() { + return detail; + } + + public Date getCreatedAt() { + return createdAt; + } + + @Override + public String toString() { + return new StringBuilder("MessageResponse [email: "). + append(email). + append(", detail: "). + append(detail). + append(", created_at: "). + append(createdAt). + append("]"). + toString(); + } + +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java index ea1c480..819e005 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java @@ -24,20 +24,12 @@ */ public class MessageResponse extends Response { - public static enum Status { - SENT,QUEUED,REJECTED,INVALID; - - @JsonCreator - public static Status parse(String value) { - return valueOf(value.toUpperCase()); - } - } - @JsonProperty protected String email; - @JsonProperty protected Status status; + @JsonProperty("reject_reason") + protected String rejectReason; public String getEmail() { return email; @@ -47,13 +39,28 @@ public Status getStatus() { return status; } + public String getRejectReason() { + return rejectReason; + } + @Override public String toString() { return new StringBuilder("MessageResponse [email: "). append(email). append(", status: "). append(status). + append(", reject_reason: "). + append(rejectReason). append("]"). toString(); } + + public static enum Status { + SENT, QUEUED, REJECTED, INVALID; + + @JsonCreator + public static Status parse(String value) { + return valueOf(value.toUpperCase()); + } + } } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java index 2d04080..9f172c6 100644 --- a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java +++ b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java @@ -16,65 +16,50 @@ package io.sprucehill.mandrill.service; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.sprucehill.mandrill.data.request.AbstractPayload; -import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.conn.PoolingClientConnectionManager; +import java.io.IOException; + +import javax.annotation.PostConstruct; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Response; + +import org.glassfish.jersey.client.JerseyClient; +import org.glassfish.jersey.client.JerseyClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.PostConstruct; -import java.io.IOException; +import io.sprucehill.mandrill.data.request.AbstractPayload; /** * @author Michael Duergner */ public abstract class AbstractService { - final Logger logger = LoggerFactory.getLogger(getClass()); + protected final Logger LOGGER = LoggerFactory.getLogger(getClass()); - String baseUrl = "https://mandrillapp.com/api/1.0"; + protected String baseUrl = "https://mandrillapp.com/api/1.0"; - HttpClient httpClient; + protected JerseyClient jerseyClient; - ObjectMapper objectMapper; - - String key; + protected String key; /** - * * @param baseUrl */ - public void setBaseUrl(String baseUrl) { + public void setBaseUrl(final String baseUrl) { this.baseUrl = baseUrl; } /** - * - * @param httpClient + * @param jerseyClient */ - public void setHttpClient(HttpClient httpClient) { - this.httpClient = httpClient; + public void setClient(final JerseyClient jerseyClient) { + this.jerseyClient = jerseyClient; } /** - * - * @param objectMapper - */ - public void setObjectMapper(ObjectMapper objectMapper) { - this.objectMapper = objectMapper; - } - - /** - * * @param key */ - public void setKey(String key) { + public void setKey(final String key) { this.key = key; } @@ -84,40 +69,32 @@ public final void postConstruct() { } void onPostConstruct() { - if (null == httpClient) { - httpClient = new DefaultHttpClient(new PoolingClientConnectionManager()); - } - if (null == objectMapper) { - objectMapper = new ObjectMapper(); + if (null == jerseyClient) { + jerseyClient = JerseyClientBuilder.createClient(); } } - ,U extends AbstractPayload> void integrateDefaultValues(AbstractPayload.Init payloadBuilder) { + , U extends AbstractPayload> void integrateDefaultValues(AbstractPayload.Init payloadBuilder) { if (!payloadBuilder.hasKey() && null != key && !key.isEmpty()) { payloadBuilder.withKey(key); } } - T send(final AbstractPayload payload, TypeReference responseClass, Class errorClass) throws E, IOException { - try { - HttpPost request = new HttpPost(baseUrl+payload.getPath()); - String body = objectMapper.writeValueAsString(payload); - logger.info(body); - request.setEntity(new StringEntity(body,"UTF-8")); - HttpResponse response = httpClient.execute(request); - if (200 == response.getStatusLine().getStatusCode()) { - T result = objectMapper.readValue(response.getEntity().getContent(),responseClass); - return result; - } - else { - E error = objectMapper.readValue(response.getEntity().getContent(),errorClass); - logger.debug("Got error {} while calling {}.", error.toString(), payload.getPath()); - throw error; - } - } - catch (IOException e) { - logger.debug("Got {} while calling {}.",e.getClass().getSimpleName(),payload.getPath()); - throw e; + T send(final AbstractPayload payload, final Class responseClass, + final Class errorClass) throws E, IOException { + final Response response = jerseyClient + .target(baseUrl) + .path(payload.getPath()) + .request() + .post(Entity.json(payload)); + + if (200 == response.getStatus()) { + final T result = response.readEntity(responseClass); + return result; + } else { + final E error = response.readEntity(errorClass); + LOGGER.debug("Got error {} while calling {}.", error.toString(), payload.getPath()); + throw error; } } -} \ No newline at end of file +} diff --git a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java index cf48507..b26ed2a 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java @@ -16,56 +16,57 @@ package io.sprucehill.mandrill.service; +import java.io.IOException; +import java.util.List; + import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; -import io.sprucehill.mandrill.data.request.MessagePayload; -import io.sprucehill.mandrill.data.request.TemplateMessagePayload; +import io.sprucehill.mandrill.data.request.MessageSendPayload; +import io.sprucehill.mandrill.data.request.RejectsAddPayload; +import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; import io.sprucehill.mandrill.data.response.MessageResponse; -import java.io.IOException; -import java.util.List; - /** * @author Michael Duergner */ public interface IMessageService { /** - * * @param payload * @return * @throws MessageError * @throws IOException */ - List sendMessage(MessagePayload payload) throws MessageError, IOException; + List sendMessage(final MessageSendPayload payload) + throws MessageError, IOException; /** - * * @param payloadBuilder * @return * @throws PreBuildError * @throws MessageError * @throws IOException */ - List sendMessage(MessagePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException; + List sendMessage(final MessageSendPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; /** - * * @param payload * @return * @throws TemplateMessageError * @throws IOException */ - List sendTemplateMessage(TemplateMessagePayload payload) throws TemplateMessageError, IOException; + List sendTemplateMessage(final TemplateMessageSendPayload payload) + throws TemplateMessageError, IOException; /** - * * @param payloadBuilder * @return * @throws PreBuildError * @throws TemplateMessageError * @throws IOException */ - List sendTemplateMessage(TemplateMessagePayload.Builder payloadBuilder) throws PreBuildError, TemplateMessageError, IOException; + List sendTemplateMessage(final TemplateMessageSendPayload.Builder payloadBuilder) + throws PreBuildError, TemplateMessageError, IOException; } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java b/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java new file mode 100644 index 0000000..67c0b25 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java @@ -0,0 +1,92 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import io.sprucehill.mandrill.data.error.MessageError; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.error.TemplateMessageError; +import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; +import io.sprucehill.mandrill.data.response.MessageResponse; + +/** + * @author Michael Duergner + */ +public interface IRejectsService { + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List add(final RejectsAddPayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List add(final RejectsAddPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List delete(final RejectsDeletePayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List delete(final RejectsDeletePayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List list(final RejectsListPayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List list(final RejectsListPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java b/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java index 3730f54..7197b08 100644 --- a/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java @@ -16,33 +16,32 @@ package io.sprucehill.mandrill.service; +import java.io.IOException; + import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.RenderTemplateError; import io.sprucehill.mandrill.data.request.RenderTemplatePayload; -import java.io.IOException; - /** * @author Michael Duergner */ public interface ITemplateService { /** - * * @param payload * @return * @throws RenderTemplateError * @throws IOException */ - String render(RenderTemplatePayload payload) throws RenderTemplateError,IOException; + String render(final RenderTemplatePayload payload) throws RenderTemplateError, IOException; /** - * * @param payloadBuilder * @return * @throws PreBuildError * @throws RenderTemplateError * @throws IOException */ - String render(RenderTemplatePayload.Builder payloadBuilder) throws PreBuildError, RenderTemplateError,IOException; + String render(final RenderTemplatePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; } diff --git a/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java new file mode 100644 index 0000000..bf9d7e8 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java @@ -0,0 +1,92 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import io.sprucehill.mandrill.data.error.MessageError; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.WhitelistsAddPayload; +import io.sprucehill.mandrill.data.request.WhitelistsDeletePayload; +import io.sprucehill.mandrill.data.request.WhitelistsListPayload; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; + +/** + * @author Michael Duergner + */ +public interface IWhitelistsService { + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List add(final WhitelistsAddPayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List add(final WhitelistsAddPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List delete(final WhitelistsDeletePayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List delete(final WhitelistsDeletePayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + + /** + * @param payload + * @return + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List list(final WhitelistsListPayload payload) + throws MessageError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws io.sprucehill.mandrill.data.error.PreBuildError + * @throws io.sprucehill.mandrill.data.error.MessageError + * @throws java.io.IOException + */ + List list(final WhitelistsListPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException; + +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index bbec75e..a631397 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -16,17 +16,19 @@ package io.sprucehill.mandrill.service; -import com.fasterxml.jackson.core.type.TypeReference; +import java.io.IOException; +import java.util.List; + +import com.sun.xml.internal.ws.resources.SenderMessages; + import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; -import io.sprucehill.mandrill.data.request.MessagePayload; -import io.sprucehill.mandrill.data.request.TemplateMessagePayload; +import io.sprucehill.mandrill.data.request.MessageSendPayload; +import io.sprucehill.mandrill.data.request.RejectsAddPayload; +import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; import io.sprucehill.mandrill.data.response.MessageResponse; -import java.io.IOException; -import java.util.List; - /** * @author Michael Duergner */ @@ -36,58 +38,61 @@ public class MessageService extends AbstractService implements IMessageService { private String fromName; - public void setFromEmail(String fromEmail) { + public void setFromEmail(final String fromEmail) { this.fromEmail = fromEmail; } - public void setFromName(String fromName) { + public void setFromName(final String fromName) { this.fromName = fromName; } @Override - public List sendMessage(MessagePayload payload) throws MessageError, IOException { + public List sendMessage(final MessageSendPayload payload) throws MessageError, IOException { try { - List messageResponses = send(payload,new TypeReference>() {},MessageError.class); + final List messageResponses = + send(payload, List.class, MessageError.class); return messageResponses; - } - catch (MessageError e) { - logger.warn("Got MessageError with code {}, name {} and message {} when sending message!",new Object[] {e.getCode().toString(),e.getName(),e.getMessage()}); + } catch (MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); throw e; - } - catch (IOException e) { - logger.error("Got IOException while sending message!"); + } catch (IOException e) { + LOGGER.error("Got IOException while sending message!"); throw e; } } @Override - public List sendMessage(MessagePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + public List sendMessage(final MessageSendPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { integrateDefaultValues(payloadBuilder); return sendMessage(payloadBuilder.build()); } @Override - public List sendTemplateMessage(TemplateMessagePayload payload) throws TemplateMessageError, IOException { + public List sendTemplateMessage(final TemplateMessageSendPayload payload) + throws TemplateMessageError, IOException { try { - List messageResponses = send(payload,new TypeReference>() {},MessageError.class); + final List messageResponses = + send(payload, List.class, MessageError.class); return messageResponses; - } - catch (MessageError e) { - logger.warn("Got MessageError with code {}, name {} and message {} when sending message!",new Object[] {e.getCode().toString(),e.getName(),e.getMessage()}); + } catch (MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); throw e; - } - catch (IOException e) { - logger.error("Got IOException while sending message!"); + } catch (IOException e) { + LOGGER.error("Got IOException while sending message!"); throw e; } } - public List sendTemplateMessage(TemplateMessagePayload.Builder payloadBuilder) throws PreBuildError, TemplateMessageError, IOException { + public List sendTemplateMessage( + final TemplateMessageSendPayload.Builder payloadBuilder) + throws PreBuildError, TemplateMessageError, IOException { integrateDefaultValues(payloadBuilder); return sendTemplateMessage(payloadBuilder.build()); } - , U extends MessagePayload> void integrateDefaultValues(MessagePayload.Init payloadBuilder) { + , U extends MessageSendPayload> void integrateDefaultValues( + final MessageSendPayload.Init payloadBuilder) { super.integrateDefaultValues(payloadBuilder); if (!payloadBuilder.hasFromEmail() && null != fromEmail && !fromEmail.isEmpty()) { payloadBuilder.withFromEmail(fromEmail); @@ -96,4 +101,4 @@ , U extends MessagePayload> void integrateDe payloadBuilder.withFromName(fromName); } } -} \ No newline at end of file +} diff --git a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java new file mode 100644 index 0000000..296f288 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java @@ -0,0 +1,102 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import io.sprucehill.mandrill.data.error.MessageError; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.error.TemplateMessageError; +import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; +import io.sprucehill.mandrill.data.response.MessageResponse; + +/** + * @author Michael Duergner + */ +public class RejectsService extends AbstractService implements IRejectsService { + + @Override + public List add(final RejectsAddPayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding reject!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while adding reject!"); + throw e; + } + } + + @Override + public List add(final RejectsAddPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return add(payloadBuilder.build()); + } + + @Override + public List delete(final RejectsDeletePayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting reject!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while deleting reject!"); + throw e; + } + } + + @Override + public List delete(final RejectsDeletePayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return delete(payloadBuilder.build()); + } + + @Override + public List list(final RejectsListPayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing rejects!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while listing rejects!"); + throw e; + } + } + + @Override + public List list(final RejectsListPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return list(payloadBuilder.build()); + } + +} diff --git a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java index 76c0e3e..e9d0ad4 100644 --- a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java @@ -16,38 +16,40 @@ package io.sprucehill.mandrill.service; -import com.fasterxml.jackson.core.type.TypeReference; +import java.io.IOException; + import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.RenderTemplateError; import io.sprucehill.mandrill.data.request.RenderTemplatePayload; import io.sprucehill.mandrill.data.response.RenderTemplateResponse; -import java.io.IOException; - /** * @author Michael Duergner */ public class TemplateService extends AbstractService implements ITemplateService { @Override - public String render(RenderTemplatePayload payload) throws RenderTemplateError, IOException { + public String render(final RenderTemplatePayload payload) + throws RenderTemplateError, IOException { try { - RenderTemplateResponse renderTemplateResponse = send(payload,new TypeReference() {},RenderTemplateError.class); + final RenderTemplateResponse renderTemplateResponse = + send(payload, RenderTemplateResponse.class, RenderTemplateError.class); return renderTemplateResponse.getHtml(); - } - catch (MessageError e) { - logger.warn("Got RenderTemplateError with code {}, name {} and message {} when rendering template!",new Object[] {e.getCode().toString(),e.getName(),e.getMessage()}); + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", new Object[]{e.getCode().toString(), e.getName(), + e.getMessage()}); throw e; - } - catch (IOException e) { - logger.error("Got IOException while rendering template!"); + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); throw e; } } @Override - public String render(RenderTemplatePayload.Builder payloadBuilder) throws PreBuildError, RenderTemplateError,IOException { + public String render(final RenderTemplatePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { integrateDefaultValues(payloadBuilder); return render(payloadBuilder.build()); } diff --git a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java new file mode 100644 index 0000000..df0ff60 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java @@ -0,0 +1,101 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import io.sprucehill.mandrill.data.error.MessageError; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.WhitelistsAddPayload; +import io.sprucehill.mandrill.data.request.WhitelistsDeletePayload; +import io.sprucehill.mandrill.data.request.WhitelistsListPayload; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; + +/** + * @author Michael Duergner + */ +public class WhitelistsService extends AbstractService implements IWhitelistsService { + + @Override + public List add(final WhitelistsAddPayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding whitelist!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while sending message!"); + throw e; + } + } + + @Override + public List add(final WhitelistsAddPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return add(payloadBuilder.build()); + } + + @Override + public List delete(final WhitelistsDeletePayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting whitelist!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while deleting whitelist!"); + throw e; + } + } + + @Override + public List delete(final WhitelistsDeletePayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return delete(payloadBuilder.build()); + } + + @Override + public List list(final WhitelistsListPayload payload) + throws MessageError, IOException { + try { + final List messageResponses = + send(payload, List.class, MessageError.class); + return messageResponses; + } catch (final MessageError e) { + LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing whitelists!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while listing whitelists!"); + throw e; + } + } + + @Override + public List list(final WhitelistsListPayload.Builder payloadBuilder) + throws PreBuildError, MessageError, IOException { + return list(payloadBuilder.build()); + } +} From 39ba82ed9233ce1213ed2268b70cf5cd08b855cb Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Thu, 31 Jul 2014 12:15:10 +0200 Subject: [PATCH 12/25] Remove unused import --- .../java/io/sprucehill/mandrill/service/MessageService.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index a631397..d53e997 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -19,13 +19,10 @@ import java.io.IOException; import java.util.List; -import com.sun.xml.internal.ws.resources.SenderMessages; - import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; import io.sprucehill.mandrill.data.request.MessageSendPayload; -import io.sprucehill.mandrill.data.request.RejectsAddPayload; import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; import io.sprucehill.mandrill.data.response.MessageResponse; From 5f0a0ee63c13156ab56ff29612eb27c4adee1390 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Thu, 31 Jul 2014 14:26:56 +0200 Subject: [PATCH 13/25] Fix reject list url --- .../io/sprucehill/mandrill/data/request/RejectsListPayload.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java index 2189a3e..57ffa99 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java @@ -28,7 +28,7 @@ public class RejectsListPayload extends AbstractRejectsPayload { @Override public String getPath() { - return "/rejects/add.json"; + return "/rejects/list.json"; } public static abstract class Init, U extends RejectsListPayload> From c3829940f67fa14c12ce94f461fe379e8a875350 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Wed, 6 Aug 2014 13:33:19 +0200 Subject: [PATCH 14/25] Add Tests for RejectsService and WhitelistsService --- pom.xml | 105 +++++++++++++++--- .../data/request/AbstractRejectsPayload.java | 6 - .../request/AbstractWhitelistsPayload.java | 5 - .../data/request/RejectsDeletePayload.java | 2 - .../data/request/WhitelistsListPayload.java | 2 - .../data/response/AnyListAddResponse.java | 1 - .../mandrill/service/AbstractService.java | 53 ++++++--- .../mandrill/service/IMessageService.java | 1 - .../mandrill/service/IRejectsService.java | 14 +-- .../mandrill/service/IWhitelistsService.java | 8 +- .../mandrill/service/MessageService.java | 3 +- .../mandrill/service/RejectsService.java | 35 +++--- .../mandrill/service/TemplateService.java | 3 +- .../mandrill/service/WhitelistsService.java | 28 +++-- .../io/sprucehill/mandrill/AbstractTest.java | 21 ++++ .../mandrill/service/RejectsServiceTest.java | 54 +++++++++ .../service/WhitelistsServiceTest.java | 56 ++++++++++ 17 files changed, 309 insertions(+), 88 deletions(-) create mode 100644 src/test/java/io/sprucehill/mandrill/AbstractTest.java create mode 100644 src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java create mode 100644 src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java diff --git a/pom.xml b/pom.xml index c612c39..3c73f60 100644 --- a/pom.xml +++ b/pom.xml @@ -41,15 +41,48 @@ + + org.apache.maven.plugins + maven-antrun-plugin + 1.7 + + + org.apache.maven.plugins + maven-assembly-plugin + 2.4 + org.apache.maven.plugins maven-compiler-plugin - ${version.maven-compiler} + 3.1 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.8 + + + org.apache.maven.plugins + maven-release-plugin + 2.5 org.apache.maven.plugins maven-source-plugin - ${version.maven-source} + 2.3 + + + attach-sources + verify + + jar-no-fork + + + org.apache.maven.plugins @@ -61,24 +94,51 @@ org.apache.maven.plugins - maven-compiler-plugin - - 1.6 - 1.6 - + maven-clean-plugin + 2.5 org.apache.maven.plugins - maven-source-plugin - - - attach-sources - verify - - jar-no-fork - - - + maven-deploy-plugin + 2.8.1 + + + org.apache.maven.plugins + maven-enforcer-plugin + 1.3.1 + + + org.apache.maven.plugins + maven-install-plugin + 2.5.1 + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + org.apache.maven.plugins + maven-resources-plugin + 2.6 + + + org.apache.maven.plugins + maven-site-plugin + 3.3 + + + org.apache.maven.plugins + maven-surefire-plugin + 2.17 + + + + mandrill.apikey + ${mandrill.apikey} + + + org.apache.maven.plugins @@ -121,6 +181,10 @@ org.slf4j slf4j-api + + junit + junit + @@ -133,6 +197,7 @@ 4.2.1 2.11 1.7.7 + 4.11 @@ -152,6 +217,12 @@ slf4j-api ${version.slf4j} + + junit + junit + ${version.junit} + test + diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java index 247bb18..a073d01 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java @@ -16,14 +16,8 @@ package io.sprucehill.mandrill.data.request; -import java.util.HashMap; -import java.util.Map; - import com.fasterxml.jackson.annotation.JsonProperty; -import io.sprucehill.mandrill.data.AbstractJsonBase; -import io.sprucehill.mandrill.data.error.PreBuildError; - /** * @author Michael Duergner */ diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java index b405bb7..0644084 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java @@ -16,9 +16,6 @@ package io.sprucehill.mandrill.data.request; -import java.util.HashMap; -import java.util.Map; - import com.fasterxml.jackson.annotation.JsonProperty; /** @@ -34,8 +31,6 @@ public abstract class AbstractWhitelistsPayload extends AbstractPayload { public static abstract class Init, U extends AbstractWhitelistsPayload> extends AbstractPayload.Init { - protected U object; - protected Init(U object) { super(object); } diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java index 4e8ebb2..6dbac72 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java @@ -16,8 +16,6 @@ package io.sprucehill.mandrill.data.request; -import com.fasterxml.jackson.annotation.JsonProperty; - /** * @author Michael Duergner */ diff --git a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java index d28d82c..ada78e1 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java @@ -16,8 +16,6 @@ package io.sprucehill.mandrill.data.request; -import com.fasterxml.jackson.annotation.JsonProperty; - /** * @author Michael Duergner */ diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java index d17d81c..6dc5554 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java @@ -16,7 +16,6 @@ package io.sprucehill.mandrill.data.response; -import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; /** diff --git a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java index 9f172c6..05b3598 100644 --- a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java +++ b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java @@ -36,31 +36,58 @@ public abstract class AbstractService { protected final Logger LOGGER = LoggerFactory.getLogger(getClass()); - protected String baseUrl = "https://mandrillapp.com/api/1.0"; + private static String baseUrl = "https://mandrillapp.com/api/1.0"; - protected JerseyClient jerseyClient; + private static JerseyClient jerseyClient; - protected String key; + private static String key; /** * @param baseUrl */ - public void setBaseUrl(final String baseUrl) { - this.baseUrl = baseUrl; + public static void setBaseUrl(final String baseUrl) { + AbstractService.baseUrl = baseUrl; + } + + /** + * + * @return + */ + public static String getBaseUrl() { + return baseUrl; } /** * @param jerseyClient */ - public void setClient(final JerseyClient jerseyClient) { - this.jerseyClient = jerseyClient; + public static void setClient(final JerseyClient jerseyClient) { + AbstractService.jerseyClient = jerseyClient; + } + + /** + * + * @return + */ + public static JerseyClient getJerseyClient() { + if (jerseyClient == null) { + synchronized (AbstractService.class) { + if (jerseyClient == null) { + jerseyClient = JerseyClientBuilder.createClient(); + } + } + } + return jerseyClient; } /** * @param key */ - public void setKey(final String key) { - this.key = key; + public static void setKey(final String key) { + AbstractService.key = key; + } + + public static String getKey() { + return key; } @PostConstruct @@ -69,9 +96,7 @@ public final void postConstruct() { } void onPostConstruct() { - if (null == jerseyClient) { - jerseyClient = JerseyClientBuilder.createClient(); - } + getJerseyClient(); } , U extends AbstractPayload> void integrateDefaultValues(AbstractPayload.Init payloadBuilder) { @@ -82,8 +107,8 @@ , U extends AbstractPayload> void integrate T send(final AbstractPayload payload, final Class responseClass, final Class errorClass) throws E, IOException { - final Response response = jerseyClient - .target(baseUrl) + final Response response = getJerseyClient() + .target(getBaseUrl()) .path(payload.getPath()) .request() .post(Entity.json(payload)); diff --git a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java index b26ed2a..8c0349d 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java @@ -23,7 +23,6 @@ import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; import io.sprucehill.mandrill.data.request.MessageSendPayload; -import io.sprucehill.mandrill.data.request.RejectsAddPayload; import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; import io.sprucehill.mandrill.data.response.MessageResponse; diff --git a/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java b/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java index 67c0b25..04f186b 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java @@ -21,12 +21,12 @@ import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; -import io.sprucehill.mandrill.data.error.TemplateMessageError; -import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.request.RejectsAddPayload; +import io.sprucehill.mandrill.data.request.RejectsDeletePayload; +import io.sprucehill.mandrill.data.request.RejectsListPayload; import io.sprucehill.mandrill.data.response.AnyListAddResponse; import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; import io.sprucehill.mandrill.data.response.AnyListListResponse; -import io.sprucehill.mandrill.data.response.MessageResponse; /** * @author Michael Duergner @@ -38,7 +38,7 @@ public interface IRejectsService { * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List add(final RejectsAddPayload payload) + AnyListAddResponse add(final RejectsAddPayload payload) throws MessageError, IOException; /** @@ -48,7 +48,7 @@ List add(final RejectsAddPayload payload) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List add(final RejectsAddPayload.Builder payloadBuilder) + AnyListAddResponse add(final RejectsAddPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException; /** @@ -57,7 +57,7 @@ List add(final RejectsAddPayload.Builder payloadBuilder) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List delete(final RejectsDeletePayload payload) + AnyListDeleteResponse delete(final RejectsDeletePayload payload) throws MessageError, IOException; /** @@ -67,7 +67,7 @@ List delete(final RejectsDeletePayload payload) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List delete(final RejectsDeletePayload.Builder payloadBuilder) + AnyListDeleteResponse delete(final RejectsDeletePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException; /** diff --git a/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java index bf9d7e8..da20928 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java @@ -38,7 +38,7 @@ public interface IWhitelistsService { * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List add(final WhitelistsAddPayload payload) + AnyListAddResponse add(final WhitelistsAddPayload payload) throws MessageError, IOException; /** @@ -48,7 +48,7 @@ List add(final WhitelistsAddPayload payload) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List add(final WhitelistsAddPayload.Builder payloadBuilder) + AnyListAddResponse add(final WhitelistsAddPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException; /** @@ -57,7 +57,7 @@ List add(final WhitelistsAddPayload.Builder payloadBuilder) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List delete(final WhitelistsDeletePayload payload) + AnyListDeleteResponse delete(final WhitelistsDeletePayload payload) throws MessageError, IOException; /** @@ -67,7 +67,7 @@ List delete(final WhitelistsDeletePayload payload) * @throws io.sprucehill.mandrill.data.error.MessageError * @throws java.io.IOException */ - List delete(final WhitelistsDeletePayload.Builder payloadBuilder) + AnyListDeleteResponse delete(final WhitelistsDeletePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException; /** diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index d53e997..01ba943 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -50,7 +50,8 @@ public List sendMessage(final MessageSendPayload payload) throw send(payload, List.class, MessageError.class); return messageResponses; } catch (MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (IOException e) { LOGGER.error("Got IOException while sending message!"); diff --git a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java index 296f288..ec966ee 100644 --- a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java @@ -21,12 +21,12 @@ import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; -import io.sprucehill.mandrill.data.error.TemplateMessageError; -import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.request.RejectsAddPayload; +import io.sprucehill.mandrill.data.request.RejectsDeletePayload; +import io.sprucehill.mandrill.data.request.RejectsListPayload; import io.sprucehill.mandrill.data.response.AnyListAddResponse; import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; import io.sprucehill.mandrill.data.response.AnyListListResponse; -import io.sprucehill.mandrill.data.response.MessageResponse; /** * @author Michael Duergner @@ -34,14 +34,15 @@ public class RejectsService extends AbstractService implements IRejectsService { @Override - public List add(final RejectsAddPayload payload) + public AnyListAddResponse add(final RejectsAddPayload payload) throws MessageError, IOException { try { - final List messageResponses = - send(payload, List.class, MessageError.class); + final AnyListAddResponse messageResponses = + send(payload, AnyListAddResponse.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding reject!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding reject!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while adding reject!"); @@ -50,20 +51,22 @@ public List add(final RejectsAddPayload payload) } @Override - public List add(final RejectsAddPayload.Builder payloadBuilder) + public AnyListAddResponse add(final RejectsAddPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return add(payloadBuilder.build()); } @Override - public List delete(final RejectsDeletePayload payload) + public AnyListDeleteResponse delete(final RejectsDeletePayload payload) throws MessageError, IOException { try { - final List messageResponses = - send(payload, List.class, MessageError.class); + final AnyListDeleteResponse messageResponses = + send(payload, AnyListDeleteResponse.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting reject!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting reject!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while deleting reject!"); @@ -72,8 +75,9 @@ public List delete(final RejectsDeletePayload payload) } @Override - public List delete(final RejectsDeletePayload.Builder payloadBuilder) + public AnyListDeleteResponse delete(final RejectsDeletePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return delete(payloadBuilder.build()); } @@ -85,7 +89,8 @@ public List list(final RejectsListPayload payload) send(payload, List.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing rejects!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing rejects!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while listing rejects!"); @@ -96,7 +101,7 @@ public List list(final RejectsListPayload payload) @Override public List list(final RejectsListPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return list(payloadBuilder.build()); } - } diff --git a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java index e9d0ad4..a68215c 100644 --- a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java @@ -38,8 +38,7 @@ public String render(final RenderTemplatePayload payload) return renderTemplateResponse.getHtml(); } catch (final MessageError e) { LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + - "rendering template!", new Object[]{e.getCode().toString(), e.getName(), - e.getMessage()}); + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while rendering template!"); diff --git a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java index df0ff60..f12d1c4 100644 --- a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java @@ -21,6 +21,7 @@ import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.MessageSendPayload; import io.sprucehill.mandrill.data.request.WhitelistsAddPayload; import io.sprucehill.mandrill.data.request.WhitelistsDeletePayload; import io.sprucehill.mandrill.data.request.WhitelistsListPayload; @@ -34,14 +35,15 @@ public class WhitelistsService extends AbstractService implements IWhitelistsService { @Override - public List add(final WhitelistsAddPayload payload) + public AnyListAddResponse add(final WhitelistsAddPayload payload) throws MessageError, IOException { try { - final List messageResponses = - send(payload, List.class, MessageError.class); + final AnyListAddResponse messageResponses = + send(payload, AnyListAddResponse.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding whitelist!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when adding whitelist!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while sending message!"); @@ -50,20 +52,21 @@ public List add(final WhitelistsAddPayload payload) } @Override - public List add(final WhitelistsAddPayload.Builder payloadBuilder) + public AnyListAddResponse add(final WhitelistsAddPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return add(payloadBuilder.build()); } @Override - public List delete(final WhitelistsDeletePayload payload) + public AnyListDeleteResponse delete(final WhitelistsDeletePayload payload) throws MessageError, IOException { try { - final List messageResponses = - send(payload, List.class, MessageError.class); + final AnyListDeleteResponse messageResponses = + send(payload, AnyListDeleteResponse.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting whitelist!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when deleting whitelist!", e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while deleting whitelist!"); @@ -72,8 +75,9 @@ public List delete(final WhitelistsDeletePayload payload) } @Override - public List delete(final WhitelistsDeletePayload.Builder payloadBuilder) + public AnyListDeleteResponse delete(final WhitelistsDeletePayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return delete(payloadBuilder.build()); } @@ -85,7 +89,8 @@ public List list(final WhitelistsListPayload payload) send(payload, List.class, MessageError.class); return messageResponses; } catch (final MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing whitelists!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing whitelists!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (final IOException e) { LOGGER.error("Got IOException while listing whitelists!"); @@ -96,6 +101,7 @@ public List list(final WhitelistsListPayload payload) @Override public List list(final WhitelistsListPayload.Builder payloadBuilder) throws PreBuildError, MessageError, IOException { + integrateDefaultValues(payloadBuilder); return list(payloadBuilder.build()); } } diff --git a/src/test/java/io/sprucehill/mandrill/AbstractTest.java b/src/test/java/io/sprucehill/mandrill/AbstractTest.java new file mode 100644 index 0000000..cb5b76f --- /dev/null +++ b/src/test/java/io/sprucehill/mandrill/AbstractTest.java @@ -0,0 +1,21 @@ +package io.sprucehill.mandrill; + +import org.junit.Before; + +import io.sprucehill.mandrill.service.AbstractService; + +/** + * Created by stephan on 06.08.14. + */ +public abstract class AbstractTest { + protected String apikey = null; + + @Before + public void init() { + apikey = System.getenv("mandrill.apikey"); + if (apikey == null) { + throw new IllegalArgumentException("No apikey in environment"); + } + AbstractService.setKey(apikey); + } +} diff --git a/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java new file mode 100644 index 0000000..6162583 --- /dev/null +++ b/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java @@ -0,0 +1,54 @@ +package io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +import io.sprucehill.mandrill.AbstractTest; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.RejectsAddPayload; +import io.sprucehill.mandrill.data.request.RejectsDeletePayload; +import io.sprucehill.mandrill.data.request.RejectsListPayload; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; + +public class RejectsServiceTest extends AbstractTest { + private static final String EMAIL = "reject@test.com"; + + @Test + public void add() throws PreBuildError, IOException { + final RejectsService rejectsService = new RejectsService(); + + final AnyListAddResponse response = rejectsService.add( + new RejectsAddPayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(EMAIL, response.getEmail()); + Assert.assertTrue(response.isAdded()); + } + + @Test + public void delete() throws PreBuildError, IOException { + final RejectsService rejectsService = new RejectsService(); + + final AnyListDeleteResponse response = rejectsService.delete( + new RejectsDeletePayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(EMAIL, response.getEmail()); + Assert.assertTrue(response.isDeleted()); + } + + @Test + public void list() throws PreBuildError, IOException { + final RejectsService rejectsService = new RejectsService(); + + rejectsService.add(new RejectsAddPayload.Builder().withEmail(EMAIL)); + + final List response = rejectsService.list( + new RejectsListPayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(1, response.size()); + } +} diff --git a/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java new file mode 100644 index 0000000..88a540e --- /dev/null +++ b/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java @@ -0,0 +1,56 @@ +package io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import org.junit.Test; + +import io.sprucehill.mandrill.AbstractTest; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.WhitelistsAddPayload; +import io.sprucehill.mandrill.data.request.WhitelistsDeletePayload; +import io.sprucehill.mandrill.data.request.WhitelistsListPayload; +import io.sprucehill.mandrill.data.response.AnyListAddResponse; +import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponse; + +import org.junit.Assert; + +public class WhitelistsServiceTest extends AbstractTest { + private static final String EMAIL = "whitelist@test.com"; + + @Test + public void add() throws PreBuildError, IOException { + final WhitelistsService whitelistsService = new WhitelistsService(); + + final AnyListAddResponse response = whitelistsService.add( + new WhitelistsAddPayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(EMAIL, response.getEmail()); + Assert.assertTrue(response.isAdded()); + } + + @Test + public void delete() throws PreBuildError, IOException { + final WhitelistsService whitelistsService = new WhitelistsService(); + + + final AnyListDeleteResponse response = whitelistsService.delete( + new WhitelistsDeletePayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(EMAIL, response.getEmail()); + Assert.assertTrue(response.isDeleted()); + } + + @Test + public void list() throws PreBuildError, IOException { + final WhitelistsService whitelistsService = new WhitelistsService(); + + whitelistsService.add(new WhitelistsAddPayload.Builder().withEmail(EMAIL)); + + final List response = whitelistsService.list( + new WhitelistsListPayload.Builder().withEmail(EMAIL)); + + Assert.assertEquals(1, response.size()); + } +} From 34d0e17ca4a94e237e901ad0d5c7d341e55700b8 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Wed, 6 Aug 2014 16:06:53 +0200 Subject: [PATCH 15/25] Add MessageServiceTest --- pom.xml | 10 +++ .../mandrill/service/MessageService.java | 3 +- .../io/sprucehill/mandrill/AbstractTest.java | 8 +++ .../mandrill/service/MessageServiceTest.java | 63 +++++++++++++++++++ 4 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java diff --git a/pom.xml b/pom.xml index 3c73f60..9488567 100644 --- a/pom.xml +++ b/pom.xml @@ -185,6 +185,10 @@ junit junit + + org.mockito + mockito-all + @@ -223,6 +227,12 @@ ${version.junit} test + + org.mockito + mockito-all + 1.9.5 + test + diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index 01ba943..0be517e 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -74,7 +74,8 @@ public List sendTemplateMessage(final TemplateMessageSendPayloa send(payload, List.class, MessageError.class); return messageResponses; } catch (MessageError e) { - LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", new Object[]{e.getCode().toString(), e.getName(), e.getMessage()}); + LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", + e.getCode().toString(), e.getName(), e.getMessage()); throw e; } catch (IOException e) { LOGGER.error("Got IOException while sending message!"); diff --git a/src/test/java/io/sprucehill/mandrill/AbstractTest.java b/src/test/java/io/sprucehill/mandrill/AbstractTest.java index cb5b76f..9ea1192 100644 --- a/src/test/java/io/sprucehill/mandrill/AbstractTest.java +++ b/src/test/java/io/sprucehill/mandrill/AbstractTest.java @@ -12,7 +12,15 @@ public abstract class AbstractTest { @Before public void init() { + // 1. try apikey = System.getenv("mandrill.apikey"); + + // 2. try + if (apikey == null) { + apikey = System.getenv("mandrill.apikey"); + } + + // failed? if (apikey == null) { throw new IllegalArgumentException("No apikey in environment"); } diff --git a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java new file mode 100644 index 0000000..3177731 --- /dev/null +++ b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java @@ -0,0 +1,63 @@ +package io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +import io.sprucehill.mandrill.AbstractTest; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.response.MessageResponse; + +public class MessageServiceTest extends AbstractTest { + private static final String EMAIL = "test@test.com"; + private static final String TEMPLATE = "testtemplate"; + private static final String FROM_EMAIL = "info@test.com"; + private static final String FROM_NAME = "Testservice"; + + @Test + public void send() throws PreBuildError, IOException { + final MessageService messageService = new MessageService(); + + final List response = messageService.sendMessage( + new MessageSendPayload.Builder().withTo(EMAIL).withSubject("Mandrill Test") + .withText("This is an automatic test for emails send using Mandrill")); + + Assert.assertFalse(response.isEmpty()); + //Assert.assertEquals(EMAIL, response.getEmail()); + //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); + } + + @Test + public void sendWithFrom() throws PreBuildError, IOException { + final MessageService messageService = new MessageService(); + messageService.setFromEmail(FROM_EMAIL); + messageService.setFromName(FROM_NAME); + + + + final List response = messageService.sendMessage( + new MessageSendPayload.Builder().withTo(EMAIL).withSubject("Mandrill Test") + .withText("This is an automatic test for emails send using Mandrill")); + + Assert.assertFalse(response.isEmpty()); + //Assert.assertEquals(EMAIL, response.getEmail()); + //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); + } + + @Test + public void sendTemplate() throws PreBuildError, IOException { + final MessageService messageService = new MessageService(); + + final List response = messageService.sendTemplateMessage( + new TemplateMessageSendPayload.Builder().withTo(EMAIL) + .withTemplateName(TEMPLATE)); + + Assert.assertFalse(response.isEmpty()); + //Assert.assertEquals(EMAIL, response.getEmail()); + //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); + } + +} From 5cca8dca3d58a3905397221330ad6db59df0a6ae Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Wed, 6 Aug 2014 16:08:10 +0200 Subject: [PATCH 16/25] Fix environment variable name for second try --- src/test/java/io/sprucehill/mandrill/AbstractTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/io/sprucehill/mandrill/AbstractTest.java b/src/test/java/io/sprucehill/mandrill/AbstractTest.java index 9ea1192..35aa645 100644 --- a/src/test/java/io/sprucehill/mandrill/AbstractTest.java +++ b/src/test/java/io/sprucehill/mandrill/AbstractTest.java @@ -17,7 +17,7 @@ public void init() { // 2. try if (apikey == null) { - apikey = System.getenv("mandrill.apikey"); + apikey = System.getenv("mandrill_apikey"); } // failed? From 7232282d4096e72b5f9d2b09a587c627bf281f22 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Wed, 6 Aug 2014 17:48:36 +0200 Subject: [PATCH 17/25] Fix url form MessageService.sendTemplate Add TemplateService --- .../request/IWithFromEmailPayloadBuilder.java | 26 +++ .../request/IWithFromNamePayloadBuilder.java | 26 +++ .../data/request/IWithFromPayloadBuilder.java | 25 +++ .../request/IWithLabelPayloadBuilder.java | 26 +++ .../data/request/IWithNamePayloadBuilder.java | 26 +++ .../mandrill/data/request/LabelPayload.java | 41 +++++ ...d.java => MessageSendTemplatePayload.java} | 8 +- .../request/TemplateAddOrUpdatePayload.java | 95 ++++++++++ .../data/request/TemplateAddPayload.java | 44 +++++ .../data/request/TemplateDeletePayload.java | 39 +++++ .../data/request/TemplateInfoPayload.java | 39 +++++ .../data/request/TemplateListPayload.java | 39 +++++ .../data/request/TemplatePayload.java | 86 +++++++++ .../data/request/TemplatePublishPayload.java | 39 +++++ ...ayload.java => TemplateRenderPayload.java} | 8 +- .../data/request/TemplateUpdatePayload.java | 40 +++++ .../data/response/AnyListAddResponse.java | 11 +- .../data/response/AnyListDeleteResponse.java | 11 +- .../data/response/AnyListListResponse.java | 13 +- .../data/response/MessageResponse.java | 12 +- ...ponse.java => TemplateRenderResponse.java} | 9 +- .../data/response/TemplateResponse.java | 164 ++++++++++++++++++ .../mandrill/service/IMessageService.java | 6 +- .../mandrill/service/ITemplateService.java | 118 ++++++++++++- .../mandrill/service/MessageService.java | 6 +- .../mandrill/service/TemplateService.java | 162 ++++++++++++++++- .../mandrill/service/MessageServiceTest.java | 5 +- .../mandrill/service/TemplateServiceTest.java | 53 ++++++ 28 files changed, 1113 insertions(+), 64 deletions(-) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java rename src/main/java/io/sprucehill/mandrill/data/request/{TemplateMessageSendPayload.java => MessageSendTemplatePayload.java} (91%) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java rename src/main/java/io/sprucehill/mandrill/data/request/{RenderTemplatePayload.java => TemplateRenderPayload.java} (93%) create mode 100644 src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java rename src/main/java/io/sprucehill/mandrill/data/response/{RenderTemplateResponse.java => TemplateRenderResponse.java} (80%) create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java create mode 100644 src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java new file mode 100644 index 0000000..22dd999 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java @@ -0,0 +1,26 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + * @param + */ +public interface IWithFromEmailPayloadBuilder { + T withFromEmail(final String email); + +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java new file mode 100644 index 0000000..9758e3f --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java @@ -0,0 +1,26 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + * @param + */ +public interface IWithFromNamePayloadBuilder { + T withFromName(final String name); + +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java new file mode 100644 index 0000000..a0a3f3c --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java @@ -0,0 +1,25 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + * @param + */ +public interface IWithFromPayloadBuilder extends IWithFromEmailPayloadBuilder, + IWithFromNamePayloadBuilder { +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java new file mode 100644 index 0000000..9041f56 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java @@ -0,0 +1,26 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + * @param + */ +public interface IWithLabelPayloadBuilder { + + T withLabel(final String label); +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java new file mode 100644 index 0000000..41e83d3 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java @@ -0,0 +1,26 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + * @param + */ +public interface IWithNamePayloadBuilder { + + T withName(final String name); +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java new file mode 100644 index 0000000..c342772 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java @@ -0,0 +1,41 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.sprucehill.mandrill.data.AbstractJsonBase; + +/** + * + */ +public abstract class LabelPayload extends AbstractPayload { + @JsonProperty(value = "label") + protected String label; + + protected static abstract class Init, U extends LabelPayload> extends AbstractPayload.Init implements IWithLabelPayloadBuilder { + + protected Init(U object) { + super(object); + } + + public T withLabel(String label) { + object.label = label; + return self(); + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/MessageSendTemplatePayload.java similarity index 91% rename from src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java rename to src/main/java/io/sprucehill/mandrill/data/request/MessageSendTemplatePayload.java index 4cb7b14..974c09f 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplateMessageSendPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/MessageSendTemplatePayload.java @@ -25,7 +25,7 @@ /** * @author Michael Duergner */ -public class TemplateMessageSendPayload extends MessageSendPayload { +public class MessageSendTemplatePayload extends MessageSendPayload { public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; @JsonProperty( @@ -42,7 +42,7 @@ public String getPath() { return "/messages/send-template.json"; } - protected static abstract class Init, U extends TemplateMessageSendPayload> + protected static abstract class Init, U extends MessageSendTemplatePayload> extends MessageSendPayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder { @@ -73,10 +73,10 @@ protected void preBuild() { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { - super(new TemplateMessageSendPayload()); + super(new MessageSendTemplatePayload()); } @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java new file mode 100644 index 0000000..e315363 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java @@ -0,0 +1,95 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * + */ +public abstract class TemplateAddOrUpdatePayload extends TemplatePayload { + + public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; + @JsonProperty(value = "from_email") + protected String fromEmail; + @JsonProperty(value = "from_name") + protected String fromName; + @JsonProperty(value = "subject") + protected String subject; + @JsonProperty(value = "code") + protected String code; + @JsonProperty(value = "text") + protected String text; + @JsonProperty(value = "publish") + protected boolean publish; + @JsonProperty(value = "labels") + protected List labels; + + protected static abstract class Init, U extends TemplateAddOrUpdatePayload> extends TemplatePayload.Init implements IWithFromPayloadBuilder { + + protected Init(U object) { + super(object); + } + + public T withFromEmail(String fromEmail) { + object.fromEmail = fromEmail; + return self(); + } + + public T withFromName(String name) { + object.fromName = name; + return self(); + } + + public T withSubject(String subject) { + object.subject = subject; + return self(); + } + + public T withCode(String code) { + object.code = code; + return self(); + } + + public T withText(String text) { + object.text = text; + return self(); + } + + public T withPublish(boolean publish) { + object.publish = publish; + return self(); + } + + public T withLabel(String label) { + if (!object.labels.contains(label)) { + object.labels.add(label); + } + return self(); + } + + @Override + protected void preBuild() { + super.preBuild(); + if (null == object.name || object.name.isEmpty()) { + addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET, "'template_name' must be set and may not be empty!"); + } + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java new file mode 100644 index 0000000..fb797f1 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java @@ -0,0 +1,44 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * + */ +public class TemplateAddPayload extends TemplateAddOrUpdatePayload { + @Override + public String getPath() { + return "/templates/add.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplateAddPayload()); + } + + @Override + protected Builder self() { + return this; + } + } + +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java new file mode 100644 index 0000000..e93dd71 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java @@ -0,0 +1,39 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + */ +public class TemplateDeletePayload extends TemplatePayload { + @Override + public String getPath() { + return "/templates/delete.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplateDeletePayload()); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java new file mode 100644 index 0000000..f14997a --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java @@ -0,0 +1,39 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + */ +public class TemplateInfoPayload extends TemplatePayload { + @Override + public String getPath() { + return "/templates/info.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplateInfoPayload()); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java new file mode 100644 index 0000000..9949993 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java @@ -0,0 +1,39 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + */ +public class TemplateListPayload extends LabelPayload { + @Override + public String getPath() { + return "/templates/list.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplateListPayload()); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java new file mode 100644 index 0000000..156eb9d --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java @@ -0,0 +1,86 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.sprucehill.mandrill.data.AbstractJsonBase; + +/** + * + */ +public abstract class TemplatePayload extends AbstractPayload { + + public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; + + @JsonProperty(value = "name") + protected String name; + + public static final class Variable extends AbstractJsonBase { + + @JsonProperty + protected String name; + + @JsonProperty + protected String content; + + protected Variable() { + } + + protected Variable(String name, String content) { + this.name = name; + this.content = content; + } + + @Override + public int hashCode() { + return null == name ? super.hashCode() : name.hashCode(); + } + + @Override + public boolean equals(Object o) { + if (null == o) { + return false; + } + if (!Variable.class.isAssignableFrom(o.getClass())) { + return false; + } + + return null == name ? super.equals(o) : name.equals(((Variable) o).name); + } + } + + protected static abstract class Init, U extends TemplatePayload> extends AbstractPayload.Init implements IWithNamePayloadBuilder { + + protected Init(U object) { + super(object); + } + + public T withName(String name) { + object.name = name; + return self(); + } + + @Override + protected void preBuild() { + super.preBuild(); + if (null == object.name || object.name.isEmpty()) { + addPreBuildError(PRE_BUILD_TEMPLATE_NAME_NOT_SET, "'template_name' must be set and may not be empty!"); + } + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java new file mode 100644 index 0000000..5c3021b --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java @@ -0,0 +1,39 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + */ +public class TemplatePublishPayload extends TemplatePayload { + @Override + public String getPath() { + return "/templates/publish.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplatePublishPayload()); + } + + @Override + protected Builder self() { + return this; + } + } +} diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateRenderPayload.java similarity index 93% rename from src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java rename to src/main/java/io/sprucehill/mandrill/data/request/TemplateRenderPayload.java index b5a12b1..55925d5 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/RenderTemplatePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateRenderPayload.java @@ -27,7 +27,7 @@ /** * @author Michael Duergner */ -public class RenderTemplatePayload extends AbstractPayload { +public class TemplateRenderPayload extends AbstractPayload { public static final String PRE_BUILD_TEMPLATE_NAME_NOT_SET = "TEMPLATE_NAME_NOT_SET"; @JsonProperty(value = "template_name") @@ -77,7 +77,7 @@ public boolean equals(Object o) { } } - protected static abstract class Init, U extends RenderTemplatePayload> extends AbstractPayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder, IWithMergeVarPayloadBuilder { + protected static abstract class Init, U extends TemplateRenderPayload> extends AbstractPayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder, IWithMergeVarPayloadBuilder { protected Init(U object) { super(object); @@ -113,10 +113,10 @@ protected void preBuild() { } } - public static class Builder extends Init { + public static class Builder extends Init { public Builder() { - super(new RenderTemplatePayload()); + super(new TemplateRenderPayload()); } @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java new file mode 100644 index 0000000..165f554 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java @@ -0,0 +1,40 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.request; + +/** + * + */ +public class TemplateUpdatePayload extends TemplateAddOrUpdatePayload { + @Override + public String getPath() { + return "/templates/update.json"; + } + + public static class Builder extends Init { + + public Builder() { + super(new TemplateUpdatePayload()); + } + + @Override + protected Builder self() { + return this; + } + } + +} diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java index 6dc5554..dda2185 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java @@ -18,8 +18,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; +import jersey.repackaged.com.google.common.base.Objects; + /** - * @author Michael Duergner + * */ public class AnyListAddResponse extends Response { @@ -38,12 +40,7 @@ public boolean isAdded() { @Override public String toString() { - return new StringBuilder("MessageResponse [email: "). - append(email). - append(", added: "). - append(added). - append("]"). - toString(); + return Objects.toStringHelper(this).add("email", email).add("added", added).toString(); } } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java index 8e32273..1cc396d 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java @@ -18,8 +18,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; +import jersey.repackaged.com.google.common.base.Objects; + /** - * @author Michael Duergner + * */ public class AnyListDeleteResponse extends Response { @@ -38,12 +40,7 @@ public boolean isDeleted() { @Override public String toString() { - return new StringBuilder("MessageResponse [email: "). - append(email). - append(", deleted: "). - append(deleted). - append("]"). - toString(); + return Objects.toStringHelper(this).add("email", email).add("deleted", deleted).toString(); } } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java index 8dd1a2d..ef52156 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java @@ -17,12 +17,13 @@ package io.sprucehill.mandrill.data.response; import java.util.Date; +import java.util.Objects; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; /** - * @author Michael Duergner + * */ public class AnyListListResponse extends Response { @@ -48,14 +49,8 @@ public Date getCreatedAt() { @Override public String toString() { - return new StringBuilder("MessageResponse [email: "). - append(email). - append(", detail: "). - append(detail). - append(", created_at: "). - append(createdAt). - append("]"). - toString(); + return jersey.repackaged.com.google.common.base.Objects.toStringHelper(this) + .add("email", email).add("detail", detail).add("createdAt", createdAt).toString(); } } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java index 819e005..fee7d1c 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java @@ -19,6 +19,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import jersey.repackaged.com.google.common.base.Objects; + /** * @author Michael Duergner */ @@ -45,14 +47,8 @@ public String getRejectReason() { @Override public String toString() { - return new StringBuilder("MessageResponse [email: "). - append(email). - append(", status: "). - append(status). - append(", reject_reason: "). - append(rejectReason). - append("]"). - toString(); + return Objects.toStringHelper(this).add("email", email).add("status", status) + .add("rejectReaseon", rejectReason).toString(); } public static enum Status { diff --git a/src/main/java/io/sprucehill/mandrill/data/response/RenderTemplateResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/TemplateRenderResponse.java similarity index 80% rename from src/main/java/io/sprucehill/mandrill/data/response/RenderTemplateResponse.java rename to src/main/java/io/sprucehill/mandrill/data/response/TemplateRenderResponse.java index 1bc61e2..f1bb37e 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/RenderTemplateResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/TemplateRenderResponse.java @@ -18,10 +18,12 @@ import com.fasterxml.jackson.annotation.JsonProperty; +import jersey.repackaged.com.google.common.base.Objects; + /** * @author Michael Duergner */ -public class RenderTemplateResponse extends Response { +public class TemplateRenderResponse extends Response { @JsonProperty private String html; @@ -32,9 +34,6 @@ public String getHtml() { @Override public String toString() { - return new StringBuilder("RenderTemplateResponse [html: "). - append(html). - append("]"). - toString(); + return Objects.toStringHelper(this).add("html", html).toString(); } } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java new file mode 100644 index 0000000..7d29655 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java @@ -0,0 +1,164 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH + +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 io.sprucehill.mandrill.data.response; + +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; + +import jersey.repackaged.com.google.common.base.Objects; + +/** + * @author Michael Duergner + */ +public class TemplateResponse extends Response { + + @JsonProperty + private String slug; + + @JsonProperty + private String name; + + @JsonProperty + private List labels; + + @JsonProperty + private String code; + + @JsonProperty + private String subject; + + @JsonProperty("from_email") + private String fromEmail; + + @JsonProperty("from_name") + private String fromName; + + @JsonProperty + private String text; + + @JsonProperty("publish_name") + private String publishName; + + @JsonProperty("publish_code") + private String publishCode; + + @JsonProperty("publish_subject") + private String publishSubject; + + @JsonProperty("publish_from_email") + private String publishFromEmail; + + @JsonProperty("publish_from_name") + private String publishFromName; + + @JsonProperty("publish_text") + private String publishText; + + @JsonProperty("published_at") + @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT") + private Date publishedAt; + + @JsonProperty("created_at") + @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT") + private Date createdAt; + + @JsonProperty("updated_at") + @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT") + private Date updatedAt; + + public String getSlug() { + return slug; + } + + public String getName() { + return name; + } + + public List getLabels() { + return labels; + } + + public String getCode() { + return code; + } + + public String getSubject() { + return subject; + } + + public String getFromEmail() { + return fromEmail; + } + + public String getFromName() { + return fromName; + } + + public String getText() { + return text; + } + + public String getPublishName() { + return publishName; + } + + public String getPublishCode() { + return publishCode; + } + + public String getPublishSubject() { + return publishSubject; + } + + public String getPublishFromEmail() { + return publishFromEmail; + } + + public String getPublishFromName() { + return publishFromName; + } + + public String getPublishText() { + return publishText; + } + + public Date getPublishedAt() { + return publishedAt; + } + + public Date getCreatedAt() { + return createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + @Override + public String toString() { + return Objects.toStringHelper(this).add("slug", slug).add("name", name).add("label", labels) + .add("code", code).add("subject", subject).add("fromEmail", fromEmail) + .add("fromName", fromName).add("text", text).add("publishName", publishName) + .add("publishCode", publishCode).add("publishSubject", publishSubject) + .add("publishFromEmail", publishFromEmail).add("publishFromName", publishFromName) + .add("publish_text", publishText).add("published_at", publishedAt) + .add("created_at", createdAt).add("updated_at", updatedAt).toString(); + } +} \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java index 8c0349d..4d799f6 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java @@ -23,7 +23,7 @@ import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; import io.sprucehill.mandrill.data.request.MessageSendPayload; -import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; +import io.sprucehill.mandrill.data.request.MessageSendTemplatePayload; import io.sprucehill.mandrill.data.response.MessageResponse; /** @@ -56,7 +56,7 @@ List sendMessage(final MessageSendPayload.Builder payloadBuilde * @throws TemplateMessageError * @throws IOException */ - List sendTemplateMessage(final TemplateMessageSendPayload payload) + List sendTemplateMessage(final MessageSendTemplatePayload payload) throws TemplateMessageError, IOException; /** @@ -66,6 +66,6 @@ List sendTemplateMessage(final TemplateMessageSendPayload paylo * @throws TemplateMessageError * @throws IOException */ - List sendTemplateMessage(final TemplateMessageSendPayload.Builder payloadBuilder) + List sendTemplateMessage(final MessageSendTemplatePayload.Builder payloadBuilder) throws PreBuildError, TemplateMessageError, IOException; } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java b/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java index 7197b08..138b3f0 100644 --- a/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java @@ -17,10 +17,12 @@ package io.sprucehill.mandrill.service; import java.io.IOException; +import java.util.List; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.RenderTemplateError; -import io.sprucehill.mandrill.data.request.RenderTemplatePayload; +import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.response.TemplateResponse; /** * @author Michael Duergner @@ -33,7 +35,7 @@ public interface ITemplateService { * @throws RenderTemplateError * @throws IOException */ - String render(final RenderTemplatePayload payload) throws RenderTemplateError, IOException; + String render(final TemplateRenderPayload payload) throws RenderTemplateError, IOException; /** * @param payloadBuilder @@ -42,6 +44,116 @@ public interface ITemplateService { * @throws RenderTemplateError * @throws IOException */ - String render(final RenderTemplatePayload.Builder payloadBuilder) + String render(final TemplateRenderPayload.Builder payloadBuilder) throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse add(final TemplateAddPayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse add(final TemplateAddPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse update(final TemplateUpdatePayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse update(final TemplateUpdatePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse publish(final TemplatePublishPayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse publish(final TemplatePublishPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse delete(final TemplateDeletePayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse delete(final TemplateDeletePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse info(final TemplateInfoPayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + TemplateResponse info(final TemplateInfoPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + /** + * @param payload + * @return + * @throws RenderTemplateError + * @throws IOException + */ + List list(final TemplateListPayload payload) throws RenderTemplateError, IOException; + + /** + * @param payloadBuilder + * @return + * @throws PreBuildError + * @throws RenderTemplateError + * @throws IOException + */ + List list(final TemplateListPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException; + + } diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index 0be517e..c565d05 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -23,7 +23,7 @@ import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; import io.sprucehill.mandrill.data.request.MessageSendPayload; -import io.sprucehill.mandrill.data.request.TemplateMessageSendPayload; +import io.sprucehill.mandrill.data.request.MessageSendTemplatePayload; import io.sprucehill.mandrill.data.response.MessageResponse; /** @@ -67,7 +67,7 @@ public List sendMessage(final MessageSendPayload.Builder payloa } @Override - public List sendTemplateMessage(final TemplateMessageSendPayload payload) + public List sendTemplateMessage(final MessageSendTemplatePayload payload) throws TemplateMessageError, IOException { try { final List messageResponses = @@ -84,7 +84,7 @@ public List sendTemplateMessage(final TemplateMessageSendPayloa } public List sendTemplateMessage( - final TemplateMessageSendPayload.Builder payloadBuilder) + final MessageSendTemplatePayload.Builder payloadBuilder) throws PreBuildError, TemplateMessageError, IOException { integrateDefaultValues(payloadBuilder); return sendTemplateMessage(payloadBuilder.build()); diff --git a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java index a68215c..6f49a92 100644 --- a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java @@ -17,12 +17,14 @@ package io.sprucehill.mandrill.service; import java.io.IOException; +import java.util.List; import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.RenderTemplateError; -import io.sprucehill.mandrill.data.request.RenderTemplatePayload; -import io.sprucehill.mandrill.data.response.RenderTemplateResponse; +import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.response.TemplateRenderResponse; +import io.sprucehill.mandrill.data.response.TemplateResponse; /** * @author Michael Duergner @@ -30,12 +32,12 @@ public class TemplateService extends AbstractService implements ITemplateService { @Override - public String render(final RenderTemplatePayload payload) + public String render(final TemplateRenderPayload payload) throws RenderTemplateError, IOException { try { - final RenderTemplateResponse renderTemplateResponse = - send(payload, RenderTemplateResponse.class, RenderTemplateError.class); - return renderTemplateResponse.getHtml(); + final TemplateRenderResponse templateRenderResponse = + send(payload, TemplateRenderResponse.class, RenderTemplateError.class); + return templateRenderResponse.getHtml(); } catch (final MessageError e) { LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); @@ -47,9 +49,155 @@ public String render(final RenderTemplatePayload payload) } @Override - public String render(final RenderTemplatePayload.Builder payloadBuilder) + public String render(final TemplateRenderPayload.Builder payloadBuilder) throws PreBuildError, RenderTemplateError, IOException { integrateDefaultValues(payloadBuilder); return render(payloadBuilder.build()); } + + @Override + public TemplateResponse add(final TemplateAddPayload payload) + throws RenderTemplateError, IOException { + try { + final TemplateResponse templateResponse = + send(payload, TemplateResponse.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public TemplateResponse add(final TemplateAddPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return add(payloadBuilder.build()); + } + + @Override + public TemplateResponse update(final TemplateUpdatePayload payload) + throws RenderTemplateError, IOException { + try { + final TemplateResponse templateResponse = + send(payload, TemplateResponse.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public TemplateResponse update(final TemplateUpdatePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return update(payloadBuilder.build()); + } + + @Override + public TemplateResponse publish(final TemplatePublishPayload payload) + throws RenderTemplateError, IOException { + try { + final TemplateResponse templateResponse = + send(payload, TemplateResponse.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public TemplateResponse publish(final TemplatePublishPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return publish(payloadBuilder.build()); + } + + @Override + public TemplateResponse delete(final TemplateDeletePayload payload) + throws RenderTemplateError, IOException { + try { + final TemplateResponse templateResponse = + send(payload, TemplateResponse.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public TemplateResponse delete(final TemplateDeletePayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return delete(payloadBuilder.build()); + } + + + @Override + public TemplateResponse info(final TemplateInfoPayload payload) + throws RenderTemplateError, IOException { + try { + final TemplateResponse templateResponse = + send(payload, TemplateResponse.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public TemplateResponse info(final TemplateInfoPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return info(payloadBuilder.build()); + } + + @Override + public List list(final TemplateListPayload payload) + throws RenderTemplateError, IOException { + try { + final List templateResponse = + send(payload, List.class, RenderTemplateError.class); + return templateResponse; + } catch (final MessageError e) { + LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + + "rendering template!", e.getCode().toString(), e.getName(), e.getMessage()); + throw e; + } catch (final IOException e) { + LOGGER.error("Got IOException while rendering template!"); + throw e; + } + } + + @Override + public List list(final TemplateListPayload.Builder payloadBuilder) + throws PreBuildError, RenderTemplateError, IOException { + integrateDefaultValues(payloadBuilder); + return list(payloadBuilder.build()); + } + } diff --git a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java index 3177731..c0e682b 100644 --- a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java @@ -36,8 +36,6 @@ public void sendWithFrom() throws PreBuildError, IOException { messageService.setFromEmail(FROM_EMAIL); messageService.setFromName(FROM_NAME); - - final List response = messageService.sendMessage( new MessageSendPayload.Builder().withTo(EMAIL).withSubject("Mandrill Test") .withText("This is an automatic test for emails send using Mandrill")); @@ -52,12 +50,11 @@ public void sendTemplate() throws PreBuildError, IOException { final MessageService messageService = new MessageService(); final List response = messageService.sendTemplateMessage( - new TemplateMessageSendPayload.Builder().withTo(EMAIL) + new MessageSendTemplatePayload.Builder().withTo(EMAIL) .withTemplateName(TEMPLATE)); Assert.assertFalse(response.isEmpty()); //Assert.assertEquals(EMAIL, response.getEmail()); //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); } - } diff --git a/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java new file mode 100644 index 0000000..7f5e26d --- /dev/null +++ b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java @@ -0,0 +1,53 @@ +package io.sprucehill.mandrill.service; + +import java.io.IOException; +import java.util.List; + +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; + +import io.sprucehill.mandrill.AbstractTest; +import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.request.TemplateAddPayload; +import io.sprucehill.mandrill.data.request.TemplateRenderPayload; +import io.sprucehill.mandrill.data.request.TemplateUpdatePayload; +import io.sprucehill.mandrill.data.response.TemplateResponse; + +public class TemplateServiceTest extends AbstractTest { + private static final String TEMPLATE = "testtemplate"; + + @Ignore + @Test + public void add() throws PreBuildError, IOException { + final TemplateService messageService = new TemplateService(); + + final TemplateResponse response = messageService.add( + new TemplateAddPayload.Builder().withName(TEMPLATE)); + + Assert.assertEquals(TEMPLATE, response.getName()); + } + + @Test + public void update() throws PreBuildError, IOException { + final TemplateService messageService = new TemplateService(); + + final TemplateResponse response = messageService.update( + new TemplateUpdatePayload.Builder().withName(TEMPLATE)); + + Assert.assertEquals(TEMPLATE, response.getName()); + } + + + @Test + public void render() throws PreBuildError, IOException { + final TemplateService messageService = new TemplateService(); + + final String response = messageService.render( + new TemplateRenderPayload.Builder().withTemplateName(TEMPLATE)); + + //Assert.assertFalse(response.isEmpty()); + //Assert.assertEquals(EMAIL, response.getEmail()); + //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); + } +} From dbbb80c6c03dcdb02dab8db36a81124e745aa6b0 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Thu, 7 Aug 2014 13:21:23 +0200 Subject: [PATCH 18/25] Update Tests --- .../data/request/AbstractRejectsPayload.java | 2 - .../mandrill/service/TemplateServiceTest.java | 62 ++++++++++++++++--- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java index a073d01..ed5ef23 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java @@ -29,8 +29,6 @@ public abstract class AbstractRejectsPayload extends AbstractPayload { @JsonProperty protected String subaccount; - public abstract String getPath(); - public static abstract class Init, U extends AbstractRejectsPayload> extends AbstractPayload.Init { diff --git a/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java index 7f5e26d..9fd9b67 100644 --- a/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java @@ -1,6 +1,7 @@ package io.sprucehill.mandrill.service; import java.io.IOException; +import java.util.Date; import java.util.List; import org.junit.Assert; @@ -9,33 +10,49 @@ import io.sprucehill.mandrill.AbstractTest; import io.sprucehill.mandrill.data.error.PreBuildError; +import io.sprucehill.mandrill.data.error.RenderTemplateError; import io.sprucehill.mandrill.data.request.TemplateAddPayload; +import io.sprucehill.mandrill.data.request.TemplateDeletePayload; import io.sprucehill.mandrill.data.request.TemplateRenderPayload; import io.sprucehill.mandrill.data.request.TemplateUpdatePayload; import io.sprucehill.mandrill.data.response.TemplateResponse; public class TemplateServiceTest extends AbstractTest { - private static final String TEMPLATE = "testtemplate"; + private static final String TEMPLATE = "testtemplate" + System.currentTimeMillis(); - @Ignore @Test public void add() throws PreBuildError, IOException { final TemplateService messageService = new TemplateService(); - final TemplateResponse response = messageService.add( - new TemplateAddPayload.Builder().withName(TEMPLATE)); + try { + final TemplateResponse response = messageService.add( + new TemplateAddPayload.Builder().withName(TEMPLATE)); + + Assert.assertEquals(TEMPLATE, response.getName()); + } finally { + delete(); + } - Assert.assertEquals(TEMPLATE, response.getName()); } @Test public void update() throws PreBuildError, IOException { final TemplateService messageService = new TemplateService(); - final TemplateResponse response = messageService.update( - new TemplateUpdatePayload.Builder().withName(TEMPLATE)); + try { + try { + messageService.add(new TemplateAddPayload.Builder().withName(TEMPLATE)); + } catch (final RenderTemplateError e) { + // Ignore + } + + final TemplateResponse response = messageService.update( + new TemplateUpdatePayload.Builder().withName(TEMPLATE)); - Assert.assertEquals(TEMPLATE, response.getName()); + Assert.assertEquals(TEMPLATE, response.getName()); + } finally { + delete(); + } } @@ -43,8 +60,33 @@ public void update() throws PreBuildError, IOException { public void render() throws PreBuildError, IOException { final TemplateService messageService = new TemplateService(); - final String response = messageService.render( - new TemplateRenderPayload.Builder().withTemplateName(TEMPLATE)); + try { + try { + messageService.add(new TemplateAddPayload.Builder().withName(TEMPLATE)); + } catch (final RenderTemplateError e) { + // Ignore + } + + final String response = messageService.render( + new TemplateRenderPayload.Builder().withTemplateName(TEMPLATE)); + } finally { + delete(); + } + + //Assert.assertFalse(response.isEmpty()); + //Assert.assertEquals(EMAIL, response.getEmail()); + //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); + } + + public void delete() throws PreBuildError, IOException { + final TemplateService messageService = new TemplateService(); + + try { + final TemplateResponse response = messageService.delete( + new TemplateDeletePayload.Builder().withName(TEMPLATE)); + } catch (RenderTemplateError ex) { + // Ignore + } //Assert.assertFalse(response.isEmpty()); //Assert.assertEquals(EMAIL, response.getEmail()); From dad1345f863657c0a443213439c670047352460e Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Tue, 12 Aug 2014 11:14:54 +0200 Subject: [PATCH 19/25] Fix apiKey resolving. Properties were missing --- .../io/sprucehill/mandrill/AbstractTest.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/test/java/io/sprucehill/mandrill/AbstractTest.java b/src/test/java/io/sprucehill/mandrill/AbstractTest.java index 35aa645..4bb4f6f 100644 --- a/src/test/java/io/sprucehill/mandrill/AbstractTest.java +++ b/src/test/java/io/sprucehill/mandrill/AbstractTest.java @@ -5,25 +5,35 @@ import io.sprucehill.mandrill.service.AbstractService; /** - * Created by stephan on 06.08.14. + * Abstract test providing apiKey. */ public abstract class AbstractTest { - protected String apikey = null; + protected String apiKey = null; @Before public void init() { // 1. try - apikey = System.getenv("mandrill.apikey"); + apiKey = System.getenv("mandrill.apikey"); // 2. try - if (apikey == null) { - apikey = System.getenv("mandrill_apikey"); + if (apiKey == null || apiKey.isEmpty()) { + apiKey = System.getenv("mandrill_apikey"); + } + + // 3. try + if (apiKey == null || apiKey.isEmpty()) { + apiKey = System.getProperty("mandrill.apikey"); + } + + // 4. try + if (apiKey == null || apiKey.isEmpty()) { + apiKey = System.getProperty("mandrill_apikey"); } // failed? - if (apikey == null) { - throw new IllegalArgumentException("No apikey in environment"); + if (apiKey == null) { + throw new IllegalArgumentException("No apiKey in environment"); } - AbstractService.setKey(apikey); + AbstractService.setKey(apiKey); } } From 45d2bc45d850cc66d68fa517893c869bd4cb941e Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Tue, 19 Aug 2014 15:36:28 +0200 Subject: [PATCH 20/25] Fix responses with List.class --- .../AnyListListResponseGenericType.java | 8 ++++++++ .../MessageResponseListGenericType.java | 8 ++++++++ .../response/TemplateResponseGenericType.java | 8 ++++++++ .../mandrill/service/AbstractService.java | 20 +++++++++++++++++++ .../mandrill/service/MessageService.java | 7 +++++-- .../mandrill/service/RejectsService.java | 3 ++- .../mandrill/service/TemplateService.java | 3 ++- .../mandrill/service/WhitelistsService.java | 3 ++- 8 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java create mode 100644 src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java new file mode 100644 index 0000000..781715b --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java @@ -0,0 +1,8 @@ +package io.sprucehill.mandrill.data.response; + +import java.util.List; + +import javax.ws.rs.core.GenericType; + +public class AnyListListResponseGenericType extends GenericType> { +} diff --git a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java new file mode 100644 index 0000000..a9c12a3 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java @@ -0,0 +1,8 @@ +package io.sprucehill.mandrill.data.response; + +import java.util.List; + +import javax.ws.rs.core.GenericType; + +public class MessageResponseListGenericType extends GenericType> { +} diff --git a/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java new file mode 100644 index 0000000..e06af4b --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java @@ -0,0 +1,8 @@ +package io.sprucehill.mandrill.data.response; + +import java.util.List; + +import javax.ws.rs.core.GenericType; + +public class TemplateResponseGenericType extends GenericType> { +} diff --git a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java index 05b3598..cb9a45b 100644 --- a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java +++ b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java @@ -20,6 +20,7 @@ import javax.annotation.PostConstruct; import javax.ws.rs.client.Entity; +import javax.ws.rs.core.GenericType; import javax.ws.rs.core.Response; import org.glassfish.jersey.client.JerseyClient; @@ -122,4 +123,23 @@ T send(final AbstractPayload payload, final Class respon throw error; } } + + T send(final AbstractPayload payload, final GenericType responseClass, + final Class errorClass) throws E, IOException { + final Response response = getJerseyClient() + .target(getBaseUrl()) + .path(payload.getPath()) + .request() + .post(Entity.json(payload)); + + if (200 == response.getStatus()) { + final T result = response.readEntity(responseClass); + return result; + } else { + final E error = response.readEntity(errorClass); + LOGGER.debug("Got error {} while calling {}.", error.toString(), payload.getPath()); + throw error; + } + } + } diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index c565d05..f89c89b 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -19,12 +19,15 @@ import java.io.IOException; import java.util.List; +import javax.ws.rs.core.GenericType; + import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; import io.sprucehill.mandrill.data.request.MessageSendPayload; import io.sprucehill.mandrill.data.request.MessageSendTemplatePayload; import io.sprucehill.mandrill.data.response.MessageResponse; +import io.sprucehill.mandrill.data.response.MessageResponseListGenericType; /** * @author Michael Duergner @@ -47,7 +50,7 @@ public void setFromName(final String fromName) { public List sendMessage(final MessageSendPayload payload) throws MessageError, IOException { try { final List messageResponses = - send(payload, List.class, MessageError.class); + send(payload, new MessageResponseListGenericType(), MessageError.class); return messageResponses; } catch (MessageError e) { LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", @@ -71,7 +74,7 @@ public List sendTemplateMessage(final MessageSendTemplatePayloa throws TemplateMessageError, IOException { try { final List messageResponses = - send(payload, List.class, MessageError.class); + send(payload, new MessageResponseListGenericType(), MessageError.class); return messageResponses; } catch (MessageError e) { LOGGER.warn("Got MessageError with code {}, name {} and message {} when sending message!", diff --git a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java index ec966ee..490cc60 100644 --- a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java @@ -27,6 +27,7 @@ import io.sprucehill.mandrill.data.response.AnyListAddResponse; import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; import io.sprucehill.mandrill.data.response.AnyListListResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponseGenericType; /** * @author Michael Duergner @@ -86,7 +87,7 @@ public List list(final RejectsListPayload payload) throws MessageError, IOException { try { final List messageResponses = - send(payload, List.class, MessageError.class); + send(payload, new AnyListListResponseGenericType(), MessageError.class); return messageResponses; } catch (final MessageError e) { LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing rejects!", diff --git a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java index 6f49a92..dddeced 100644 --- a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java @@ -25,6 +25,7 @@ import io.sprucehill.mandrill.data.request.*; import io.sprucehill.mandrill.data.response.TemplateRenderResponse; import io.sprucehill.mandrill.data.response.TemplateResponse; +import io.sprucehill.mandrill.data.response.TemplateResponseGenericType; /** * @author Michael Duergner @@ -181,7 +182,7 @@ public List list(final TemplateListPayload payload) throws RenderTemplateError, IOException { try { final List templateResponse = - send(payload, List.class, RenderTemplateError.class); + send(payload, new TemplateResponseGenericType(), RenderTemplateError.class); return templateResponse; } catch (final MessageError e) { LOGGER.warn("Got RenderTemplateError with code {}, name {} and message {} when " + diff --git a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java index f12d1c4..e844d5a 100644 --- a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java @@ -28,6 +28,7 @@ import io.sprucehill.mandrill.data.response.AnyListAddResponse; import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; import io.sprucehill.mandrill.data.response.AnyListListResponse; +import io.sprucehill.mandrill.data.response.AnyListListResponseGenericType; /** * @author Michael Duergner @@ -86,7 +87,7 @@ public List list(final WhitelistsListPayload payload) throws MessageError, IOException { try { final List messageResponses = - send(payload, List.class, MessageError.class); + send(payload, new AnyListListResponseGenericType(), MessageError.class); return messageResponses; } catch (final MessageError e) { LOGGER.warn("Got MessageError with code {}, name {} and message {} when listing whitelists!", From ecdeae571eec6412498248bcb45c78355cfd66a2 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Wed, 17 Dec 2014 12:42:05 +0100 Subject: [PATCH 21/25] Fix pom.xml --- pom.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pom.xml b/pom.xml index 522a171..9488567 100644 --- a/pom.xml +++ b/pom.xml @@ -193,14 +193,11 @@ UTF-8 -<<<<<<< HEAD 3.1 2.9.1 2.0.2 2.3 0.6-groovy-1.8 -======= ->>>>>>> eee42a6c19c1488c234792c79963384ebb5d2150 4.2.1 2.11 1.7.7 From dbd80492b8766def7fb7f255c09125c63d9da36c Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Wed, 17 Dec 2014 12:49:33 +0100 Subject: [PATCH 22/25] Use variables instead of values in pom.xml --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 9488567..76041c2 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.1 + ${version.maven-compiler} 1.7 1.7 @@ -73,7 +73,7 @@ org.apache.maven.plugins maven-source-plugin - 2.3 + ${version.maven-source} attach-sources From fb4d81604395bec46e57a18fa87da18603adf141 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Sat, 20 Dec 2014 18:04:03 +0100 Subject: [PATCH 23/25] Add ServiceFactory that is responsible for storing configuration values (key, baseUrl) and a shared jersey client. Services created by the factory are automatically assigned those variables. The jersey client is shared to support connection pooling. Add myself to license headers of changed files --- .../data/request/AbstractPayload.java | 2 +- .../data/request/AbstractRejectsPayload.java | 4 +- .../request/AbstractWhitelistsPayload.java | 4 +- .../request/IWithFromEmailPayloadBuilder.java | 4 +- .../request/IWithFromNamePayloadBuilder.java | 4 +- .../data/request/IWithFromPayloadBuilder.java | 4 +- .../request/IWithLabelPayloadBuilder.java | 6 +- .../data/request/IWithNamePayloadBuilder.java | 3 +- .../mandrill/data/request/LabelPayload.java | 6 +- .../data/request/MessageSendPayload.java | 3 +- .../data/request/RejectsAddPayload.java | 4 +- .../data/request/RejectsDeletePayload.java | 4 +- .../data/request/RejectsListPayload.java | 4 +- .../request/TemplateAddOrUpdatePayload.java | 4 +- .../data/request/TemplateAddPayload.java | 8 +- .../data/request/TemplateDeletePayload.java | 4 +- .../data/request/TemplateInfoPayload.java | 4 +- .../data/request/TemplateListPayload.java | 4 +- .../data/request/TemplatePayload.java | 11 +- .../data/request/TemplatePublishPayload.java | 4 +- .../data/request/TemplateRenderPayload.java | 5 +- .../data/request/TemplateUpdatePayload.java | 4 +- .../data/request/WhitelistsAddPayload.java | 4 +- .../data/request/WhitelistsDeletePayload.java | 4 +- .../data/request/WhitelistsListPayload.java | 4 +- .../data/response/AnyListAddResponse.java | 5 +- .../data/response/AnyListDeleteResponse.java | 4 +- .../data/response/AnyListListResponse.java | 5 +- .../AnyListListResponseGenericType.java | 19 +++ .../data/response/MessageResponse.java | 3 +- .../MessageResponseListGenericType.java | 19 +++ .../mandrill/data/response/Response.java | 2 +- .../data/response/TemplateRenderResponse.java | 3 +- .../data/response/TemplateResponse.java | 4 +- .../response/TemplateResponseGenericType.java | 19 +++ .../mandrill/service/AbstractService.java | 60 ++++----- .../mandrill/service/IMessageService.java | 17 ++- .../mandrill/service/IRejectsService.java | 4 +- .../mandrill/service/ITemplateService.java | 3 +- .../mandrill/service/IWhitelistsService.java | 4 +- .../mandrill/service/MessageService.java | 11 +- .../mandrill/service/RejectsService.java | 4 +- .../mandrill/service/ServiceFactory.java | 117 ++++++++++++++++++ .../mandrill/service/TemplateService.java | 3 +- .../mandrill/service/WhitelistsService.java | 5 +- .../io/sprucehill/mandrill/AbstractTest.java | 27 +++- .../mandrill/service/MessageServiceTest.java | 43 ++++++- .../mandrill/service/RejectsServiceTest.java | 25 +++- .../mandrill/service/TemplateServiceTest.java | 42 +++++-- .../service/WhitelistsServiceTest.java | 29 ++++- 50 files changed, 432 insertions(+), 157 deletions(-) create mode 100644 src/main/java/io/sprucehill/mandrill/service/ServiceFactory.java diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java index 15d0a1e..239bcda 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java index ed5ef23..ba24e72 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractRejectsPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public abstract class AbstractRejectsPayload extends AbstractPayload { diff --git a/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java index 0644084..2c763f8 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/AbstractWhitelistsPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public abstract class AbstractWhitelistsPayload extends AbstractPayload { diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java index 22dd999..b8dda6d 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromEmailPayloadBuilder.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package io.sprucehill.mandrill.data.request; /** - * + * @author Stephan Wienczny * @param */ public interface IWithFromEmailPayloadBuilder { diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java index 9758e3f..f02a14a 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromNamePayloadBuilder.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package io.sprucehill.mandrill.data.request; /** - * + * @author Stephan Wienczny * @param */ public interface IWithFromNamePayloadBuilder { diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java index a0a3f3c..18fce5d 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithFromPayloadBuilder.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package io.sprucehill.mandrill.data.request; /** - * + * @author Stephan Wienczny * @param */ public interface IWithFromPayloadBuilder extends IWithFromEmailPayloadBuilder, diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java index 9041f56..6a3d497 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithLabelPayloadBuilder.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,8 +16,8 @@ package io.sprucehill.mandrill.data.request; -/** - * +/* + * @author Stephan Wienczny * @param */ public interface IWithLabelPayloadBuilder { diff --git a/src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java b/src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java index 41e83d3..b0ad3da 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/IWithNamePayloadBuilder.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package io.sprucehill.mandrill.data.request; /** + * @author Stephan Wienczny * * @param */ diff --git a/src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java index c342772..706c4bb 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/LabelPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,10 +18,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; -import io.sprucehill.mandrill.data.AbstractJsonBase; - /** - * + * @author Stephan Wienczny */ public abstract class LabelPayload extends AbstractPayload { @JsonProperty(value = "label") diff --git a/src/main/java/io/sprucehill/mandrill/data/request/MessageSendPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/MessageSendPayload.java index 23a0ddb..67809fb 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/MessageSendPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/MessageSendPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ /** * @author Michael Duergner + * @author Stephan Wienczny */ public class MessageSendPayload extends AbstractPayload { diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java index 85f5fdd..25a802e 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsAddPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public class RejectsAddPayload extends AbstractRejectsPayload { diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java index 6dbac72..f7feb4f 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsDeletePayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package io.sprucehill.mandrill.data.request; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public class RejectsDeletePayload extends AbstractRejectsPayload { diff --git a/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java index 57ffa99..4bc27b2 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/RejectsListPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public class RejectsListPayload extends AbstractRejectsPayload { diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java index e315363..ad1a072 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddOrUpdatePayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * + * @author Stephan Wienczny */ public abstract class TemplateAddOrUpdatePayload extends TemplatePayload { diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java index fb797f1..18ba926 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateAddPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,12 +16,8 @@ package io.sprucehill.mandrill.data.request; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonProperty; - /** - * + * @author Stephan Wienczny */ public class TemplateAddPayload extends TemplateAddOrUpdatePayload { @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java index e93dd71..311627e 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateDeletePayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package io.sprucehill.mandrill.data.request; /** - * + * @author Stephan Wienczny */ public class TemplateDeletePayload extends TemplatePayload { @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java index f14997a..3f962e9 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateInfoPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package io.sprucehill.mandrill.data.request; /** - * + * @author Stephan Wienczny */ public class TemplateInfoPayload extends TemplatePayload { @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java index 9949993..34b9724 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateListPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package io.sprucehill.mandrill.data.request; /** - * + * @author Stephan Wienczny */ public class TemplateListPayload extends LabelPayload { @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java index 156eb9d..cf7fe78 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,7 @@ limitations under the License. */ + package io.sprucehill.mandrill.data.request; import com.fasterxml.jackson.annotation.JsonProperty; @@ -21,7 +22,7 @@ import io.sprucehill.mandrill.data.AbstractJsonBase; /** - * + * @author Stephan Wienczny */ public abstract class TemplatePayload extends AbstractPayload { @@ -41,7 +42,7 @@ public static final class Variable extends AbstractJsonBase { protected Variable() { } - protected Variable(String name, String content) { + protected Variable(final String name, final String content) { this.name = name; this.content = content; } @@ -52,7 +53,7 @@ public int hashCode() { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (null == o) { return false; } @@ -70,7 +71,7 @@ protected Init(U object) { super(object); } - public T withName(String name) { + public T withName(final String name) { object.name = name; return self(); } diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java index 5c3021b..12d797e 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplatePublishPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package io.sprucehill.mandrill.data.request; /** - * + * @author Stephan Wienczny */ public class TemplatePublishPayload extends TemplatePayload { @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateRenderPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateRenderPayload.java index 55925d5..fdaf36d 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplateRenderPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateRenderPayload.java @@ -26,6 +26,7 @@ /** * @author Michael Duergner + * @author Stephan Wienczny */ public class TemplateRenderPayload extends AbstractPayload { @@ -77,7 +78,9 @@ public boolean equals(Object o) { } } - protected static abstract class Init, U extends TemplateRenderPayload> extends AbstractPayload.Init implements IWithTemplateNamePayloadBuilder, IWithTemplateContentPayloadBuilder, IWithMergeVarPayloadBuilder { + protected static abstract class Init, U extends TemplateRenderPayload> + extends AbstractPayload.Init implements IWithTemplateNamePayloadBuilder, + IWithTemplateContentPayloadBuilder, IWithMergeVarPayloadBuilder { protected Init(U object) { super(object); diff --git a/src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java index 165f554..397621e 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/TemplateUpdatePayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package io.sprucehill.mandrill.data.request; /** - * + * @author Stephan Wienczny */ public class TemplateUpdatePayload extends TemplateAddOrUpdatePayload { @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java index 46b10ab..ed39289 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsAddPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public class WhitelistsAddPayload extends AbstractWhitelistsPayload { @JsonProperty diff --git a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java index b660ec1..0bddfa0 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsDeletePayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package io.sprucehill.mandrill.data.request; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public class WhitelistsDeletePayload extends AbstractWhitelistsPayload { @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java index ada78e1..2d8b7ad 100644 --- a/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java +++ b/src/main/java/io/sprucehill/mandrill/data/request/WhitelistsListPayload.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package io.sprucehill.mandrill.data.request; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public class WhitelistsListPayload extends AbstractWhitelistsPayload { @Override diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java index dda2185..38a93e8 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListAddResponse.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ import jersey.repackaged.com.google.common.base.Objects; /** - * + * @author Stephan Wienczny */ public class AnyListAddResponse extends Response { @@ -42,5 +42,4 @@ public boolean isAdded() { public String toString() { return Objects.toStringHelper(this).add("email", email).add("added", added).toString(); } - } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java index 1cc396d..def69c2 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListDeleteResponse.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ import jersey.repackaged.com.google.common.base.Objects; /** - * + * @author Stephan Wienczny */ public class AnyListDeleteResponse extends Response { diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java index ef52156..ea4d558 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponse.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,13 +17,12 @@ package io.sprucehill.mandrill.data.response; import java.util.Date; -import java.util.Objects; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; /** - * + * @author Stephan Wienczny */ public class AnyListListResponse extends Response { diff --git a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java index 781715b..99423e3 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/AnyListListResponseGenericType.java @@ -1,8 +1,27 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny + +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 io.sprucehill.mandrill.data.response; import java.util.List; import javax.ws.rs.core.GenericType; +/** + * @author Stephan Wienczny + */ public class AnyListListResponseGenericType extends GenericType> { } diff --git a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java index fee7d1c..bb37388 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponse.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ /** * @author Michael Duergner + * @author Stephan Wienczny */ public class MessageResponse extends Response { diff --git a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java index a9c12a3..16bb663 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/MessageResponseListGenericType.java @@ -1,8 +1,27 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny + +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 io.sprucehill.mandrill.data.response; import java.util.List; import javax.ws.rs.core.GenericType; +/** + * @author Stephan Wienczny + */ public class MessageResponseListGenericType extends GenericType> { } diff --git a/src/main/java/io/sprucehill/mandrill/data/response/Response.java b/src/main/java/io/sprucehill/mandrill/data/response/Response.java index e9b51bc..53685b5 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/Response.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/Response.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/main/java/io/sprucehill/mandrill/data/response/TemplateRenderResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/TemplateRenderResponse.java index f1bb37e..167f116 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/TemplateRenderResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/TemplateRenderResponse.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ /** * @author Michael Duergner + * @author Stephan Wienczny */ public class TemplateRenderResponse extends Response { diff --git a/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java index 7d29655..79d55cc 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponse.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ import jersey.repackaged.com.google.common.base.Objects; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public class TemplateResponse extends Response { diff --git a/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java index e06af4b..5ca2b09 100644 --- a/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java +++ b/src/main/java/io/sprucehill/mandrill/data/response/TemplateResponseGenericType.java @@ -1,8 +1,27 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny + +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 io.sprucehill.mandrill.data.response; import java.util.List; import javax.ws.rs.core.GenericType; +/** + * @author Stephan Wienczny + */ public class TemplateResponseGenericType extends GenericType> { } diff --git a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java index cb9a45b..2b196ca 100644 --- a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java +++ b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,13 +18,11 @@ import java.io.IOException; -import javax.annotation.PostConstruct; import javax.ws.rs.client.Entity; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.Response; import org.glassfish.jersey.client.JerseyClient; -import org.glassfish.jersey.client.JerseyClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,74 +30,62 @@ /** * @author Michael Duergner + * @author Stephan Wienczny */ public abstract class AbstractService { protected final Logger LOGGER = LoggerFactory.getLogger(getClass()); - private static String baseUrl = "https://mandrillapp.com/api/1.0"; + private String baseUrl = "https://mandrillapp.com/api/1.0"; - private static JerseyClient jerseyClient; + private JerseyClient jerseyClient; - private static String key; + private String key; /** - * @param baseUrl + * @param baseUrl set by {@link io.sprucehill.mandrill.service.ServiceFactory} or by user */ - public static void setBaseUrl(final String baseUrl) { - AbstractService.baseUrl = baseUrl; + public void setBaseUrl(final String baseUrl) { + this.baseUrl = baseUrl; } /** - * - * @return + * @return base url currently set */ - public static String getBaseUrl() { + public String getBaseUrl() { return baseUrl; } /** - * @param jerseyClient + * @param jerseyClient set by {@link io.sprucehill.mandrill.service.ServiceFactory} or by user */ - public static void setClient(final JerseyClient jerseyClient) { - AbstractService.jerseyClient = jerseyClient; + public void setClient(final JerseyClient jerseyClient) { + this.jerseyClient = jerseyClient; } /** * - * @return + * @return {@link org.glassfish.jersey.client.JerseyClient} currently set */ - public static JerseyClient getJerseyClient() { - if (jerseyClient == null) { - synchronized (AbstractService.class) { - if (jerseyClient == null) { - jerseyClient = JerseyClientBuilder.createClient(); - } - } - } + public JerseyClient getJerseyClient() { return jerseyClient; } /** - * @param key + * @param key set by {@link io.sprucehill.mandrill.service.ServiceFactory} or by user */ - public static void setKey(final String key) { - AbstractService.key = key; + public void setKey(final String key) { + this.key = key; } - public static String getKey() { + /** + * + * @return current key for api + */ + public String getKey() { return key; } - @PostConstruct - public final void postConstruct() { - onPostConstruct(); - } - - void onPostConstruct() { - getJerseyClient(); - } - , U extends AbstractPayload> void integrateDefaultValues(AbstractPayload.Init payloadBuilder) { if (!payloadBuilder.hasKey() && null != key && !key.isEmpty()) { payloadBuilder.withKey(key); diff --git a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java index 4d799f6..386fb79 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IMessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IMessageService.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,11 +28,11 @@ /** * @author Michael Duergner + * @author Stephan Wienczny */ public interface IMessageService { /** - * @param payload * @return * @throws MessageError * @throws IOException @@ -41,7 +41,6 @@ List sendMessage(final MessageSendPayload payload) throws MessageError, IOException; /** - * @param payloadBuilder * @return * @throws PreBuildError * @throws MessageError @@ -51,7 +50,6 @@ List sendMessage(final MessageSendPayload.Builder payloadBuilde throws PreBuildError, MessageError, IOException; /** - * @param payload * @return * @throws TemplateMessageError * @throws IOException @@ -60,7 +58,6 @@ List sendTemplateMessage(final MessageSendTemplatePayload paylo throws TemplateMessageError, IOException; /** - * @param payloadBuilder * @return * @throws PreBuildError * @throws TemplateMessageError @@ -68,4 +65,14 @@ List sendTemplateMessage(final MessageSendTemplatePayload paylo */ List sendTemplateMessage(final MessageSendTemplatePayload.Builder payloadBuilder) throws PreBuildError, TemplateMessageError, IOException; + + /** + * @param fromEmail email set if missing from builder + */ + void setFromEmail(final String fromEmail); + + /** + * @param fromName name set if missing from builder + */ + void setFromName(final String fromName); } \ No newline at end of file diff --git a/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java b/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java index 04f186b..911c1b9 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IRejectsService.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,7 +29,7 @@ import io.sprucehill.mandrill.data.response.AnyListListResponse; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public interface IRejectsService { /** diff --git a/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java b/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java index 138b3f0..2668deb 100644 --- a/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/ITemplateService.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ /** * @author Michael Duergner + * @author Stephan Wienczny */ public interface ITemplateService { diff --git a/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java index da20928..d9a9937 100644 --- a/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/IWhitelistsService.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,7 +29,7 @@ import io.sprucehill.mandrill.data.response.AnyListListResponse; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public interface IWhitelistsService { /** diff --git a/src/main/java/io/sprucehill/mandrill/service/MessageService.java b/src/main/java/io/sprucehill/mandrill/service/MessageService.java index f89c89b..0291d79 100644 --- a/src/main/java/io/sprucehill/mandrill/service/MessageService.java +++ b/src/main/java/io/sprucehill/mandrill/service/MessageService.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,14 +13,11 @@ See the License for the specific language governing permissions and limitations under the License. */ - package io.sprucehill.mandrill.service; import java.io.IOException; import java.util.List; -import javax.ws.rs.core.GenericType; - import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; import io.sprucehill.mandrill.data.error.TemplateMessageError; @@ -31,6 +28,7 @@ /** * @author Michael Duergner + * @author Stephan Wienczny */ public class MessageService extends AbstractService implements IMessageService { @@ -47,7 +45,8 @@ public void setFromName(final String fromName) { } @Override - public List sendMessage(final MessageSendPayload payload) throws MessageError, IOException { + public List sendMessage(final MessageSendPayload payload) + throws MessageError, IOException { try { final List messageResponses = send(payload, new MessageResponseListGenericType(), MessageError.class); @@ -96,6 +95,8 @@ public List sendTemplateMessage( , U extends MessageSendPayload> void integrateDefaultValues( final MessageSendPayload.Init payloadBuilder) { super.integrateDefaultValues(payloadBuilder); + + // Allow default from email and name set on if (!payloadBuilder.hasFromEmail() && null != fromEmail && !fromEmail.isEmpty()) { payloadBuilder.withFromEmail(fromEmail); } diff --git a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java index 490cc60..3a8d8aa 100644 --- a/src/main/java/io/sprucehill/mandrill/service/RejectsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/RejectsService.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,7 +30,7 @@ import io.sprucehill.mandrill.data.response.AnyListListResponseGenericType; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public class RejectsService extends AbstractService implements IRejectsService { diff --git a/src/main/java/io/sprucehill/mandrill/service/ServiceFactory.java b/src/main/java/io/sprucehill/mandrill/service/ServiceFactory.java new file mode 100644 index 0000000..1524a19 --- /dev/null +++ b/src/main/java/io/sprucehill/mandrill/service/ServiceFactory.java @@ -0,0 +1,117 @@ +/* +Copyright 2014 SpruceHill.io GmbH 2014 Stephan Wienczny + +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 io.sprucehill.mandrill.service; + +import org.glassfish.jersey.client.JerseyClient; +import org.glassfish.jersey.client.JerseyClientBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jersey.repackaged.com.google.common.base.Objects; + +/** + * @author Stephan Wienczny + */ +public class ServiceFactory { + protected final Logger LOGGER = LoggerFactory.getLogger(getClass()); + + private String baseUrl = "https://mandrillapp.com/api/1.0"; + + private JerseyClient jerseyClient; + + private String key; + + public ServiceFactory() { + } + + public ServiceFactory(final String key) { + this.key = key; + } + + public ServiceFactory(final String key, final String baseUrl) { + this(key); + this.baseUrl = baseUrl; + } + + public ServiceFactory(final String key, final String baseUrl, final JerseyClient jerseyClient) { + this(key, baseUrl); + this.jerseyClient = jerseyClient; + } + + public String getBaseUrl() { + return baseUrl; + } + + public void setBaseUrl(final String baseUrl) { + this.baseUrl = baseUrl; + } + + public JerseyClient getJerseyClient() { + if (jerseyClient == null) { + synchronized (ServiceFactory.class) { + if (jerseyClient == null) { + jerseyClient = JerseyClientBuilder.createClient(); + } + } + } + return jerseyClient; + } + + public void setJerseyClient(final JerseyClient jerseyClient) { + this.jerseyClient = jerseyClient; + } + + public String getKey() { + return key; + } + + public void setKey(final String key) { + this.key = key; + } + + public IMessageService createMessageService() { + return assignConfiguration(new MessageService()); + } + + public IRejectsService createRejectsService() { + return assignConfiguration(new RejectsService()); + } + + public ITemplateService createTemplateService() { + return assignConfiguration(new TemplateService()); + } + + public IWhitelistsService createWhitelistsService() { + return assignConfiguration(new WhitelistsService()); + } + + public S assignConfiguration(S service) { + service.setBaseUrl(getBaseUrl()); + service.setKey(getKey()); + service.setClient(getJerseyClient()); + return service; + } + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("jerseyClient", jerseyClient) + .add("baseUrl", baseUrl) + .add("key", key) + .toString(); + } +} diff --git a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java index dddeced..f3f96e3 100644 --- a/src/main/java/io/sprucehill/mandrill/service/TemplateService.java +++ b/src/main/java/io/sprucehill/mandrill/service/TemplateService.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ /** * @author Michael Duergner + * @author Stephan Wienczny */ public class TemplateService extends AbstractService implements ITemplateService { diff --git a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java index e844d5a..4044a27 100644 --- a/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java +++ b/src/main/java/io/sprucehill/mandrill/service/WhitelistsService.java @@ -1,5 +1,5 @@ /* -Copyright 2013-2014 SpruceHill.io GmbH +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,7 +21,6 @@ import io.sprucehill.mandrill.data.error.MessageError; import io.sprucehill.mandrill.data.error.PreBuildError; -import io.sprucehill.mandrill.data.request.MessageSendPayload; import io.sprucehill.mandrill.data.request.WhitelistsAddPayload; import io.sprucehill.mandrill.data.request.WhitelistsDeletePayload; import io.sprucehill.mandrill.data.request.WhitelistsListPayload; @@ -31,7 +30,7 @@ import io.sprucehill.mandrill.data.response.AnyListListResponseGenericType; /** - * @author Michael Duergner + * @author Stephan Wienczny */ public class WhitelistsService extends AbstractService implements IWhitelistsService { diff --git a/src/test/java/io/sprucehill/mandrill/AbstractTest.java b/src/test/java/io/sprucehill/mandrill/AbstractTest.java index 4bb4f6f..51b82fa 100644 --- a/src/test/java/io/sprucehill/mandrill/AbstractTest.java +++ b/src/test/java/io/sprucehill/mandrill/AbstractTest.java @@ -1,19 +1,37 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny + +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 io.sprucehill.mandrill; import org.junit.Before; -import io.sprucehill.mandrill.service.AbstractService; +import io.sprucehill.mandrill.service.ServiceFactory; /** * Abstract test providing apiKey. + * + * @author Stephan Wienczny */ public abstract class AbstractTest { - protected String apiKey = null; + protected ServiceFactory serviceFactory = null; @Before public void init() { // 1. try - apiKey = System.getenv("mandrill.apikey"); + String apiKey = System.getenv("mandrill.apikey"); // 2. try if (apiKey == null || apiKey.isEmpty()) { @@ -34,6 +52,7 @@ public void init() { if (apiKey == null) { throw new IllegalArgumentException("No apiKey in environment"); } - AbstractService.setKey(apiKey); + + serviceFactory = new ServiceFactory(apiKey); } } diff --git a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java index c0e682b..b352c7d 100644 --- a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java @@ -1,3 +1,19 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny + +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 io.sprucehill.mandrill.service; import java.io.IOException; @@ -8,9 +24,13 @@ import io.sprucehill.mandrill.AbstractTest; import io.sprucehill.mandrill.data.error.PreBuildError; -import io.sprucehill.mandrill.data.request.*; +import io.sprucehill.mandrill.data.request.MessageSendPayload; +import io.sprucehill.mandrill.data.request.MessageSendTemplatePayload; import io.sprucehill.mandrill.data.response.MessageResponse; +/** + * @author Stephan Wienczny + */ public class MessageServiceTest extends AbstractTest { private static final String EMAIL = "test@test.com"; private static final String TEMPLATE = "testtemplate"; @@ -19,7 +39,7 @@ public class MessageServiceTest extends AbstractTest { @Test public void send() throws PreBuildError, IOException { - final MessageService messageService = new MessageService(); + final IMessageService messageService = serviceFactory.createMessageService(); final List response = messageService.sendMessage( new MessageSendPayload.Builder().withTo(EMAIL).withSubject("Mandrill Test") @@ -32,7 +52,21 @@ public void send() throws PreBuildError, IOException { @Test public void sendWithFrom() throws PreBuildError, IOException { - final MessageService messageService = new MessageService(); + final IMessageService messageService = new MessageService(); + + final List response = messageService.sendMessage( + new MessageSendPayload.Builder().withTo(EMAIL).withFromEmail(FROM_EMAIL) + .withFromName(FROM_NAME).withSubject("Mandrill Test") + .withText("This is an automatic test for emails send using Mandrill")); + + Assert.assertFalse(response.isEmpty()); + //Assert.assertEquals(EMAIL, response.getEmail()); + //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); + } + + @Test + public void sendWithFromUsingDefaults() throws PreBuildError, IOException { + final IMessageService messageService = new MessageService(); messageService.setFromEmail(FROM_EMAIL); messageService.setFromName(FROM_NAME); @@ -45,9 +79,10 @@ public void sendWithFrom() throws PreBuildError, IOException { //Assert.assertEquals(MessageResponse.Status.SENT, response.getStatus()); } + @Test public void sendTemplate() throws PreBuildError, IOException { - final MessageService messageService = new MessageService(); + final IMessageService messageService = serviceFactory.createMessageService(); final List response = messageService.sendTemplateMessage( new MessageSendTemplatePayload.Builder().withTo(EMAIL) diff --git a/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java index 6162583..b8a1911 100644 --- a/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java @@ -1,3 +1,19 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny + +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 io.sprucehill.mandrill.service; import java.io.IOException; @@ -15,12 +31,15 @@ import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; import io.sprucehill.mandrill.data.response.AnyListListResponse; +/** + * @author Stephan Wienczny + */ public class RejectsServiceTest extends AbstractTest { private static final String EMAIL = "reject@test.com"; @Test public void add() throws PreBuildError, IOException { - final RejectsService rejectsService = new RejectsService(); + final IRejectsService rejectsService = serviceFactory.createRejectsService(); final AnyListAddResponse response = rejectsService.add( new RejectsAddPayload.Builder().withEmail(EMAIL)); @@ -31,7 +50,7 @@ public void add() throws PreBuildError, IOException { @Test public void delete() throws PreBuildError, IOException { - final RejectsService rejectsService = new RejectsService(); + final IRejectsService rejectsService = serviceFactory.createRejectsService(); final AnyListDeleteResponse response = rejectsService.delete( new RejectsDeletePayload.Builder().withEmail(EMAIL)); @@ -42,7 +61,7 @@ public void delete() throws PreBuildError, IOException { @Test public void list() throws PreBuildError, IOException { - final RejectsService rejectsService = new RejectsService(); + final IRejectsService rejectsService = serviceFactory.createRejectsService(); rejectsService.add(new RejectsAddPayload.Builder().withEmail(EMAIL)); diff --git a/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java index 9fd9b67..c336daa 100644 --- a/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java @@ -1,11 +1,24 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny + +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 io.sprucehill.mandrill.service; import java.io.IOException; -import java.util.Date; -import java.util.List; import org.junit.Assert; -import org.junit.Ignore; import org.junit.Test; import io.sprucehill.mandrill.AbstractTest; @@ -17,15 +30,18 @@ import io.sprucehill.mandrill.data.request.TemplateUpdatePayload; import io.sprucehill.mandrill.data.response.TemplateResponse; +/** + * @author Stephan Wienczny + */ public class TemplateServiceTest extends AbstractTest { private static final String TEMPLATE = "testtemplate" + System.currentTimeMillis(); @Test public void add() throws PreBuildError, IOException { - final TemplateService messageService = new TemplateService(); + final ITemplateService templateService = serviceFactory.createTemplateService(); try { - final TemplateResponse response = messageService.add( + final TemplateResponse response = templateService.add( new TemplateAddPayload.Builder().withName(TEMPLATE)); Assert.assertEquals(TEMPLATE, response.getName()); @@ -37,16 +53,16 @@ public void add() throws PreBuildError, IOException { @Test public void update() throws PreBuildError, IOException { - final TemplateService messageService = new TemplateService(); + final ITemplateService templateService = serviceFactory.createTemplateService(); try { try { - messageService.add(new TemplateAddPayload.Builder().withName(TEMPLATE)); + templateService.add(new TemplateAddPayload.Builder().withName(TEMPLATE)); } catch (final RenderTemplateError e) { // Ignore } - final TemplateResponse response = messageService.update( + final TemplateResponse response = templateService.update( new TemplateUpdatePayload.Builder().withName(TEMPLATE)); Assert.assertEquals(TEMPLATE, response.getName()); @@ -58,16 +74,16 @@ public void update() throws PreBuildError, IOException { @Test public void render() throws PreBuildError, IOException { - final TemplateService messageService = new TemplateService(); + final ITemplateService templateService = serviceFactory.createTemplateService(); try { try { - messageService.add(new TemplateAddPayload.Builder().withName(TEMPLATE)); + templateService.add(new TemplateAddPayload.Builder().withName(TEMPLATE)); } catch (final RenderTemplateError e) { // Ignore } - final String response = messageService.render( + final String response = templateService.render( new TemplateRenderPayload.Builder().withTemplateName(TEMPLATE)); } finally { delete(); @@ -79,10 +95,10 @@ public void render() throws PreBuildError, IOException { } public void delete() throws PreBuildError, IOException { - final TemplateService messageService = new TemplateService(); + final ITemplateService templateService = serviceFactory.createTemplateService(); try { - final TemplateResponse response = messageService.delete( + final TemplateResponse response = templateService.delete( new TemplateDeletePayload.Builder().withName(TEMPLATE)); } catch (RenderTemplateError ex) { // Ignore diff --git a/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java index 88a540e..0698bc8 100644 --- a/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java @@ -1,8 +1,25 @@ +/* +Copyright 2013-2014 SpruceHill.io GmbH 2014 Stephan Wienczny + +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 io.sprucehill.mandrill.service; import java.io.IOException; import java.util.List; +import org.junit.Assert; import org.junit.Test; import io.sprucehill.mandrill.AbstractTest; @@ -14,14 +31,15 @@ import io.sprucehill.mandrill.data.response.AnyListDeleteResponse; import io.sprucehill.mandrill.data.response.AnyListListResponse; -import org.junit.Assert; - +/** + * @author Stephan Wienczny + */ public class WhitelistsServiceTest extends AbstractTest { private static final String EMAIL = "whitelist@test.com"; @Test public void add() throws PreBuildError, IOException { - final WhitelistsService whitelistsService = new WhitelistsService(); + final IWhitelistsService whitelistsService = serviceFactory.createWhitelistsService(); final AnyListAddResponse response = whitelistsService.add( new WhitelistsAddPayload.Builder().withEmail(EMAIL)); @@ -32,8 +50,7 @@ public void add() throws PreBuildError, IOException { @Test public void delete() throws PreBuildError, IOException { - final WhitelistsService whitelistsService = new WhitelistsService(); - + final IWhitelistsService whitelistsService = serviceFactory.createWhitelistsService(); final AnyListDeleteResponse response = whitelistsService.delete( new WhitelistsDeletePayload.Builder().withEmail(EMAIL)); @@ -44,7 +61,7 @@ public void delete() throws PreBuildError, IOException { @Test public void list() throws PreBuildError, IOException { - final WhitelistsService whitelistsService = new WhitelistsService(); + final IWhitelistsService whitelistsService = serviceFactory.createWhitelistsService(); whitelistsService.add(new WhitelistsAddPayload.Builder().withEmail(EMAIL)); From c04f6abb765a693876ca3c61f3c280ec9841b3a4 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Sat, 20 Dec 2014 18:10:19 +0100 Subject: [PATCH 24/25] Fix failing tests --- .../io/sprucehill/mandrill/service/MessageServiceTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java index b352c7d..7ab5480 100644 --- a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java @@ -52,7 +52,7 @@ public void send() throws PreBuildError, IOException { @Test public void sendWithFrom() throws PreBuildError, IOException { - final IMessageService messageService = new MessageService(); + final IMessageService messageService = serviceFactory.createMessageService(); final List response = messageService.sendMessage( new MessageSendPayload.Builder().withTo(EMAIL).withFromEmail(FROM_EMAIL) @@ -66,7 +66,7 @@ public void sendWithFrom() throws PreBuildError, IOException { @Test public void sendWithFromUsingDefaults() throws PreBuildError, IOException { - final IMessageService messageService = new MessageService(); + final IMessageService messageService = serviceFactory.createMessageService(); messageService.setFromEmail(FROM_EMAIL); messageService.setFromName(FROM_NAME); From 19a8a62a54ccd42c4dd55dc65615eda848e150c9 Mon Sep 17 00:00:00 2001 From: Stephan Wienczny Date: Sat, 20 Dec 2014 19:17:08 +0100 Subject: [PATCH 25/25] Rename ServiceFactory to MandrillServiceFactory to be less ambiguous and more descriptive --- .../mandrill/service/AbstractService.java | 6 +++--- ...viceFactory.java => MandrillServiceFactory.java} | 13 +++++++------ .../java/io/sprucehill/mandrill/AbstractTest.java | 6 +++--- .../mandrill/service/MessageServiceTest.java | 8 ++++---- .../mandrill/service/RejectsServiceTest.java | 6 +++--- .../mandrill/service/TemplateServiceTest.java | 8 ++++---- .../mandrill/service/WhitelistsServiceTest.java | 6 +++--- 7 files changed, 27 insertions(+), 26 deletions(-) rename src/main/java/io/sprucehill/mandrill/service/{ServiceFactory.java => MandrillServiceFactory.java} (87%) diff --git a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java index 2b196ca..f95ab53 100644 --- a/src/main/java/io/sprucehill/mandrill/service/AbstractService.java +++ b/src/main/java/io/sprucehill/mandrill/service/AbstractService.java @@ -43,7 +43,7 @@ public abstract class AbstractService { private String key; /** - * @param baseUrl set by {@link io.sprucehill.mandrill.service.ServiceFactory} or by user + * @param baseUrl set by {@link MandrillServiceFactory} or by user */ public void setBaseUrl(final String baseUrl) { this.baseUrl = baseUrl; @@ -57,7 +57,7 @@ public String getBaseUrl() { } /** - * @param jerseyClient set by {@link io.sprucehill.mandrill.service.ServiceFactory} or by user + * @param jerseyClient set by {@link MandrillServiceFactory} or by user */ public void setClient(final JerseyClient jerseyClient) { this.jerseyClient = jerseyClient; @@ -72,7 +72,7 @@ public JerseyClient getJerseyClient() { } /** - * @param key set by {@link io.sprucehill.mandrill.service.ServiceFactory} or by user + * @param key set by {@link MandrillServiceFactory} or by user */ public void setKey(final String key) { this.key = key; diff --git a/src/main/java/io/sprucehill/mandrill/service/ServiceFactory.java b/src/main/java/io/sprucehill/mandrill/service/MandrillServiceFactory.java similarity index 87% rename from src/main/java/io/sprucehill/mandrill/service/ServiceFactory.java rename to src/main/java/io/sprucehill/mandrill/service/MandrillServiceFactory.java index 1524a19..426164f 100644 --- a/src/main/java/io/sprucehill/mandrill/service/ServiceFactory.java +++ b/src/main/java/io/sprucehill/mandrill/service/MandrillServiceFactory.java @@ -26,7 +26,7 @@ /** * @author Stephan Wienczny */ -public class ServiceFactory { +public class MandrillServiceFactory { protected final Logger LOGGER = LoggerFactory.getLogger(getClass()); private String baseUrl = "https://mandrillapp.com/api/1.0"; @@ -35,19 +35,20 @@ public class ServiceFactory { private String key; - public ServiceFactory() { + public MandrillServiceFactory() { } - public ServiceFactory(final String key) { + public MandrillServiceFactory(final String key) { this.key = key; } - public ServiceFactory(final String key, final String baseUrl) { + public MandrillServiceFactory(final String key, final String baseUrl) { this(key); this.baseUrl = baseUrl; } - public ServiceFactory(final String key, final String baseUrl, final JerseyClient jerseyClient) { + public MandrillServiceFactory(final String key, final String baseUrl, + final JerseyClient jerseyClient) { this(key, baseUrl); this.jerseyClient = jerseyClient; } @@ -62,7 +63,7 @@ public void setBaseUrl(final String baseUrl) { public JerseyClient getJerseyClient() { if (jerseyClient == null) { - synchronized (ServiceFactory.class) { + synchronized (MandrillServiceFactory.class) { if (jerseyClient == null) { jerseyClient = JerseyClientBuilder.createClient(); } diff --git a/src/test/java/io/sprucehill/mandrill/AbstractTest.java b/src/test/java/io/sprucehill/mandrill/AbstractTest.java index 51b82fa..b218202 100644 --- a/src/test/java/io/sprucehill/mandrill/AbstractTest.java +++ b/src/test/java/io/sprucehill/mandrill/AbstractTest.java @@ -18,7 +18,7 @@ import org.junit.Before; -import io.sprucehill.mandrill.service.ServiceFactory; +import io.sprucehill.mandrill.service.MandrillServiceFactory; /** * Abstract test providing apiKey. @@ -26,7 +26,7 @@ * @author Stephan Wienczny */ public abstract class AbstractTest { - protected ServiceFactory serviceFactory = null; + protected MandrillServiceFactory mandrillServiceFactory = null; @Before public void init() { @@ -53,6 +53,6 @@ public void init() { throw new IllegalArgumentException("No apiKey in environment"); } - serviceFactory = new ServiceFactory(apiKey); + mandrillServiceFactory = new MandrillServiceFactory(apiKey); } } diff --git a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java index 7ab5480..d316683 100644 --- a/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/MessageServiceTest.java @@ -39,7 +39,7 @@ public class MessageServiceTest extends AbstractTest { @Test public void send() throws PreBuildError, IOException { - final IMessageService messageService = serviceFactory.createMessageService(); + final IMessageService messageService = mandrillServiceFactory.createMessageService(); final List response = messageService.sendMessage( new MessageSendPayload.Builder().withTo(EMAIL).withSubject("Mandrill Test") @@ -52,7 +52,7 @@ public void send() throws PreBuildError, IOException { @Test public void sendWithFrom() throws PreBuildError, IOException { - final IMessageService messageService = serviceFactory.createMessageService(); + final IMessageService messageService = mandrillServiceFactory.createMessageService(); final List response = messageService.sendMessage( new MessageSendPayload.Builder().withTo(EMAIL).withFromEmail(FROM_EMAIL) @@ -66,7 +66,7 @@ public void sendWithFrom() throws PreBuildError, IOException { @Test public void sendWithFromUsingDefaults() throws PreBuildError, IOException { - final IMessageService messageService = serviceFactory.createMessageService(); + final IMessageService messageService = mandrillServiceFactory.createMessageService(); messageService.setFromEmail(FROM_EMAIL); messageService.setFromName(FROM_NAME); @@ -82,7 +82,7 @@ public void sendWithFromUsingDefaults() throws PreBuildError, IOException { @Test public void sendTemplate() throws PreBuildError, IOException { - final IMessageService messageService = serviceFactory.createMessageService(); + final IMessageService messageService = mandrillServiceFactory.createMessageService(); final List response = messageService.sendTemplateMessage( new MessageSendTemplatePayload.Builder().withTo(EMAIL) diff --git a/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java index b8a1911..2e21ed8 100644 --- a/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/RejectsServiceTest.java @@ -39,7 +39,7 @@ public class RejectsServiceTest extends AbstractTest { @Test public void add() throws PreBuildError, IOException { - final IRejectsService rejectsService = serviceFactory.createRejectsService(); + final IRejectsService rejectsService = mandrillServiceFactory.createRejectsService(); final AnyListAddResponse response = rejectsService.add( new RejectsAddPayload.Builder().withEmail(EMAIL)); @@ -50,7 +50,7 @@ public void add() throws PreBuildError, IOException { @Test public void delete() throws PreBuildError, IOException { - final IRejectsService rejectsService = serviceFactory.createRejectsService(); + final IRejectsService rejectsService = mandrillServiceFactory.createRejectsService(); final AnyListDeleteResponse response = rejectsService.delete( new RejectsDeletePayload.Builder().withEmail(EMAIL)); @@ -61,7 +61,7 @@ public void delete() throws PreBuildError, IOException { @Test public void list() throws PreBuildError, IOException { - final IRejectsService rejectsService = serviceFactory.createRejectsService(); + final IRejectsService rejectsService = mandrillServiceFactory.createRejectsService(); rejectsService.add(new RejectsAddPayload.Builder().withEmail(EMAIL)); diff --git a/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java index c336daa..dc6e16d 100644 --- a/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/TemplateServiceTest.java @@ -38,7 +38,7 @@ public class TemplateServiceTest extends AbstractTest { @Test public void add() throws PreBuildError, IOException { - final ITemplateService templateService = serviceFactory.createTemplateService(); + final ITemplateService templateService = mandrillServiceFactory.createTemplateService(); try { final TemplateResponse response = templateService.add( @@ -53,7 +53,7 @@ public void add() throws PreBuildError, IOException { @Test public void update() throws PreBuildError, IOException { - final ITemplateService templateService = serviceFactory.createTemplateService(); + final ITemplateService templateService = mandrillServiceFactory.createTemplateService(); try { try { @@ -74,7 +74,7 @@ public void update() throws PreBuildError, IOException { @Test public void render() throws PreBuildError, IOException { - final ITemplateService templateService = serviceFactory.createTemplateService(); + final ITemplateService templateService = mandrillServiceFactory.createTemplateService(); try { try { @@ -95,7 +95,7 @@ public void render() throws PreBuildError, IOException { } public void delete() throws PreBuildError, IOException { - final ITemplateService templateService = serviceFactory.createTemplateService(); + final ITemplateService templateService = mandrillServiceFactory.createTemplateService(); try { final TemplateResponse response = templateService.delete( diff --git a/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java b/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java index 0698bc8..d447e32 100644 --- a/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java +++ b/src/test/java/io/sprucehill/mandrill/service/WhitelistsServiceTest.java @@ -39,7 +39,7 @@ public class WhitelistsServiceTest extends AbstractTest { @Test public void add() throws PreBuildError, IOException { - final IWhitelistsService whitelistsService = serviceFactory.createWhitelistsService(); + final IWhitelistsService whitelistsService = mandrillServiceFactory.createWhitelistsService(); final AnyListAddResponse response = whitelistsService.add( new WhitelistsAddPayload.Builder().withEmail(EMAIL)); @@ -50,7 +50,7 @@ public void add() throws PreBuildError, IOException { @Test public void delete() throws PreBuildError, IOException { - final IWhitelistsService whitelistsService = serviceFactory.createWhitelistsService(); + final IWhitelistsService whitelistsService = mandrillServiceFactory.createWhitelistsService(); final AnyListDeleteResponse response = whitelistsService.delete( new WhitelistsDeletePayload.Builder().withEmail(EMAIL)); @@ -61,7 +61,7 @@ public void delete() throws PreBuildError, IOException { @Test public void list() throws PreBuildError, IOException { - final IWhitelistsService whitelistsService = serviceFactory.createWhitelistsService(); + final IWhitelistsService whitelistsService = mandrillServiceFactory.createWhitelistsService(); whitelistsService.add(new WhitelistsAddPayload.Builder().withEmail(EMAIL));