embulk-input-marketo 0.5.7.alpha.6 → 0.6.0.alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/build.gradle +6 -6
- data/src/main/java/org/embulk/input/marketo/MarketoService.java +1 -1
- data/src/main/java/org/embulk/input/marketo/MarketoServiceImpl.java +4 -5
- data/src/main/java/org/embulk/input/marketo/MarketoUtils.java +45 -14
- data/src/main/java/org/embulk/input/marketo/delegate/ActivityBulkExtractInputPlugin.java +12 -11
- data/src/main/java/org/embulk/input/marketo/delegate/CampaignInputPlugin.java +4 -23
- data/src/main/java/org/embulk/input/marketo/delegate/LeadBulkExtractInputPlugin.java +18 -11
- data/src/main/java/org/embulk/input/marketo/delegate/LeadWithListInputPlugin.java +3 -18
- data/src/main/java/org/embulk/input/marketo/delegate/LeadWithProgramInputPlugin.java +5 -20
- data/src/main/java/org/embulk/input/marketo/delegate/MarketoBaseBulkExtractInputPlugin.java +213 -87
- data/src/main/java/org/embulk/input/marketo/delegate/MarketoBaseInputPluginDelegate.java +22 -0
- data/src/main/java/org/embulk/input/marketo/model/MarketoBulkExtractRequest.java +12 -1
- data/src/main/java/org/embulk/input/marketo/model/MarketoField.java +28 -2
- data/src/main/java/org/embulk/input/marketo/model/MarketoResponse.java +2 -1
- data/src/main/java/org/embulk/input/marketo/model/filter/DateRangeFilter.java +9 -0
- data/src/main/java/org/embulk/input/marketo/rest/MarketoBaseRestClient.java +4 -0
- data/src/main/java/org/embulk/input/marketo/rest/{MarketoFileResponseEntityReader.java → MarketoInputStreamResponseEntityReader.java} +2 -2
- data/src/main/java/org/embulk/input/marketo/rest/MarketoResponseJetty92EntityReader.java +4 -1
- data/src/main/java/org/embulk/input/marketo/rest/MarketoRestClient.java +76 -42
- data/src/main/java/org/embulk/input/marketo/rest/RecordPagingIterable.java +35 -11
- data/src/test/java/org/embulk/input/marketo/MarketoServiceImplTest.java +159 -0
- data/src/test/java/org/embulk/input/marketo/MarketoUtilsTest.java +87 -0
- data/src/test/java/org/embulk/input/marketo/delegate/ActivityBulkExtractInputPluginTest.java +84 -0
- data/src/test/java/org/embulk/input/marketo/delegate/CampaignInputPluginTest.java +73 -0
- data/src/test/java/org/embulk/input/marketo/delegate/LeadBulkExtractInputPluginTest.java +94 -0
- data/src/test/java/org/embulk/input/marketo/delegate/LeadWithListInputPluginTest.java +99 -0
- data/src/test/java/org/embulk/input/marketo/delegate/LeadWithProgramInputPluginTest.java +101 -0
- data/src/test/java/org/embulk/input/marketo/delegate/MarketoBaseBulkExtractInputPluginTest.java +114 -0
- data/src/test/java/org/embulk/input/marketo/rest/MarketoBaseRestClientTest.java +3 -15
- data/src/test/java/org/embulk/input/marketo/rest/MarketoRestClientTest.java +450 -0
- data/src/test/resources/config/activity_bulk_extract_config.yaml +7 -0
- data/src/test/resources/config/lead_bulk_extract_config.yaml +8 -0
- data/src/test/resources/config/rest_config.yaml +3 -0
- data/src/test/resources/fixtures/activity_extract1.csv +35 -0
- data/src/test/resources/fixtures/activity_extract2.csv +22 -0
- data/src/test/resources/fixtures/all_program_full.json +53 -0
- data/src/test/resources/fixtures/campaign_response.json +38 -0
- data/src/test/resources/fixtures/campaign_response_full.json +102 -0
- data/src/test/resources/fixtures/lead_by_list.json +33 -0
- data/src/test/resources/fixtures/lead_by_program_response.json +47 -0
- data/src/test/resources/fixtures/lead_describe.json +221 -0
- data/src/test/resources/fixtures/lead_describe_expected.json +66 -0
- data/src/test/resources/fixtures/lead_describe_marketo_fields_full.json +518 -0
- data/src/test/resources/fixtures/lead_extract1.csv +11 -0
- data/src/test/resources/fixtures/lead_response_full.json +2402 -0
- data/src/test/resources/fixtures/lead_with_program_full.json +17 -0
- data/src/test/resources/fixtures/leads_extract2.csv +10 -0
- data/src/test/resources/fixtures/lists_response.json +31 -0
- data/src/test/resources/fixtures/program_response.json +71 -0
- metadata +39 -8
- data/src/main/java/org/embulk/input/marketo/model/filter/ListFilter.java +0 -10
@@ -5,17 +5,23 @@ import org.embulk.base.restclient.DefaultServiceDataSplitter;
|
|
5
5
|
import org.embulk.base.restclient.RestClientInputPluginDelegate;
|
6
6
|
import org.embulk.base.restclient.RestClientInputTaskBase;
|
7
7
|
import org.embulk.base.restclient.ServiceDataSplitter;
|
8
|
+
import org.embulk.base.restclient.record.RecordImporter;
|
9
|
+
import org.embulk.base.restclient.record.ServiceRecord;
|
8
10
|
import org.embulk.config.Config;
|
9
11
|
import org.embulk.config.ConfigDefault;
|
10
12
|
import org.embulk.config.ConfigDiff;
|
11
13
|
import org.embulk.config.TaskReport;
|
14
|
+
import org.embulk.input.marketo.MarketoService;
|
15
|
+
import org.embulk.input.marketo.MarketoServiceImpl;
|
12
16
|
import org.embulk.input.marketo.rest.MarketoRestClient;
|
13
17
|
import org.embulk.spi.Exec;
|
18
|
+
import org.embulk.spi.PageBuilder;
|
14
19
|
import org.embulk.spi.Schema;
|
15
20
|
import org.embulk.util.retryhelper.jetty92.DefaultJetty92ClientCreator;
|
16
21
|
import org.embulk.util.retryhelper.jetty92.Jetty92RetryHelper;
|
17
22
|
import org.joda.time.DateTime;
|
18
23
|
|
24
|
+
import java.util.Iterator;
|
19
25
|
import java.util.List;
|
20
26
|
|
21
27
|
/**
|
@@ -68,6 +74,22 @@ public abstract class MarketoBaseInputPluginDelegate<T extends MarketoBaseInputP
|
|
68
74
|
task.setJobStartTime(DateTime.now());
|
69
75
|
}
|
70
76
|
|
77
|
+
@Override
|
78
|
+
public TaskReport ingestServiceData(T task, RecordImporter recordImporter, int taskIndex, PageBuilder pageBuilder)
|
79
|
+
{
|
80
|
+
MarketoService marketoService = new MarketoServiceImpl(createMarketoRestClient(task));
|
81
|
+
Iterator<ServiceRecord> serviceRecords = getServiceRecords(marketoService, task);
|
82
|
+
int imported = 0;
|
83
|
+
while (serviceRecords.hasNext() && (imported < PREVIEW_RECORD_LIMIT || !Exec.isPreview())) {
|
84
|
+
ServiceRecord next = serviceRecords.next();
|
85
|
+
recordImporter.importRecord(next, pageBuilder);
|
86
|
+
imported++;
|
87
|
+
}
|
88
|
+
return Exec.newTaskReport();
|
89
|
+
}
|
90
|
+
|
91
|
+
protected abstract Iterator<ServiceRecord> getServiceRecords(MarketoService marketoService, T task);
|
92
|
+
|
71
93
|
@VisibleForTesting
|
72
94
|
public MarketoRestClient createMarketoRestClient(PluginTask task)
|
73
95
|
{
|
@@ -2,6 +2,7 @@ package org.embulk.input.marketo.model;
|
|
2
2
|
|
3
3
|
import org.embulk.input.marketo.model.filter.MarketoFilter;
|
4
4
|
|
5
|
+
import java.util.HashMap;
|
5
6
|
import java.util.List;
|
6
7
|
import java.util.Map;
|
7
8
|
|
@@ -15,7 +16,7 @@ public class MarketoBulkExtractRequest
|
|
15
16
|
|
16
17
|
private Map<String, String> columnHeaderNames;
|
17
18
|
|
18
|
-
private Map<String, MarketoFilter> filter;
|
19
|
+
private Map<String, MarketoFilter> filter = new HashMap<>();
|
19
20
|
|
20
21
|
public List<String> getFields()
|
21
22
|
{
|
@@ -56,4 +57,14 @@ public class MarketoBulkExtractRequest
|
|
56
57
|
{
|
57
58
|
this.filter = filter;
|
58
59
|
}
|
60
|
+
|
61
|
+
@Override
|
62
|
+
public String toString()
|
63
|
+
{
|
64
|
+
return "MarketoBulkExtractRequest{" +
|
65
|
+
"format='" + format + '\'' +
|
66
|
+
", columnHeaderNames=" + columnHeaderNames +
|
67
|
+
", filter=" + filter +
|
68
|
+
'}';
|
69
|
+
}
|
59
70
|
}
|
@@ -15,13 +15,15 @@ public class MarketoField
|
|
15
15
|
|
16
16
|
private MarketoDataType marketoDataType;
|
17
17
|
|
18
|
+
public MarketoField(){}
|
18
19
|
|
19
20
|
public MarketoField(String name, String dataType)
|
20
21
|
{
|
21
22
|
this.name = name;
|
22
23
|
try {
|
23
24
|
marketoDataType = MarketoDataType.valueOf(dataType.toUpperCase());
|
24
|
-
}
|
25
|
+
}
|
26
|
+
catch (IllegalArgumentException ex) {
|
25
27
|
marketoDataType = MarketoDataType.STRING;
|
26
28
|
}
|
27
29
|
}
|
@@ -30,7 +32,6 @@ public class MarketoField
|
|
30
32
|
{
|
31
33
|
this.name = name;
|
32
34
|
this.marketoDataType = marketoDataType;
|
33
|
-
|
34
35
|
}
|
35
36
|
|
36
37
|
public String getName()
|
@@ -43,6 +44,31 @@ public class MarketoField
|
|
43
44
|
return marketoDataType;
|
44
45
|
}
|
45
46
|
|
47
|
+
@Override
|
48
|
+
public boolean equals(Object o)
|
49
|
+
{
|
50
|
+
if (this == o) {
|
51
|
+
return true;
|
52
|
+
}
|
53
|
+
if (o == null || getClass() != o.getClass()) {
|
54
|
+
return false;
|
55
|
+
}
|
56
|
+
|
57
|
+
MarketoField field = (MarketoField) o;
|
58
|
+
|
59
|
+
if (name != null ? !name.equals(field.name) : field.name != null) {
|
60
|
+
return false;
|
61
|
+
}
|
62
|
+
return marketoDataType == field.marketoDataType;
|
63
|
+
}
|
64
|
+
|
65
|
+
@Override
|
66
|
+
public int hashCode()
|
67
|
+
{
|
68
|
+
int result = name != null ? name.hashCode() : 0;
|
69
|
+
result = 31 * result + (marketoDataType != null ? marketoDataType.hashCode() : 0);
|
70
|
+
return result;
|
71
|
+
}
|
46
72
|
|
47
73
|
public enum MarketoDataType
|
48
74
|
{
|
@@ -1,5 +1,6 @@
|
|
1
1
|
package org.embulk.input.marketo.model;
|
2
2
|
|
3
|
+
import java.util.ArrayList;
|
3
4
|
import java.util.List;
|
4
5
|
|
5
6
|
/**
|
@@ -17,7 +18,7 @@ public class MarketoResponse<T>
|
|
17
18
|
|
18
19
|
private List<MarketoError> errors;
|
19
20
|
|
20
|
-
private List<T> result;
|
21
|
+
private List<T> result = new ArrayList<>();
|
21
22
|
|
22
23
|
public String getRequestId()
|
23
24
|
{
|
@@ -21,6 +21,7 @@ import org.embulk.util.retryhelper.jetty92.Jetty92SingleRequester;
|
|
21
21
|
import org.embulk.util.retryhelper.jetty92.StringJetty92ResponseEntityReader;
|
22
22
|
import org.slf4j.Logger;
|
23
23
|
|
24
|
+
import java.io.EOFException;
|
24
25
|
import java.io.IOException;
|
25
26
|
import java.net.SocketTimeoutException;
|
26
27
|
import java.nio.charset.StandardCharsets;
|
@@ -186,6 +187,9 @@ public class MarketoBaseRestClient implements AutoCloseable
|
|
186
187
|
if (exception instanceof ExecutionException) {
|
187
188
|
this.toRetry((Exception) exception.getCause());
|
188
189
|
}
|
190
|
+
if (exception instanceof EOFException) {
|
191
|
+
return true;
|
192
|
+
}
|
189
193
|
if (exception instanceof MarketoAPIException) {
|
190
194
|
//Retry Authenticate Exception
|
191
195
|
MarketoError error = ((MarketoAPIException) exception).getMarketoErrors().get(0);
|
@@ -19,7 +19,7 @@ import java.util.concurrent.TimeUnit;
|
|
19
19
|
/**
|
20
20
|
* Created by tai.khuu on 9/5/17.
|
21
21
|
*/
|
22
|
-
public class
|
22
|
+
public class MarketoInputStreamResponseEntityReader implements Jetty92ResponseReader<InputStream>
|
23
23
|
{
|
24
24
|
private static final ObjectReader OBJECT_READER = new ObjectMapper().readerFor(new TypeReference<MarketoResponse<ObjectNode>>(){ });
|
25
25
|
|
@@ -27,7 +27,7 @@ public class MarketoFileResponseEntityReader implements Jetty92ResponseReader<In
|
|
27
27
|
|
28
28
|
private long timeout;
|
29
29
|
|
30
|
-
public
|
30
|
+
public MarketoInputStreamResponseEntityReader(long timeout)
|
31
31
|
{
|
32
32
|
this.listener = new InputStreamResponseListener();
|
33
33
|
this.timeout = timeout;
|
@@ -82,7 +82,10 @@ public class MarketoResponseJetty92EntityReader<T> implements Jetty92ResponseRea
|
|
82
82
|
{
|
83
83
|
InputStream inputStream = this.listener.getInputStream();
|
84
84
|
try (InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8)) {
|
85
|
-
|
85
|
+
String reponseContent = CharStreams.toString(inputStreamReader);
|
86
|
+
//Reset this listener
|
87
|
+
this.listener = new InputStreamResponseListener();
|
88
|
+
return reponseContent;
|
86
89
|
}
|
87
90
|
}
|
88
91
|
}
|
@@ -3,6 +3,7 @@ package org.embulk.input.marketo.rest;
|
|
3
3
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
4
4
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
5
5
|
import com.google.common.collect.ArrayListMultimap;
|
6
|
+
import com.google.common.collect.ImmutableListMultimap;
|
6
7
|
import com.google.common.collect.ImmutableMap;
|
7
8
|
import com.google.common.collect.Multimap;
|
8
9
|
import org.apache.commons.lang3.StringUtils;
|
@@ -15,7 +16,6 @@ import org.embulk.input.marketo.model.MarketoError;
|
|
15
16
|
import org.embulk.input.marketo.model.MarketoField;
|
16
17
|
import org.embulk.input.marketo.model.MarketoResponse;
|
17
18
|
import org.embulk.input.marketo.model.filter.DateRangeFilter;
|
18
|
-
import org.embulk.input.marketo.model.filter.ListFilter;
|
19
19
|
import org.embulk.input.marketo.model.filter.MarketoFilter;
|
20
20
|
import org.embulk.spi.DataException;
|
21
21
|
import org.embulk.spi.Exec;
|
@@ -41,10 +41,16 @@ public class MarketoRestClient extends MarketoBaseRestClient
|
|
41
41
|
|
42
42
|
private static final String NEXT_PAGE_TOKEN = "nextPageToken";
|
43
43
|
|
44
|
+
private static final String OFFSET = "offset";
|
45
|
+
|
46
|
+
private static final String MAX_RETURN = "maxReturn";
|
47
|
+
|
44
48
|
private String endPoint;
|
45
49
|
|
46
50
|
private Integer batchSize;
|
47
51
|
|
52
|
+
private Integer maxReturn;
|
53
|
+
|
48
54
|
private static final Logger LOGGER = Exec.getLogger(MarketoRestClient.class.getCanonicalName());
|
49
55
|
|
50
56
|
private static final Map<String, Type> TYPE_MAPPING = new ImmutableMap.Builder<String, Type>()
|
@@ -85,18 +91,24 @@ public class MarketoRestClient extends MarketoBaseRestClient
|
|
85
91
|
@ConfigDefault("300")
|
86
92
|
Integer getBatchSize();
|
87
93
|
void setBatchSize(Integer batchSize);
|
94
|
+
|
95
|
+
@Config("max_return")
|
96
|
+
@ConfigDefault("200")
|
97
|
+
Integer getMaxReturn();
|
98
|
+
void setMaxReturn(Integer maxReturn);
|
88
99
|
}
|
89
100
|
|
90
101
|
public MarketoRestClient(PluginTask task, Jetty92RetryHelper retryHelper)
|
91
102
|
{
|
92
|
-
this(
|
103
|
+
this(MarketoUtils.getEndPoint(task.getAccountId()), MarketoUtils.getIdentityEndPoint(task.getAccountId()), task.getClientId(), task.getClientSecret(), task.getBatchSize(), task.getMaxReturn(), task.getMarketoLimitIntervalMilis(), retryHelper);
|
93
104
|
}
|
94
105
|
|
95
|
-
public MarketoRestClient(String endPoint, String identityEndPoint, String clientId, String clientSecret, Integer batchSize, int marketoLimitIntervalMilis, Jetty92RetryHelper retryHelper)
|
106
|
+
public MarketoRestClient(String endPoint, String identityEndPoint, String clientId, String clientSecret, Integer batchSize, Integer maxReturn, int marketoLimitIntervalMilis, Jetty92RetryHelper retryHelper)
|
96
107
|
{
|
97
108
|
super(identityEndPoint, clientId, clientSecret, marketoLimitIntervalMilis, retryHelper);
|
98
109
|
this.endPoint = endPoint;
|
99
110
|
this.batchSize = batchSize;
|
111
|
+
this.maxReturn = maxReturn;
|
100
112
|
}
|
101
113
|
|
102
114
|
public List<MarketoField> describeLead()
|
@@ -119,37 +131,32 @@ public class MarketoRestClient extends MarketoBaseRestClient
|
|
119
131
|
return TYPE_MAPPING.containsKey(dataType.toLowerCase()) ? TYPE_MAPPING.get(dataType.toLowerCase()) : Types.STRING;
|
120
132
|
}
|
121
133
|
|
122
|
-
public String createLeadBulkExtract(Date startTime, Date endTime, List<String> extractFields)
|
134
|
+
public String createLeadBulkExtract(Date startTime, Date endTime, List<String> extractFields, String fitlerField)
|
123
135
|
{
|
124
|
-
|
125
|
-
MarketoBulkExtractRequest marketoBulkExtractRequest = new MarketoBulkExtractRequest();
|
126
|
-
marketoBulkExtractRequest.setFields(extractFields);
|
127
|
-
marketoBulkExtractRequest.setFormat("CSV");
|
128
|
-
Map<String, MarketoFilter> filterMap = new HashMap<>();
|
129
|
-
DateRangeFilter dateRangeFilter = new DateRangeFilter();
|
130
|
-
dateRangeFilter.setStartAt(timeFormat.format(startTime));
|
131
|
-
dateRangeFilter.setEndAt(timeFormat.format(endTime));
|
132
|
-
filterMap.put("createdAt", dateRangeFilter);
|
133
|
-
marketoBulkExtractRequest.setFilter(filterMap);
|
136
|
+
MarketoBulkExtractRequest marketoBulkExtractRequest = getMarketoBulkExtractRequest(startTime, endTime, extractFields, fitlerField);
|
134
137
|
return sendCreateBulkExtractRequest(marketoBulkExtractRequest, MarketoRESTEndpoint.CREATE_LEAD_EXTRACT);
|
135
138
|
}
|
136
139
|
|
137
|
-
|
140
|
+
private MarketoBulkExtractRequest getMarketoBulkExtractRequest(Date startTime, Date endTime, List<String> extractFields, String rangeFilterName)
|
138
141
|
{
|
139
142
|
SimpleDateFormat timeFormat = new SimpleDateFormat(MarketoUtils.MARKETO_DATE_SIMPLE_DATE_FORMAT);
|
140
143
|
MarketoBulkExtractRequest marketoBulkExtractRequest = new MarketoBulkExtractRequest();
|
144
|
+
if (extractFields != null) {
|
145
|
+
marketoBulkExtractRequest.setFields(extractFields);
|
146
|
+
}
|
141
147
|
marketoBulkExtractRequest.setFormat("CSV");
|
142
148
|
Map<String, MarketoFilter> filterMap = new HashMap<>();
|
143
149
|
DateRangeFilter dateRangeFilter = new DateRangeFilter();
|
144
150
|
dateRangeFilter.setStartAt(timeFormat.format(startTime));
|
145
151
|
dateRangeFilter.setEndAt(timeFormat.format(endTime));
|
146
|
-
filterMap.put(
|
147
|
-
if (activityTypes != null) {
|
148
|
-
ListFilter activitiesTypeFilter = new ListFilter();
|
149
|
-
activitiesTypeFilter.addAll(activityTypes);
|
150
|
-
filterMap.put("activities", activitiesTypeFilter);
|
151
|
-
}
|
152
|
+
filterMap.put(rangeFilterName, dateRangeFilter);
|
152
153
|
marketoBulkExtractRequest.setFilter(filterMap);
|
154
|
+
return marketoBulkExtractRequest;
|
155
|
+
}
|
156
|
+
|
157
|
+
public String createActivityExtract(Date startTime, Date endTime)
|
158
|
+
{
|
159
|
+
MarketoBulkExtractRequest marketoBulkExtractRequest = getMarketoBulkExtractRequest(startTime, endTime, null, "createdAt");
|
153
160
|
return sendCreateBulkExtractRequest(marketoBulkExtractRequest, MarketoRESTEndpoint.CREATE_ACTIVITY_EXTRACT);
|
154
161
|
}
|
155
162
|
|
@@ -157,6 +164,7 @@ public class MarketoRestClient extends MarketoBaseRestClient
|
|
157
164
|
{
|
158
165
|
MarketoResponse<ObjectNode> marketoResponse = null;
|
159
166
|
try {
|
167
|
+
LOGGER.info("Send bulk extract request [{}]", request);
|
160
168
|
marketoResponse = doPost(endPoint + endpoint.getEndpoint(), null, null, OBJECT_MAPPER.writeValueAsString(request), new MarketoResponseJetty92EntityReader<ObjectNode>(READ_TIMEOUT_MILLIS));
|
161
169
|
}
|
162
170
|
catch (JsonProcessingException e) {
|
@@ -265,67 +273,93 @@ public class MarketoRestClient extends MarketoBaseRestClient
|
|
265
273
|
|
266
274
|
private InputStream getBulkExtractResult(MarketoRESTEndpoint endpoint, String exportId)
|
267
275
|
{
|
268
|
-
|
269
|
-
return fileStream;
|
276
|
+
return doGet(this.endPoint + endpoint.getEndpoint(new ImmutableMap.Builder().put("export_id", exportId).build()), null, null, new MarketoInputStreamResponseEntityReader(READ_TIMEOUT_MILLIS));
|
270
277
|
}
|
271
278
|
|
272
279
|
public RecordPagingIterable<ObjectNode> getLists()
|
273
280
|
{
|
274
|
-
return
|
281
|
+
return getRecordWithTokenPagination(endPoint + MarketoRESTEndpoint.GET_LISTS.getEndpoint(), null, ObjectNode.class);
|
275
282
|
}
|
276
283
|
|
277
284
|
public RecordPagingIterable<ObjectNode> getPrograms()
|
278
285
|
{
|
279
|
-
return
|
286
|
+
return getRecordWithOffsetPagination(endPoint + MarketoRESTEndpoint.GET_PROGRAMS.getEndpoint(), null, ObjectNode.class);
|
280
287
|
}
|
281
288
|
|
282
289
|
public RecordPagingIterable<ObjectNode> getLeadsByProgram(String programId, List<String> fieldNames)
|
283
290
|
{
|
284
291
|
Multimap<String, String> multimap = ArrayListMultimap.create();
|
285
292
|
multimap.put("fields", StringUtils.join(fieldNames, ","));
|
286
|
-
return
|
293
|
+
return getRecordWithTokenPagination(endPoint + MarketoRESTEndpoint.GET_LEADS_BY_PROGRAM.getEndpoint(new ImmutableMap.Builder().put("program_id", programId).build()), multimap, ObjectNode.class);
|
287
294
|
}
|
288
295
|
|
289
296
|
public RecordPagingIterable<ObjectNode> getLeadsByList(String listId, List<String> fieldNames)
|
290
297
|
{
|
291
298
|
Multimap<String, String> multimap = ArrayListMultimap.create();
|
292
299
|
multimap.put("fields", StringUtils.join(fieldNames, ","));
|
293
|
-
return
|
300
|
+
return getRecordWithTokenPagination(endPoint + MarketoRESTEndpoint.GET_LEADS_BY_LIST.getEndpoint(new ImmutableMap.Builder().put("list_id", listId).build()), multimap, ObjectNode.class);
|
294
301
|
}
|
295
302
|
|
296
303
|
public RecordPagingIterable<ObjectNode> getCampaign()
|
297
304
|
{
|
298
|
-
return
|
305
|
+
return getRecordWithTokenPagination(endPoint + MarketoRESTEndpoint.GET_CAMPAIGN.getEndpoint(), null, ObjectNode.class);
|
299
306
|
}
|
300
|
-
|
301
|
-
private <T> RecordPagingIterable<T> getRecordWithPagination(final String endPoint, final Multimap<String, String> parameters, final Class<T> recordClass)
|
307
|
+
private <T> RecordPagingIterable<T> getRecordWithOffsetPagination(final String endPoint, final Multimap<String, String> parameters, final Class<T> recordClass)
|
302
308
|
{
|
303
|
-
return new RecordPagingIterable<>(new RecordPagingIterable.PagingFunction<RecordPagingIterable.
|
309
|
+
return new RecordPagingIterable<>(new RecordPagingIterable.PagingFunction<RecordPagingIterable.OffsetPage<T>>()
|
304
310
|
{
|
305
311
|
@Override
|
306
|
-
public RecordPagingIterable.
|
312
|
+
public RecordPagingIterable.OffsetPage<T> getNextPage(RecordPagingIterable.OffsetPage<T> currentPage)
|
307
313
|
{
|
308
|
-
|
309
|
-
params.put(NEXT_PAGE_TOKEN, currentPage.getNextPageToken());
|
310
|
-
return gettMarketoPage(params);
|
314
|
+
return getOffsetPage(currentPage.getNextOffSet());
|
311
315
|
}
|
312
316
|
|
313
317
|
@Override
|
314
|
-
public RecordPagingIterable.
|
318
|
+
public RecordPagingIterable.OffsetPage<T> getFirstPage()
|
315
319
|
{
|
316
|
-
return
|
320
|
+
return getOffsetPage(0);
|
317
321
|
}
|
318
|
-
|
322
|
+
|
323
|
+
private RecordPagingIterable.OffsetPage<T> getOffsetPage(int offset)
|
324
|
+
{
|
325
|
+
ImmutableListMultimap.Builder<String, String> params = new ImmutableListMultimap.Builder<>();
|
326
|
+
params.put(OFFSET, String.valueOf(offset));
|
327
|
+
params.put(MAX_RETURN, String.valueOf(maxReturn));
|
328
|
+
if (parameters != null) {
|
329
|
+
params.putAll(parameters);
|
330
|
+
}
|
331
|
+
MarketoResponse<T> marketoResponse = doGet(endPoint, null, params.build(), new MarketoResponseJetty92EntityReader<>(READ_TIMEOUT_MILLIS, recordClass));
|
332
|
+
return new RecordPagingIterable.OffsetPage<>(marketoResponse.getResult(), offset + marketoResponse.getResult().size(), marketoResponse.getResult().size() == maxReturn);
|
333
|
+
}
|
334
|
+
});
|
335
|
+
}
|
336
|
+
private <T> RecordPagingIterable<T> getRecordWithTokenPagination(final String endPoint, final Multimap<String, String> parameters, final Class<T> recordClass)
|
337
|
+
{
|
338
|
+
return new RecordPagingIterable<>(new RecordPagingIterable.PagingFunction<RecordPagingIterable.TokenPage<T>>()
|
339
|
+
{
|
340
|
+
@Override
|
341
|
+
public RecordPagingIterable.TokenPage<T> getNextPage(RecordPagingIterable.TokenPage<T> currentPage)
|
342
|
+
{
|
343
|
+
return getTokenPage(currentPage);
|
344
|
+
}
|
345
|
+
@Override
|
346
|
+
public RecordPagingIterable.TokenPage<T> getFirstPage()
|
347
|
+
{
|
348
|
+
return getTokenPage(null);
|
349
|
+
}
|
350
|
+
|
351
|
+
private RecordPagingIterable.TokenPage<T> getTokenPage(RecordPagingIterable.TokenPage page)
|
319
352
|
{
|
320
|
-
|
321
|
-
|
353
|
+
ImmutableListMultimap.Builder params = new ImmutableListMultimap.Builder<>();
|
354
|
+
if (page != null) {
|
355
|
+
params.put(NEXT_PAGE_TOKEN, page.getNextPageToken());
|
322
356
|
}
|
323
357
|
params.put(BATCH_SIZE, String.valueOf(batchSize));
|
324
358
|
if (parameters != null) {
|
325
359
|
params.putAll(parameters);
|
326
360
|
}
|
327
|
-
MarketoResponse<T> marketoResponse = doGet(endPoint, null, params, new MarketoResponseJetty92EntityReader<>(READ_TIMEOUT_MILLIS, recordClass));
|
328
|
-
return new RecordPagingIterable.
|
361
|
+
MarketoResponse<T> marketoResponse = doGet(endPoint, null, params.build(), new MarketoResponseJetty92EntityReader<>(READ_TIMEOUT_MILLIS, recordClass));
|
362
|
+
return new RecordPagingIterable.TokenPage<>(marketoResponse.getResult(), marketoResponse.getNextPageToken(), marketoResponse.getNextPageToken() != null);
|
329
363
|
}
|
330
364
|
});
|
331
365
|
}
|