embulk-input-marketo 0.5.7.alpha.6 → 0.6.0.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|