Skip to content

Commit b0f18ea

Browse files
author
stephen powis
committed
partial implementation of prospect create, update, upsert
1 parent dc2db88 commit b0f18ea

16 files changed

+387
-13
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,16 @@ Official Documentation: [Emails](http://developer.pardot.com/kb/api-version-3/em
109109
- Sending One to One Emails
110110
- Sending List Emails
111111

112+
### Prospects
113+
Official Documentation: [Emails](http://developer.pardot.com/kb/api-version-3/prospects/)
114+
115+
- Read
116+
- Create - Partial implementation, can only set default fields.
117+
- Update - Partial implementation, can only set default fields.
118+
- Upsert - Partial implementation, can only set default fields.
119+
- Delete
120+
- Query
121+
112122
### Users
113123
Official Documentation: [Users](http://developer.pardot.com/kb/api-version-3/users/)
114124

src/main/java/com/darksci/pardot/api/PardotClient.java

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.darksci.pardot.api.parser.ErrorResponseParser;
44
import com.darksci.pardot.api.parser.ResponseParser;
5+
import com.darksci.pardot.api.parser.StringResponseParser;
56
import com.darksci.pardot.api.parser.account.AccountReadResponseParser;
67
import com.darksci.pardot.api.parser.campaign.CampaignQueryResponseParser;
78
import com.darksci.pardot.api.parser.campaign.CampaignReadResponseParser;
@@ -24,8 +25,12 @@
2425
import com.darksci.pardot.api.request.email.EmailSendOneToOneRequest;
2526
import com.darksci.pardot.api.request.email.EmailStatsRequest;
2627
import com.darksci.pardot.api.request.login.LoginRequest;
28+
import com.darksci.pardot.api.request.prospect.ProspectCreateRequest;
29+
import com.darksci.pardot.api.request.prospect.ProspectDeleteRequest;
2730
import com.darksci.pardot.api.request.prospect.ProspectQueryRequest;
2831
import com.darksci.pardot.api.request.prospect.ProspectReadRequest;
32+
import com.darksci.pardot.api.request.prospect.ProspectUpdateRequest;
33+
import com.darksci.pardot.api.request.prospect.ProspectUpsertRequest;
2934
import com.darksci.pardot.api.request.user.UserAbilitiesRequest;
3035
import com.darksci.pardot.api.request.user.UserQueryRequest;
3136
import com.darksci.pardot.api.request.user.UserReadRequest;
@@ -100,12 +105,20 @@ private <T> T submitRequest(final Request request, ResponseParser<T> responsePar
100105

101106
// Submit request
102107
final RestResponse restResponse = getRestClient().submitRequest(request);
108+
final int responseCode = restResponse.getHttpCode();
109+
String responseStr = restResponse.getResponseStr();
103110

104111
// If we have a valid response
105112
logger.info("Response: {}", restResponse);
106113

107114
// Check for invalid http status codes
108-
if (restResponse.getHttpCode() >= 200 && restResponse.getHttpCode() < 300) {
115+
if (responseCode >= 200 && responseCode < 300) {
116+
// These response codes have no values
117+
if (responseCode == 205 && responseStr == null) {
118+
// Avoid NPE
119+
responseStr = "";
120+
}
121+
109122
// High level check for error response
110123
if (restResponse.getResponseStr().contains("<rsp stat=\"fail\"")) {
111124
try {
@@ -301,6 +314,33 @@ public Prospect prospectRead(final ProspectReadRequest request) {
301314
return submitRequest(request, new ProspectReadResponseParser());
302315
}
303316

317+
/**
318+
* Make API request to create a new prospect.
319+
* @param request Request definition.
320+
* @return Parsed api response.
321+
*/
322+
public Prospect prospectCreate(final ProspectCreateRequest request) {
323+
return submitRequest(request, new ProspectReadResponseParser());
324+
}
325+
326+
/**
327+
* Make API request to update an existing prospect.
328+
* @param request Request definition.
329+
* @return Parsed api response.
330+
*/
331+
public Prospect prospectUpdate(final ProspectUpdateRequest request) {
332+
return submitRequest(request, new ProspectReadResponseParser());
333+
}
334+
335+
/**
336+
* Make API request to upsert a prospect.
337+
* @param request Request definition.
338+
* @return Parsed api response.
339+
*/
340+
public Prospect prospectUpsert(final ProspectUpsertRequest request) {
341+
return submitRequest(request, new ProspectReadResponseParser());
342+
}
343+
304344
/**
305345
* Make API request to query prospects.
306346
* @param request Request definition.
@@ -309,11 +349,21 @@ public Prospect prospectRead(final ProspectReadRequest request) {
309349
public ProspectQueryResponse.Result prospectQuery(final ProspectQueryRequest request) {
310350
return submitRequest(request, new ProspectQueryResponseParser());
311351
}
352+
/**
353+
* Make API request to delete prospects.
354+
* @param request Request definition.
355+
* @return true if success, false if error.
356+
*/
357+
public boolean prospectDelete(final ProspectDeleteRequest request) {
358+
submitRequest(request, new StringResponseParser());
359+
return true;
360+
}
312361

313362
/**
314363
* Clean up instance, releasing any resources held internally.
315364
*/
316365
public void close() {
317366
getRestClient().close();
318367
}
368+
319369
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.darksci.pardot.api.parser;
2+
3+
import java.io.IOException;
4+
5+
/**
6+
* Simple pass through parser.
7+
*/
8+
public class StringResponseParser implements ResponseParser<String> {
9+
@Override
10+
public String parseResponse(final String responseStr) throws IOException {
11+
// avoid NPE
12+
if (responseStr == null) {
13+
return "";
14+
}
15+
return responseStr;
16+
}
17+
}

src/main/java/com/darksci/pardot/api/parser/prospect/ProspectQueryResponseParser.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.darksci.pardot.api.parser.JacksonFactory;
44
import com.darksci.pardot.api.parser.ResponseParser;
5-
import com.darksci.pardot.api.response.campaign.CampaignQueryResponse;
65
import com.darksci.pardot.api.response.prospect.ProspectQueryResponse;
76

87
import java.io.IOException;

src/main/java/com/darksci/pardot/api/request/BaseRequest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.darksci.pardot.api.request;
22

3-
import com.darksci.pardot.api.request.email.EmailSendOneToOneRequest;
4-
53
import java.util.Collection;
64
import java.util.HashMap;
75
import java.util.HashSet;

src/main/java/com/darksci/pardot/api/request/email/EmailSendOneToOneRequest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.darksci.pardot.api.request.BaseRequest;
44

55
import java.util.Collection;
6-
import java.util.HashSet;
76

87
/**
98
* For sending 1-to-1 prospect emails via Pardot Api.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.darksci.pardot.api.request.prospect;
2+
3+
/**
4+
* For creating new Prospects using Pardot's API.
5+
*/
6+
public class ProspectCreateRequest extends ProspectModifyRequest<ProspectCreateRequest> {
7+
@Override
8+
public String getApiEndpoint() {
9+
return "prospect/do/create";
10+
}
11+
12+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.darksci.pardot.api.request.prospect;
2+
3+
import com.darksci.pardot.api.request.BaseRequest;
4+
5+
/**
6+
* For deleting Prospects using Pardot's API.
7+
*/
8+
public class ProspectDeleteRequest extends BaseRequest<ProspectDeleteRequest> {
9+
@Override
10+
public String getApiEndpoint() {
11+
return "prospect/do/delete";
12+
}
13+
14+
/**
15+
* Define which prospect to delete by Id.
16+
* @param prospectId Id of prospect to delete.
17+
* @return RequestBuilder
18+
*/
19+
public ProspectDeleteRequest withProspectId(final Long prospectId) {
20+
setParam("email", null);
21+
return setParam("id", prospectId);
22+
}
23+
24+
/**
25+
* Define which prospect to delete by email.
26+
* @param email Email of prospect to delete.
27+
* @return RequestBuilder
28+
*/
29+
public ProspectDeleteRequest withProspectEmail(final String email) {
30+
setParam("id", null);
31+
return setParam("email", email);
32+
}
33+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.darksci.pardot.api.request.prospect;
2+
3+
import com.darksci.pardot.api.request.BaseRequest;
4+
import com.darksci.pardot.api.response.prospect.Prospect;
5+
6+
/**
7+
* Abstract shared code between Create, Update, and Upsert Prospect operations.
8+
*/
9+
abstract class ProspectModifyRequest<T> extends BaseRequest<T> {
10+
11+
/**
12+
* Define the campaign you want to create in pardot.
13+
* @param prospect The prospect you want to create in pardot.
14+
* @return CampaignCreateRequest builder.
15+
*/
16+
public T withProspect(final Prospect prospect) {
17+
setParam("email", prospect.getEmail());
18+
setParam("first_name", prospect.getFirstName());
19+
setParam("last_name", prospect.getLastName());
20+
21+
setParam("id", prospect.getId());
22+
setParam("campaign_id", prospect.getCampaignId());
23+
setParam("salutation", prospect.getSalutation());
24+
setParam("company", prospect.getCompany());
25+
setParam("prospect_account_d", prospect.getProspectAccountId());
26+
27+
setParam("website", prospect.getWebsite());
28+
setParam("job_title", prospect.getJobTitle());
29+
setParam("department", prospect.getDepartment());
30+
setParam("country", prospect.getCountry());
31+
setParam("address_one", prospect.getAddressOne());
32+
setParam("address_two", prospect.getAddressTwo());
33+
setParam("city", prospect.getCity());
34+
setParam("state", prospect.getState());
35+
setParam("territory", prospect.getTerritory());
36+
setParam("zip", prospect.getZip());
37+
38+
setParam("phone", prospect.getPhone());
39+
setParam("fax", prospect.getFax());
40+
41+
setParam("source", prospect.getSource());
42+
setParam("annual_revenue", prospect.getAnnualRevenue());
43+
setParam("employees", prospect.getEmployees());
44+
setParam("industry", prospect.getIndustry());
45+
setParam("years_in_business", prospect.getYearsInBusiness());
46+
47+
// TODO add other fields? How to handle custom fields?
48+
49+
return (T) this;
50+
}
51+
}

src/main/java/com/darksci/pardot/api/request/prospect/ProspectQueryRequest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import com.darksci.pardot.api.request.BaseQueryRequest;
44
import com.darksci.pardot.api.request.DateParameter;
5-
import org.slf4j.Logger;
6-
import org.slf4j.LoggerFactory;
75

86
import java.util.Collection;
97
import java.util.stream.Collectors;

0 commit comments

Comments
 (0)