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);
}