diff --git a/pom.xml b/pom.xml index c1aa8a4..39a1c7c 100644 --- a/pom.xml +++ b/pom.xml @@ -184,6 +184,13 @@ guava 18.0 + + + org.projectlombok + lombok + 1.18.24 + provided + junit diff --git a/src/main/java/com/smartling/marketo/sdk/MarketoClientManager.java b/src/main/java/com/smartling/marketo/sdk/MarketoClientManager.java index a9bcfcb..37c8a44 100644 --- a/src/main/java/com/smartling/marketo/sdk/MarketoClientManager.java +++ b/src/main/java/com/smartling/marketo/sdk/MarketoClientManager.java @@ -1,5 +1,7 @@ package com.smartling.marketo.sdk; +import com.smartling.marketo.sdk.rest.MarketoTriggerCampaignClient; + public interface MarketoClientManager { MarketoFolderClient getMarketoFolderClient(); @@ -18,4 +20,6 @@ public interface MarketoClientManager { MarketoProgramClient getMarketoProgramClient(); MarketoTokenClient getMarketoTokenClient(); + + MarketoTriggerCampaignClient getMarketoTriggerCampaignClient(); } diff --git a/src/main/java/com/smartling/marketo/sdk/domain/campaign/TriggerCampaignRequest.java b/src/main/java/com/smartling/marketo/sdk/domain/campaign/TriggerCampaignRequest.java new file mode 100644 index 0000000..a881895 --- /dev/null +++ b/src/main/java/com/smartling/marketo/sdk/domain/campaign/TriggerCampaignRequest.java @@ -0,0 +1,36 @@ +package com.smartling.marketo.sdk.domain.campaign; + + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +@AllArgsConstructor +public class TriggerCampaignRequest { + + private LeadId[] leads; + private Token[] tokens; + + @Getter + @Setter + @ToString + @AllArgsConstructor + public static class LeadId { + + private int id; + } + + @Getter + @Setter + @ToString + @AllArgsConstructor + public static class Token { + + private String name; + private String value; + } +} diff --git a/src/main/java/com/smartling/marketo/sdk/domain/campaign/TriggerCampaignResult.java b/src/main/java/com/smartling/marketo/sdk/domain/campaign/TriggerCampaignResult.java new file mode 100644 index 0000000..50804ea --- /dev/null +++ b/src/main/java/com/smartling/marketo/sdk/domain/campaign/TriggerCampaignResult.java @@ -0,0 +1,10 @@ +package com.smartling.marketo.sdk.domain.campaign; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter @Setter @ToString +public class TriggerCampaignResult { + private int id; +} diff --git a/src/main/java/com/smartling/marketo/sdk/rest/MarketoRestClientManager.java b/src/main/java/com/smartling/marketo/sdk/rest/MarketoRestClientManager.java index de4ed31..87e3589 100644 --- a/src/main/java/com/smartling/marketo/sdk/rest/MarketoRestClientManager.java +++ b/src/main/java/com/smartling/marketo/sdk/rest/MarketoRestClientManager.java @@ -74,6 +74,11 @@ public MarketoTokenClient getMarketoTokenClient() { return new MarketoTokenRestClient(httpCommandExecutor); } + @Override + public MarketoTriggerCampaignClient getMarketoTriggerCampaignClient() { + return new MarketoTriggerCampaignClient(httpCommandExecutor); + } + public final static class Builder { private final String identityUrl; private final String restUrl; diff --git a/src/main/java/com/smartling/marketo/sdk/rest/MarketoTriggerCampaignClient.java b/src/main/java/com/smartling/marketo/sdk/rest/MarketoTriggerCampaignClient.java new file mode 100644 index 0000000..ddc6f75 --- /dev/null +++ b/src/main/java/com/smartling/marketo/sdk/rest/MarketoTriggerCampaignClient.java @@ -0,0 +1,42 @@ +package com.smartling.marketo.sdk.rest; + +import com.smartling.marketo.sdk.MarketoApiException; +import com.smartling.marketo.sdk.domain.campaign.TriggerCampaignRequest; +import com.smartling.marketo.sdk.domain.campaign.TriggerCampaignResult; +import com.smartling.marketo.sdk.rest.command.triggercampaign.ActivateSmartCampaign; +import com.smartling.marketo.sdk.rest.command.triggercampaign.RequestTriggerCampaign; + +import java.util.List; + +public class MarketoTriggerCampaignClient { + + private final HttpCommandExecutor httpCommandExecutor; + + MarketoTriggerCampaignClient(HttpCommandExecutor httpCommandExecutor) { + this.httpCommandExecutor = httpCommandExecutor; + } + + public TriggerCampaignResult requestTriggerCampaign(int campaignId, + TriggerCampaignRequest.LeadId[] leadIds) + throws MarketoApiException { + return this.requestTriggerCampaign(campaignId, leadIds, + new TriggerCampaignRequest.Token[]{}); + } + + public TriggerCampaignResult requestTriggerCampaign(int campaignId, + TriggerCampaignRequest.LeadId[] leadIds, TriggerCampaignRequest.Token[] tokens) + throws MarketoApiException { + List triggerCampaignResults = httpCommandExecutor.execute( + new RequestTriggerCampaign(campaignId, leadIds, tokens)); + return triggerCampaignResults.get(0); + } + + public TriggerCampaignResult activateSmartCampaign(int campaignId) + throws MarketoApiException { + List triggerCampaignResults = httpCommandExecutor.execute( + new ActivateSmartCampaign(campaignId)); + return triggerCampaignResults.get(0); + } + + +} diff --git a/src/main/java/com/smartling/marketo/sdk/rest/command/triggercampaign/ActivateSmartCampaign.java b/src/main/java/com/smartling/marketo/sdk/rest/command/triggercampaign/ActivateSmartCampaign.java new file mode 100644 index 0000000..9797528 --- /dev/null +++ b/src/main/java/com/smartling/marketo/sdk/rest/command/triggercampaign/ActivateSmartCampaign.java @@ -0,0 +1,23 @@ +package com.smartling.marketo.sdk.rest.command.triggercampaign; + +import com.smartling.marketo.sdk.domain.campaign.TriggerCampaignResult; +import com.smartling.marketo.sdk.rest.command.BaseMarketoCommand; + +public class ActivateSmartCampaign extends BaseMarketoCommand { + private final int campaignId; + + public ActivateSmartCampaign(int campaignId) { + super(TriggerCampaignResult.class); + this.campaignId = campaignId; + } + + @Override + public String getPath() { + return "/asset/v1/smartCampaign/" + campaignId + "/activate.json"; + } + + @Override + public String getMethod() { + return "POST_BODY"; + } +} diff --git a/src/main/java/com/smartling/marketo/sdk/rest/command/triggercampaign/RequestTriggerCampaign.java b/src/main/java/com/smartling/marketo/sdk/rest/command/triggercampaign/RequestTriggerCampaign.java new file mode 100644 index 0000000..ed7dede --- /dev/null +++ b/src/main/java/com/smartling/marketo/sdk/rest/command/triggercampaign/RequestTriggerCampaign.java @@ -0,0 +1,38 @@ +package com.smartling.marketo.sdk.rest.command.triggercampaign; + +import com.google.common.collect.ImmutableMap; +import com.smartling.marketo.sdk.domain.campaign.TriggerCampaignRequest; +import com.smartling.marketo.sdk.domain.campaign.TriggerCampaignResult; +import com.smartling.marketo.sdk.rest.command.BaseMarketoCommand; + +import java.util.Map; + +public class RequestTriggerCampaign extends BaseMarketoCommand { + + private final int campaignId; + private final TriggerCampaignRequest triggerCampaignRequest; + + public RequestTriggerCampaign(int campaignId, TriggerCampaignRequest.LeadId[] leadIds, + TriggerCampaignRequest.Token[] tokens) { + super(TriggerCampaignResult.class); + this.campaignId = campaignId; + this.triggerCampaignRequest = new TriggerCampaignRequest(leadIds, tokens); + } + + @Override + public String getPath() { + return "/v1/campaigns/" + campaignId + "/trigger.json"; + } + + @Override + public String getMethod() { + return "POST_BODY"; + } + + @Override + public Map getParameters() { + ImmutableMap.Builder builder = ImmutableMap.builder() + .put("input", this.triggerCampaignRequest); + return builder.build(); + } +} diff --git a/src/main/java/com/smartling/marketo/sdk/rest/transport/JaxRsHttpCommandExecutor.java b/src/main/java/com/smartling/marketo/sdk/rest/transport/JaxRsHttpCommandExecutor.java index 51a278b..827242f 100644 --- a/src/main/java/com/smartling/marketo/sdk/rest/transport/JaxRsHttpCommandExecutor.java +++ b/src/main/java/com/smartling/marketo/sdk/rest/transport/JaxRsHttpCommandExecutor.java @@ -121,7 +121,12 @@ private MarketoResponse execute(Invocation.Builder invocationBuilder, Com MultiPart multiPartEntity = toMultipart(processParameters(command.getParameters(), false)); Entity entity = Entity.entity(multiPartEntity, multiPartEntity.getMediaType()); marketoResponse = invocationBuilder.post(entity, typeToken); - } else { + } else if ("POST_BODY".equalsIgnoreCase(command.getMethod())) { + Map body = processParameters(command.getParameters(), false); + Entity entity = Entity.entity(body, MediaType.APPLICATION_JSON_TYPE.withCharset("UTF-8")); + marketoResponse = invocationBuilder.post(entity, typeToken); + } + else { marketoResponse = invocationBuilder.method(command.getMethod(), typeToken); }