summaryrefslogtreecommitdiff
path: root/src/main/java/com/p4square/ccbapi
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/p4square/ccbapi')
-rw-r--r--src/main/java/com/p4square/ccbapi/serializer/AbstractFormSerializer.java14
-rw-r--r--src/main/java/com/p4square/ccbapi/serializer/AddressFormSerializer.java9
-rw-r--r--src/main/java/com/p4square/ccbapi/serializer/FormBuilder.java119
-rw-r--r--src/main/java/com/p4square/ccbapi/serializer/IndividualProfileSerializer.java76
-rw-r--r--src/main/java/com/p4square/ccbapi/serializer/PhoneFormSerializer.java4
5 files changed, 178 insertions, 44 deletions
diff --git a/src/main/java/com/p4square/ccbapi/serializer/AbstractFormSerializer.java b/src/main/java/com/p4square/ccbapi/serializer/AbstractFormSerializer.java
index 06a83a1..969b11d 100644
--- a/src/main/java/com/p4square/ccbapi/serializer/AbstractFormSerializer.java
+++ b/src/main/java/com/p4square/ccbapi/serializer/AbstractFormSerializer.java
@@ -24,6 +24,20 @@ public abstract class AbstractFormSerializer<T> implements Serializer<T> {
return sb.toString();
}
+ @Override
+ public void encode(final T obj, final StringBuilder sb) {
+ FormBuilder builder = new FormBuilder(sb);
+ encode(obj, builder);
+ }
+
+ /**
+ * This method performs the actual serialize of T into a URL encoded form.
+ *
+ * @param obj The object to serialize
+ * @param builder The FormBuilder to use.
+ */
+ protected abstract void encode(final T obj, final FormBuilder builder);
+
/**
* Append a field to the form.
*
diff --git a/src/main/java/com/p4square/ccbapi/serializer/AddressFormSerializer.java b/src/main/java/com/p4square/ccbapi/serializer/AddressFormSerializer.java
index 00af004..22ed5c2 100644
--- a/src/main/java/com/p4square/ccbapi/serializer/AddressFormSerializer.java
+++ b/src/main/java/com/p4square/ccbapi/serializer/AddressFormSerializer.java
@@ -8,7 +8,14 @@ import java.net.URLEncoder;
/**
* Encode an Address object as form data for CCB.
*/
-public class AddressFormSerializer extends AbstractFormSerializer<Address> {
+public class AddressFormSerializer implements Serializer<Address> {
+
+ @Override
+ public String encode(final Address address) {
+ final StringBuilder sb = new StringBuilder();
+ encode(address, sb);
+ return sb.toString();
+ }
@Override
public void encode(final Address address, final StringBuilder builder) {
diff --git a/src/main/java/com/p4square/ccbapi/serializer/FormBuilder.java b/src/main/java/com/p4square/ccbapi/serializer/FormBuilder.java
new file mode 100644
index 0000000..b9f59d7
--- /dev/null
+++ b/src/main/java/com/p4square/ccbapi/serializer/FormBuilder.java
@@ -0,0 +1,119 @@
+package com.p4square.ccbapi.serializer;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * Utility for building URL encoded form payloads.
+ */
+public class FormBuilder {
+
+ /**
+ * This is the datetime format specified by the CCB API Doc.
+ */
+ private static final DateTimeFormatter DATE_TIME_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+ private final StringBuilder builder;
+
+ /**
+ * Construct a new FormBuilder.
+ */
+ public FormBuilder() {
+ this(new StringBuilder());
+ }
+
+ /**
+ * Construct a new FormBuilder which will append fields to the given StringBuilder.
+ *
+ * @param builder The StringBuilder to append to.
+ */
+ public FormBuilder(StringBuilder builder) {
+ this.builder = builder;
+ }
+
+ /**
+ * This methods provides access to the StringBuilder.
+ *
+ * @return The StringBuilder passed in at construct time.
+ */
+ public StringBuilder getStringBuilder() {
+ return builder;
+ }
+
+ /**
+ * Build the entire URL encoded form.
+ *
+ * @return All form fields as a URL encoded string.
+ */
+ public String build() {
+ return builder.toString();
+ }
+
+ /**
+ * Append a field to the form.
+ *
+ * @param key The form key, which must be URLEncoded before calling this method.
+ * @param value The value associated with the key. The value will be URLEncoded by this method.
+ */
+ public void appendField(final String key, final String value) {
+ if (builder.length() > 0) {
+ builder.append("&");
+ }
+
+ try {
+ builder.append(key).append("=").append(URLEncoder.encode(value, "UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ throw new AssertionError("UTF-8 encoding should always be available.");
+ }
+ }
+
+ /**
+ * Append an integer field to the form.
+ *
+ * @param key The form key, which must be URLEncoded before calling this method.
+ * @param value The value associated with the key.
+ */
+ public void appendField(final String key, final int value) {
+ if (builder.length() > 0) {
+ builder.append("&");
+ }
+ builder.append(key).append("=").append(value);
+ }
+
+ /**
+ * Append a boolean field to the form.
+ *
+ * @param key The form key, which must be URLEncoded before calling this method.
+ * @param value The value associated with the key.
+ */
+ public void appendField(final String key, final boolean value) {
+ if (builder.length() > 0) {
+ builder.append("&");
+ }
+ builder.append(key).append("=").append(value ? "true" : "false");
+ }
+
+ /**
+ * Append a LocalDate field to the form.
+ *
+ * @param key The form key, which must be URLEncoded before calling this method.
+ * @param value The value associated with the key.
+ */
+ public void appendField(final String key, final LocalDate value) {
+ appendField(key, value.toString());
+
+ }
+
+ /**
+ * Append a LocalDateTime field to the form.
+ *
+ * @param key The form key, which must be URLEncoded before calling this method.
+ * @param value The value associated with the key.
+ */
+ public void appendField(final String key, final LocalDateTime value) {
+ appendField(key, DATE_TIME_FORMAT.format(value));
+ }
+}
diff --git a/src/main/java/com/p4square/ccbapi/serializer/IndividualProfileSerializer.java b/src/main/java/com/p4square/ccbapi/serializer/IndividualProfileSerializer.java
index 52b1a44..c9cc095 100644
--- a/src/main/java/com/p4square/ccbapi/serializer/IndividualProfileSerializer.java
+++ b/src/main/java/com/p4square/ccbapi/serializer/IndividualProfileSerializer.java
@@ -16,85 +16,85 @@ public class IndividualProfileSerializer extends AbstractFormSerializer<UpdateIn
private static final PhoneFormSerializer PHONE_FORM_SERIALIZER = new PhoneFormSerializer();
@Override
- public void encode(final UpdateIndividualProfileRequest request, final StringBuilder builder) {
+ public void encode(final UpdateIndividualProfileRequest request, final FormBuilder builder) {
// Encode any fields which are present.
if (request.getSyncId() != null) {
- appendField(builder, "sync_id", request.getSyncId());
+ builder.appendField("sync_id", request.getSyncId());
}
if (request.getOtherId() != null) {
- appendField(builder, "other_id", request.getOtherId());
+ builder.appendField("other_id", request.getOtherId());
}
if (request.getGivingNumber() != null) {
- appendField(builder, "giving_number", request.getGivingNumber());
+ builder.appendField("giving_number", request.getGivingNumber());
}
if (request.getFirstName() != null) {
- appendField(builder, "first_name", request.getFirstName());
+ builder.appendField("first_name", request.getFirstName());
}
if (request.getLastName() != null) {
- appendField(builder, "last_name", request.getLastName());
+ builder.appendField("last_name", request.getLastName());
}
if (request.getMiddleName() != null) {
- appendField(builder, "middle_name", request.getMiddleName());
+ builder.appendField("middle_name", request.getMiddleName());
}
if (request.getLegalFirstName() != null) {
- appendField(builder, "legal_first_name", request.getLegalFirstName());
+ builder.appendField("legal_first_name", request.getLegalFirstName());
}
if (request.getSalutation() != null) {
- appendField(builder, "salutation", request.getSalutation());
+ builder.appendField("salutation", request.getSalutation());
}
if (request.getSuffix() != null) {
- appendField(builder, "suffix", request.getSuffix());
+ builder.appendField("suffix", request.getSuffix());
}
if (request.getFamilyId() != null) {
- appendField(builder, "family_id", request.getFamilyId());
+ builder.appendField("family_id", request.getFamilyId());
}
if (request.getFamilyPosition() != null) {
- appendField(builder, "family_position", request.getFamilyPosition().getCode());
+ builder.appendField("family_position", request.getFamilyPosition().getCode());
}
if (request.getMaritalStatus() != null) {
- appendField(builder, "marital_status", request.getMaritalStatus().getCode());
+ builder.appendField("marital_status", request.getMaritalStatus().getCode());
}
if (request.getGender() != null) {
- appendField(builder, "gender", request.getGender().getCode());
+ builder.appendField("gender", request.getGender().getCode());
}
if (request.getBirthday() != null) {
- appendField(builder, "birthday", request.getBirthday());
+ builder.appendField("birthday", request.getBirthday());
}
if (request.getAnniversary() != null) {
- appendField(builder, "anniversary", request.getAnniversary());
+ builder.appendField("anniversary", request.getAnniversary());
}
if (request.getDeceased() != null) {
- appendField(builder, "deceased", request.getDeceased());
+ builder.appendField("deceased", request.getDeceased());
}
if (request.getMembershipDate() != null) {
- appendField(builder, "membership_date", request.getMembershipDate());
+ builder.appendField("membership_date", request.getMembershipDate());
}
if (request.getMembershipEnd() != null) {
- appendField(builder, "membership_end", request.getMembershipEnd());
+ builder.appendField("membership_end", request.getMembershipEnd());
}
if (request.getEmail() != null) {
- appendField(builder, "email", request.getEmail());
+ builder.appendField("email", request.getEmail());
}
if (request.getEmergencyContactName() != null) {
- appendField(builder, "emergency_contact_name", request.getEmergencyContactName());
+ builder.appendField("emergency_contact_name", request.getEmergencyContactName());
}
if (request.getAllergies() != null) {
- appendField(builder, "allergies", request.getAllergies());
+ builder.appendField("allergies", request.getAllergies());
}
if (request.getConfirmedNoAllergies() != null) {
- appendField(builder, "confirmed_no_allergies", request.getConfirmedNoAllergies());
+ builder.appendField("confirmed_no_allergies", request.getConfirmedNoAllergies());
}
if (request.getBaptized() != null) {
- appendField(builder, "baptized", request.getBaptized());
+ builder.appendField("baptized", request.getBaptized());
}
if (request.getModifiedById() != null) {
- appendField(builder, "modifier_id", request.getModifiedById());
+ builder.appendField("modifier_id", request.getModifiedById());
}
// Encode all the addresses.
if (request.getAddresses() != null) {
for (Address address : request.getAddresses()) {
- ADDRESS_FORM_SERIALIZER.encode(address, builder);
+ ADDRESS_FORM_SERIALIZER.encode(address, builder.getStringBuilder());
}
}
@@ -106,20 +106,14 @@ public class IndividualProfileSerializer extends AbstractFormSerializer<UpdateIn
}
// Add the User-defined fields.
- for (Map.Entry<String, String> entry : request.getCustomTextFields().entrySet()) {
- if (entry.getValue() != null) {
- appendField(builder, entry.getKey(), entry.getValue());
- }
- }
- for (Map.Entry<String, LocalDate> entry : request.getCustomDateFields().entrySet()) {
- if (entry.getValue() != null) {
- appendField(builder, entry.getKey(), entry.getValue());
- }
- }
- for (Map.Entry<String, Integer> entry : request.getCustomPulldownFields().entrySet()) {
- if (entry.getValue() != null) {
- appendField(builder, entry.getKey(), entry.getValue());
- }
- }
+ request.getCustomTextFields().entrySet().stream()
+ .filter(entry -> entry.getValue() != null)
+ .forEach(entry -> builder.appendField(entry.getKey(), entry.getValue()));
+ request.getCustomDateFields().entrySet().stream()
+ .filter(entry -> entry.getValue() != null)
+ .forEach(entry -> builder.appendField(entry.getKey(), entry.getValue()));
+ request.getCustomPulldownFields().entrySet().stream()
+ .filter(entry -> entry.getValue() != null)
+ .forEach(entry -> builder.appendField(entry.getKey(), entry.getValue()));
}
}
diff --git a/src/main/java/com/p4square/ccbapi/serializer/PhoneFormSerializer.java b/src/main/java/com/p4square/ccbapi/serializer/PhoneFormSerializer.java
index 3569321..360e330 100644
--- a/src/main/java/com/p4square/ccbapi/serializer/PhoneFormSerializer.java
+++ b/src/main/java/com/p4square/ccbapi/serializer/PhoneFormSerializer.java
@@ -7,7 +7,7 @@ import com.p4square.ccbapi.model.Phone;
*/
public class PhoneFormSerializer extends AbstractFormSerializer<Phone> {
@Override
- public void encode(final Phone phone, final StringBuilder builder) {
+ public void encode(final Phone phone, final FormBuilder builder) {
// Sanity check.
if (phone.getType() == null) {
throw new IllegalArgumentException("Phone type cannot be null");
@@ -19,6 +19,6 @@ public class PhoneFormSerializer extends AbstractFormSerializer<Phone> {
} else {
key = phone.getType().toString().toLowerCase() + "_phone";
}
- appendField(builder, key, phone.getNumber());
+ builder.appendField(key, phone.getNumber());
}
}