From 6d987e0dd18ef830484641166a816661f4b16074 Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Sun, 27 Mar 2016 08:02:14 -0700 Subject: Adding the update_individual API --- .../java/com/p4square/ccbapi/CCBAPIClient.java | 34 +++++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'src/main/java/com/p4square/ccbapi/CCBAPIClient.java') diff --git a/src/main/java/com/p4square/ccbapi/CCBAPIClient.java b/src/main/java/com/p4square/ccbapi/CCBAPIClient.java index ee309c6..404253a 100644 --- a/src/main/java/com/p4square/ccbapi/CCBAPIClient.java +++ b/src/main/java/com/p4square/ccbapi/CCBAPIClient.java @@ -2,11 +2,15 @@ package com.p4square.ccbapi; import com.p4square.ccbapi.exception.CCBErrorResponseException; import com.p4square.ccbapi.model.*; +import com.p4square.ccbapi.serializer.AddressFormSerializer; +import com.p4square.ccbapi.serializer.IndividualProfileSerializer; +import com.p4square.ccbapi.serializer.PhoneFormSerializer; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -23,6 +27,8 @@ public class CCBAPIClient implements CCBAPI { private static final Map EMPTY_MAP = Collections.emptyMap(); + private static final IndividualProfileSerializer INDIVIDUAL_PROFILE_SERIALIZER = new IndividualProfileSerializer(); + private final URI apiBaseUri; private final HTTPInterface httpClient; private final CCBXmlBinder xmlBinder; @@ -119,12 +125,27 @@ public class CCBAPIClient implements CCBAPI { } // Send the request and parse the response. - return makeRequest(serviceName, params, EMPTY_MAP, GetIndividualProfilesResponse.class); + return makeRequest(serviceName, params, null, GetIndividualProfilesResponse.class); } @Override public GetCustomFieldLabelsResponse getCustomFieldLabels() throws IOException { - return makeRequest("custom_field_labels", EMPTY_MAP, EMPTY_MAP, GetCustomFieldLabelsResponse.class); + return makeRequest("custom_field_labels", EMPTY_MAP, null, GetCustomFieldLabelsResponse.class); + } + + @Override + public UpdateIndividualProfileResponse updateIndividualProfile(UpdateIndividualProfileRequest request) + throws IOException { + + if (request.getIndividualId() == 0) { + throw new IllegalArgumentException("individualId must be set on the request."); + } + + final Map params = Collections.singletonMap("individual_id", + String.valueOf(request.getIndividualId())); + final String form = INDIVIDUAL_PROFILE_SERIALIZER.encode(request); + + return makeRequest("update_individual", params, form, UpdateIndividualProfileResponse.class); } /** @@ -164,10 +185,15 @@ public class CCBAPIClient implements CCBAPI { * @throws IOException if an error occurs. */ private T makeRequest(final String api, final Map params, - final Map form, final Class clazz) + final String form, final Class clazz) throws IOException { - final InputStream entity = httpClient.sendPostRequest(makeURI(api, params), form); + byte[] payload = null; + if (form != null) { + payload = form.getBytes(StandardCharsets.UTF_8); + } + + final InputStream entity = httpClient.sendPostRequest(makeURI(api, params), payload); try { T response = xmlBinder.bindResponseXML(entity, clazz); if (response.getErrors() != null && response.getErrors().size() > 0) { -- cgit v1.2.3