You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by dg...@apache.org on 2018/01/24 14:50:53 UTC

[1/3] incubator-unomi git commit: Change mandatory properties, refactor the isMemberOfMailChimpList function, using the email hash of the visitor instead email

Repository: incubator-unomi
Updated Branches:
  refs/heads/master 19f5f7ad2 -> 775337269


Change mandatory properties, refactor the isMemberOfMailChimpList function, using the email hash of the visitor instead email


Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/e7b09794
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/e7b09794
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/e7b09794

Branch: refs/heads/master
Commit: e7b09794cb11e95e79f06e854761bbce1a45870c
Parents: 19f5f7a
Author: Dinesh <di...@ynov.com>
Authored: Wed Jan 24 10:44:06 2018 +0100
Committer: Dinesh <di...@ynov.com>
Committed: Wed Jan 24 10:44:06 2018 +0100

----------------------------------------------------------------------
 extensions/unomi-mailchimp/README.md            |  15 +-
 .../unomi/mailchimp/services/HttpUtils.java     |  36 +++--
 .../services/internal/MailChimpServiceImpl.java | 142 ++++++++++---------
 3 files changed, 103 insertions(+), 90 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/e7b09794/extensions/unomi-mailchimp/README.md
----------------------------------------------------------------------
diff --git a/extensions/unomi-mailchimp/README.md b/extensions/unomi-mailchimp/README.md
index dc43c4d..0d6f525 100644
--- a/extensions/unomi-mailchimp/README.md
+++ b/extensions/unomi-mailchimp/README.md
@@ -65,27 +65,30 @@ This extension has 3 actions.
     ```
     
     MailChimp type supported are:
-    1. Date 
+    * Date 
      ```
         The format is (DD/MM/YYYY) or  (MM/DD/YYYY)
     ``` 
-    2. Birthday 
+    * Birthday 
      ```    
         The format is (DD/MM) or  (MM/DD)
      ```
-    3. Website or Text
+    * Website or Text
      ```
         They are text
      ```
-    4. Number 
+    * Number 
      ```
         The number will be parse into a Integer 
      ```
-    6. Phone
+    * Phone
      ```
         The North American format is not supported, use international
      ```
-    7. Address  
+    * Address 
+    
+    NOTE : Street, City, Country and Zip are mandatory properties, otherwise the address property will be skipped
+    
     Example:
     ```
         address<=>ADDRESS<=>addr1, 

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/e7b09794/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/HttpUtils.java
----------------------------------------------------------------------
diff --git a/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/HttpUtils.java b/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/HttpUtils.java
index d87fa5f..70290a4 100644
--- a/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/HttpUtils.java
+++ b/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/HttpUtils.java
@@ -60,12 +60,12 @@ public class HttpUtils {
         return addBodyAndExecuteRequest(httpClient, body, httpPost);
     }
 
-    public static JsonNode executeGetRequest(CloseableHttpClient httpClient, String url, Map<String, String> headers) {
+    public static JsonNode executeGetRequest(CloseableHttpClient httpClient, String url, Map<String, String> headers, boolean allow404Response) {
         HttpGet httpGet = new HttpGet(url);
 
         addHeaders(headers, httpGet);
 
-        return executeRequest(httpClient, httpGet);
+        return executeRequest(httpClient, httpGet, allow404Response);
     }
 
     public static JsonNode executeDeleteRequest(CloseableHttpClient httpClient, String url, Map<String, String> headers) {
@@ -73,7 +73,7 @@ public class HttpUtils {
 
         addHeaders(headers, httpDelete);
 
-        return executeRequest(httpClient, httpDelete);
+        return executeRequest(httpClient, httpDelete, false);
     }
 
     private static JsonNode addBodyAndExecuteRequest(CloseableHttpClient httpClient, String body, HttpEntityEnclosingRequestBase request) {
@@ -82,38 +82,43 @@ public class HttpUtils {
             stringEntity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
             request.setEntity(stringEntity);
 
-            return executeRequest(httpClient, request);
+            return executeRequest(httpClient, request, false);
         } catch (UnsupportedEncodingException e) {
             logger.error("Error when executing request", e);
             return null;
         }
     }
 
-    private static JsonNode executeRequest(CloseableHttpClient httpClient, HttpRequestBase request) {
+    private static JsonNode executeRequest(CloseableHttpClient httpClient, HttpRequestBase request, boolean allow404Response) {
         try {
             CloseableHttpResponse response = httpClient.execute(request);
 
-            return extractResponse(response);
+            return extractResponse(response, allow404Response);
         } catch (IOException e) {
             logger.error("Error when executing request", e);
             return null;
         }
     }
 
-    private static JsonNode extractResponse(CloseableHttpResponse response) {
+    private static JsonNode extractResponse(CloseableHttpResponse response, boolean allow404Response) {
         if (response != null) {
-            if (response.getStatusLine().getStatusCode() >= 400) {
-                logger.error("Error when communicating with MailChimp server, response code was {} and response message was {}", response.getStatusLine().getStatusCode(), response.getStatusLine().getReasonPhrase());
+            int statusCode = response.getStatusLine().getStatusCode();
+            if (((statusCode >= 400) && !allow404Response) || (allow404Response && (statusCode  >= 400 && statusCode != 404 ))) {
+                EntityUtils.consumeQuietly(response.getEntity());
+                logger.error("Error when communicating with MailChimp server, response code was {} and response message was {}", statusCode, response.getStatusLine().getReasonPhrase());
                 return null;
             }
 
             String responseString;
-            if (response.getStatusLine().getStatusCode() == 204) {
+            if (statusCode == 204) {
+                // The response is build for the delete member, because the Api return no content
                 responseString = ("{ \"response\": \" " + response.getStatusLine().toString() + "\" }");
             } else {
+                // Other request
                 try {
                     responseString = EntityUtils.toString(response.getEntity());
                 } catch (IOException e) {
+                    EntityUtils.consumeQuietly(response.getEntity());
                     logger.error("Error when parsing entity response", e);
                     return null;
                 }
@@ -123,18 +128,11 @@ public class HttpUtils {
             try {
                 JsonNode jsonNode = objectMapper.readTree(responseString);
 
-                if (response.getStatusLine().getStatusCode() != 204) {
-                    EntityUtils.consumeQuietly(response.getEntity());
-                } else {
-                    try {
-                        response.close();
-                    } catch (IOException e) {
-                        logger.error("Error when trying to close response", e);
-                    }
-                }
+                EntityUtils.consumeQuietly(response.getEntity());
 
                 return jsonNode;
             } catch (IOException e) {
+                EntityUtils.consumeQuietly(response.getEntity());
                 logger.error("Error when parsing response with ObjectMapper", e);
                 return null;
             }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/e7b09794/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
----------------------------------------------------------------------
diff --git a/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java b/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
index 23fcfcc..d493455 100644
--- a/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
+++ b/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
@@ -18,6 +18,7 @@
 package org.apache.unomi.mailchimp.services.internal;
 
 import com.fasterxml.jackson.databind.JsonNode;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.unomi.api.Profile;
@@ -32,7 +33,10 @@ import org.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 public class MailChimpServiceImpl implements MailChimpService {
     private static final String LISTS = "lists";
@@ -43,9 +47,6 @@ public class MailChimpServiceImpl implements MailChimpService {
     private static final String EMAIL_ADDRESS = "email_address";
     private static final String EMAIL = "email";
     private static final String ERRORS = "errors";
-    private static final String FIRST_NAME = "firstName";
-    private static final String LAST_NAME = "lastName";
-    private static final String MEMBERS = "members";
     private static final String LIST_IDENTIFIER = "listIdentifier";
     private static final String STATUS = "status";
     private static final String SUBSCRIBED = "subscribed";
@@ -56,6 +57,25 @@ public class MailChimpServiceImpl implements MailChimpService {
     private static final String DATE_FORMAT = "date_format";
     private static final String UNOMI_ID = "unomiId";
     private static final String MC_SUB_TAG_NAME = "mcSubTagName";
+    private static final String ADDR_1 = "addr1";
+    private static final String ADDR_2 = "addr2";
+    private static final String CITY = "city";
+    private static final String COUNTRY = "country";
+    private static final String STATE = "state";
+    private static final String ZIP = "zip";
+    private static final String ADDRESS = "address";
+    private static final String DATE = "date";
+    private static final String MM_DD_YYYY = "MM/DD/YYYY";
+    private static final String MM_DD_YYYY1 = "MM/dd/yyyy";
+    private static final String DD_MM_YYYY = "dd/MM/yyyy";
+    private static final String BIRTHDAY = "birthday";
+    private static final String MM_DD = "MM/DD";
+    private static final String MM_DD_LOWERCASE = "MM/dd";
+    private static final String DD_MM = "dd/MM";
+    private static final String ACCEPT = "Accept";
+    private static final String AUTHORIZATION = "Authorization";
+    private static final String SEPARATOR_CHARS_PROPERTIES = ",";
+    private static final String SEPARATOR_CHARS_PROPERTY = "<=>";
     private static Logger logger = LoggerFactory.getLogger(MailChimpServiceImpl.class);
     private String apiKey;
     private String urlSubDomain;
@@ -68,7 +88,7 @@ public class MailChimpServiceImpl implements MailChimpService {
     public List<HashMap<String, String>> getAllLists() {
         List<HashMap<String, String>> mcLists = new ArrayList<>();
         if (isMailChimpConnectorConfigured()) {
-            JsonNode response = HttpUtils.executeGetRequest(httpClient, getBaseUrl() + "/lists", getHeaders());
+            JsonNode response = HttpUtils.executeGetRequest(httpClient, getBaseUrl() + "/lists", getHeaders(), false);
             if (response != null) {
                 if (response.has(LISTS) && response.get(LISTS).size() > 0) {
                     for (JsonNode list : response.get(LISTS)) {
@@ -82,7 +102,7 @@ public class MailChimpServiceImpl implements MailChimpService {
                         }
                     }
                 } else {
-                    logger.info("No list to return, response was {}", response.asText());
+                    logger.debug("No list to return, response was {}", response.asText());
                 }
             }
         }
@@ -91,7 +111,8 @@ public class MailChimpServiceImpl implements MailChimpService {
 
     @Override
     public MailChimpResult addToMCList(Profile profile, Action action) {
-        if (!isMailChimpConnectorConfigured() || !visitorHasMandatoryProperties(profile)) {
+        if (!isMailChimpConnectorConfigured() || profile.getProperty(EMAIL) == null) {
+            logger.error("The visitor hasn't email address");
             return MailChimpResult.ERROR;
         }
 
@@ -102,7 +123,7 @@ public class MailChimpServiceImpl implements MailChimpService {
         if (currentMember != null && currentMember.has(STATUS)) {
             JSONObject body = new JSONObject();
             if (currentMember.get(STATUS).asText().equals(UNSUBSCRIBED)) {
-                logger.info("The visitor is already in the MailChimp list, his status is unsubscribed");
+                logger.debug("The visitor is already in the MailChimp list, his status is unsubscribed");
                 body.put(STATUS, SUBSCRIBED);
             }
 
@@ -133,7 +154,7 @@ public class MailChimpServiceImpl implements MailChimpService {
 
     @Override
     public MailChimpResult removeFromMCList(Profile profile, Action action) {
-        if (!isMailChimpConnectorConfigured() || !visitorHasMandatoryProperties(profile)) {
+        if (!isMailChimpConnectorConfigured() || profile.getProperty(EMAIL) == null) {
             return MailChimpResult.ERROR;
         }
 
@@ -159,7 +180,7 @@ public class MailChimpServiceImpl implements MailChimpService {
 
     @Override
     public MailChimpResult unsubscribeFromMCList(Profile profile, Action action) {
-        if (!isMailChimpConnectorConfigured() || !visitorHasMandatoryProperties(profile)) {
+        if (!isMailChimpConnectorConfigured() || profile.getProperty(EMAIL) == null) {
             return MailChimpResult.ERROR;
         }
 
@@ -185,7 +206,7 @@ public class MailChimpServiceImpl implements MailChimpService {
 
     @Override
     public MailChimpResult updateMCProfileProperties(Profile profile, Action action) {
-        if (!isMailChimpConnectorConfigured() || !visitorHasMandatoryProperties(profile)) {
+        if (!isMailChimpConnectorConfigured() || profile.getProperty(EMAIL) == null) {
             return MailChimpResult.ERROR;
         }
 
@@ -241,46 +262,26 @@ public class MailChimpServiceImpl implements MailChimpService {
                         String unomiId = fieldInfo.get(UNOMI_ID);
                         if (profile.getProperty(unomiId) != null) {
                             switch (mergeFieldDefinition.get(TYPE).asText()) {
-                                case "address":
+                                case ADDRESS:
                                     if (mergeFields.has(mcTagName)) {
                                         mergeFields.getJSONObject(mcTagName).put(fieldInfo.get(MC_SUB_TAG_NAME), profile.getProperty(unomiId));
                                     } else {
                                         JSONObject address = new JSONObject();
-                                        address.put("addr1", "");
-                                        address.put("addr2", "");
-                                        address.put("city", "");
-                                        address.put("country", "");
-                                        address.put("state", "");
-                                        address.put("zip", "");
+                                        address.put(ADDR_1, "");
+                                        address.put(ADDR_2, "");
+                                        address.put(CITY, "");
+                                        address.put(COUNTRY, "");
+                                        address.put(STATE, "");
+                                        address.put(ZIP, "");
                                         address.put(fieldInfo.get(MC_SUB_TAG_NAME), profile.getProperty(unomiId));
                                         mergeFields.put(mcTagName, address);
                                     }
                                     break;
-                                case "date":
-                                    if (mergeFieldDefinition.has(OPTIONS) && mergeFieldDefinition.get(OPTIONS).has(DATE_FORMAT)) {
-                                        String mcDateFormat = mergeFieldDefinition.get(OPTIONS).get(DATE_FORMAT).asText();
-                                        DateTime dateTime = new DateTime(profile.getProperty(unomiId));
-                                        DateTimeFormatter dateTimeFormatter;
-                                        if (mcDateFormat.equals("MM/DD/YYYY")) {
-                                            dateTimeFormatter = DateTimeFormat.forPattern("MM/dd/yyyy");
-                                        } else {
-                                            dateTimeFormatter = DateTimeFormat.forPattern("dd/MM/yyyy");
-                                        }
-                                        mergeFields.put(mcTagName, dateTimeFormatter.print(dateTime));
-                                    }
+                                case DATE:
+                                    formatDate(profile, mergeFields, mergeFieldDefinition, mcTagName, unomiId, MM_DD_YYYY, MM_DD_YYYY1, DD_MM_YYYY);
                                     break;
-                                case "birthday":
-                                    if (mergeFieldDefinition.has(OPTIONS) && mergeFieldDefinition.get(OPTIONS).has(DATE_FORMAT)) {
-                                        String mcDateFormat = mergeFieldDefinition.get(OPTIONS).get(DATE_FORMAT).asText();
-                                        DateTime dateTime = new DateTime(profile.getProperty(unomiId));
-                                        DateTimeFormatter dateTimeFormatter;
-                                        if (mcDateFormat.equals("MM/DD")) {
-                                            dateTimeFormatter = DateTimeFormat.forPattern("MM/dd");
-                                        } else {
-                                            dateTimeFormatter = DateTimeFormat.forPattern("dd/MM");
-                                        }
-                                        mergeFields.put(mcTagName, dateTimeFormatter.print(dateTime));
-                                    }
+                                case BIRTHDAY:
+                                    formatDate(profile, mergeFields, mergeFieldDefinition, mcTagName, unomiId, MM_DD, MM_DD_LOWERCASE, DD_MM);
                                     break;
                                 default:
                                     mergeFields.put(mcTagName, profile.getProperty(unomiId));
@@ -288,8 +289,16 @@ public class MailChimpServiceImpl implements MailChimpService {
                             }
                         }
                     }
+                    if (mergeFieldDefinition.get(TYPE).asText().equals(ADDRESS) && mergeFields.has(mcTagName)
+                            && (StringUtils.isBlank(mergeFields.getJSONObject(mcTagName).get(ADDR_1).toString())
+                            || StringUtils.isBlank(mergeFields.getJSONObject(mcTagName).get(ZIP).toString())
+                            || StringUtils.isBlank(mergeFields.getJSONObject(mcTagName).get(CITY).toString())
+                            || StringUtils.isBlank(mergeFields.getJSONObject(mcTagName).get(COUNTRY).toString()))) {
+                            mergeFields.remove(mcTagName);
+                        logger.debug("Can't map the address property {}, one of the mandatory field is missing (addr1, zip, city, country)", mcTagName);
+                    }
                 } else {
-                    logger.warn("Found property {} in MC list, if you need this property please update mapping or add the property to your MC list", mcTagName);
+                    logger.debug("Found property {} in MC list, if you need this property please update mapping or add the property to your MC list", mcTagName);
                 }
             }
         }
@@ -297,8 +306,22 @@ public class MailChimpServiceImpl implements MailChimpService {
         return MailChimpResult.SUCCESS;
     }
 
+    private void formatDate(Profile profile, JSONObject mergeFields, JsonNode mergeFieldDefinition, String mcTagName, String unomiId, String mmDdYyyy, String mmDdYyyy1, String ddMmYyyy) {
+        if (mergeFieldDefinition.has(OPTIONS) && mergeFieldDefinition.get(OPTIONS).has(DATE_FORMAT)) {
+            String mcDateFormat = mergeFieldDefinition.get(OPTIONS).get(DATE_FORMAT).asText();
+            DateTime dateTime = new DateTime(profile.getProperty(unomiId));
+            DateTimeFormatter dateTimeFormatter;
+            if (mcDateFormat.equals(mmDdYyyy)) {
+                dateTimeFormatter = DateTimeFormat.forPattern(mmDdYyyy1);
+            } else {
+                dateTimeFormatter = DateTimeFormat.forPattern(ddMmYyyy);
+            }
+            mergeFields.put(mcTagName, dateTimeFormatter.print(dateTime));
+        }
+    }
+
     private JsonNode getMCListProperties(String listIdentifier) {
-        JsonNode currentMergeFields = HttpUtils.executeGetRequest(httpClient, getBaseUrl() + "/lists/" + listIdentifier + "/merge-fields", getHeaders());
+        JsonNode currentMergeFields = HttpUtils.executeGetRequest(httpClient, getBaseUrl() + "/lists/" + listIdentifier + "/merge-fields", getHeaders(), false);
         if (currentMergeFields == null || !currentMergeFields.has(MERGE_FIELDS)) {
             logger.error("Can't find merge_fields from the response, the response was {}", currentMergeFields);
             return null;
@@ -323,26 +346,15 @@ public class MailChimpServiceImpl implements MailChimpService {
         return false;
     }
 
-    private boolean visitorHasMandatoryProperties(Profile profile) {
-        if (profile.getProperty(FIRST_NAME) == null
-                || profile.getProperty(LAST_NAME) == null
-                || profile.getProperty(EMAIL) == null) {
-            logger.warn("Visitor mandatory properties are missing");
-            return false;
-        }
-        return true;
-    }
-
     private JsonNode isMemberOfMailChimpList(Profile profile, String listIdentifier) {
-
         String email = profile.getProperty(EMAIL).toString().toLowerCase();
-        JsonNode response = HttpUtils.executeGetRequest(httpClient, getBaseUrl() + "/lists/" + listIdentifier + "/members/", getHeaders());
+        String md5Hex = DigestUtils.md5Hex(email);
+
+        JsonNode response = HttpUtils.executeGetRequest(httpClient, getBaseUrl() + "/lists/" + listIdentifier + "/members/" + md5Hex, getHeaders(), true);
         if (response != null) {
-            if (response.has(MEMBERS)) {
-                for (JsonNode member : response.get(MEMBERS)) {
-                    if (member.get(EMAIL_ADDRESS).asText().toLowerCase().equals(email)) {
-                        return member;
-                    }
+            if (response.has(EMAIL_ADDRESS)) {
+                if (response.get(EMAIL_ADDRESS).asText().toLowerCase().equals(email)) {
+                    return response;
                 }
             }
         }
@@ -371,8 +383,8 @@ public class MailChimpServiceImpl implements MailChimpService {
 
     private HashMap<String, String> getHeaders() {
         HashMap<String, String> headers = new HashMap<>();
-        headers.put("Accept", "application/json");
-        headers.put("Authorization", "apikey " + apiKey);
+        headers.put(ACCEPT, "application/json");
+        headers.put(AUTHORIZATION, "apikey " + apiKey);
         return headers;
     }
 
@@ -387,11 +399,11 @@ public class MailChimpServiceImpl implements MailChimpService {
     public void setListMergeFieldMapping(String listMergeFields) {
         this.listMergeFieldMapping = new HashMap<>();
         if (StringUtils.isNotBlank(listMergeFields)) {
-            String mergeFields[] = StringUtils.split(listMergeFields, ",");
+            String mergeFields[] = StringUtils.split(listMergeFields, SEPARATOR_CHARS_PROPERTIES);
             if (mergeFields.length > 0) {
                 for (String mergeField : mergeFields) {
                     if (StringUtils.isNotBlank(mergeField)) {
-                        String mergeFieldInfo[] = StringUtils.split(mergeField, "<=>");
+                        String mergeFieldInfo[] = StringUtils.split(mergeField, SEPARATOR_CHARS_PROPERTY);
                         if (mergeFieldInfo.length > 0) {
                             Map<String, String> fieldInfo = new HashMap<>();
                             fieldInfo.put(UNOMI_ID, mergeFieldInfo[0]);


[2/3] incubator-unomi git commit: Change consents name and formatDate functions

Posted by dg...@apache.org.
Change consents name and formatDate functions


Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/68e291ad
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/68e291ad
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/68e291ad

Branch: refs/heads/master
Commit: 68e291ad4503cc2892a67ffc03516f6b05cc37de
Parents: e7b0979
Author: dinesh1996 <di...@ynov.com>
Authored: Wed Jan 24 15:17:02 2018 +0100
Committer: dinesh1996 <di...@ynov.com>
Committed: Wed Jan 24 15:17:02 2018 +0100

----------------------------------------------------------------------
 .../services/internal/MailChimpServiceImpl.java | 56 +++++++++++---------
 1 file changed, 31 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/68e291ad/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
----------------------------------------------------------------------
diff --git a/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java b/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
index d493455..bc4b76b 100644
--- a/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
+++ b/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
@@ -28,7 +28,6 @@ import org.apache.unomi.mailchimp.services.MailChimpResult;
 import org.apache.unomi.mailchimp.services.MailChimpService;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
 import org.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,6 +38,11 @@ import java.util.List;
 import java.util.Map;
 
 public class MailChimpServiceImpl implements MailChimpService {
+
+    private static Logger logger = LoggerFactory.getLogger(MailChimpServiceImpl.class);
+    
+    private static final String ACCEPT = "Accept";
+    private static final String AUTHORIZATION = "Authorization";
     private static final String LISTS = "lists";
     private static final String ID = "id";
     private static final String NAME = "name";
@@ -53,8 +57,6 @@ public class MailChimpServiceImpl implements MailChimpService {
     private static final String UNSUBSCRIBED = "unsubscribed";
     private static final String TAG = "tag";
     private static final String TYPE = "type";
-    private static final String OPTIONS = "options";
-    private static final String DATE_FORMAT = "date_format";
     private static final String UNOMI_ID = "unomiId";
     private static final String MC_SUB_TAG_NAME = "mcSubTagName";
     private static final String ADDR_1 = "addr1";
@@ -64,19 +66,19 @@ public class MailChimpServiceImpl implements MailChimpService {
     private static final String STATE = "state";
     private static final String ZIP = "zip";
     private static final String ADDRESS = "address";
+    private static final String DATE_FORMAT = "date_format";
+    private static final String OPTIONS = "options";
     private static final String DATE = "date";
     private static final String MM_DD_YYYY = "MM/DD/YYYY";
-    private static final String MM_DD_YYYY1 = "MM/dd/yyyy";
-    private static final String DD_MM_YYYY = "dd/MM/yyyy";
+    private static final String MC_BIRTDATE_MM_DD_YYYY = "MM/dd/yyyy";
+    private static final String MC_BIRTDATE_DD_MM_YYYY = "dd/MM/yyyy";
     private static final String BIRTHDAY = "birthday";
     private static final String MM_DD = "MM/DD";
-    private static final String MM_DD_LOWERCASE = "MM/dd";
-    private static final String DD_MM = "dd/MM";
-    private static final String ACCEPT = "Accept";
-    private static final String AUTHORIZATION = "Authorization";
+    private static final String MC_BIRTDAY_MM_DD = "MM/dd";
+    private static final String MC_BIRTDAY_DD_MM = "dd/MM";
     private static final String SEPARATOR_CHARS_PROPERTIES = ",";
     private static final String SEPARATOR_CHARS_PROPERTY = "<=>";
-    private static Logger logger = LoggerFactory.getLogger(MailChimpServiceImpl.class);
+   
     private String apiKey;
     private String urlSubDomain;
     private Map<String, List<Map<String, String>>> listMergeFieldMapping;
@@ -112,7 +114,7 @@ public class MailChimpServiceImpl implements MailChimpService {
     @Override
     public MailChimpResult addToMCList(Profile profile, Action action) {
         if (!isMailChimpConnectorConfigured() || profile.getProperty(EMAIL) == null) {
-            logger.error("The visitor hasn't email address");
+            logger.error("The visitor does not have an email address");
             return MailChimpResult.ERROR;
         }
 
@@ -278,10 +280,19 @@ public class MailChimpServiceImpl implements MailChimpService {
                                     }
                                     break;
                                 case DATE:
-                                    formatDate(profile, mergeFields, mergeFieldDefinition, mcTagName, unomiId, MM_DD_YYYY, MM_DD_YYYY1, DD_MM_YYYY);
+                                    if (mergeFieldDefinition.has(OPTIONS) && mergeFieldDefinition.get(OPTIONS).has(DATE_FORMAT)) {
+                                        DateTime unomiDate = new DateTime(profile.getProperty(unomiId));
+                                        String mcDateFormat = mergeFieldDefinition.get(OPTIONS).get(DATE_FORMAT).asText();
+                                        mergeFields.put(mcTagName,  formatDate(MM_DD_YYYY, MC_BIRTDATE_MM_DD_YYYY, MC_BIRTDATE_DD_MM_YYYY, mcDateFormat, unomiDate));
+                                    }
                                     break;
                                 case BIRTHDAY:
-                                    formatDate(profile, mergeFields, mergeFieldDefinition, mcTagName, unomiId, MM_DD, MM_DD_LOWERCASE, DD_MM);
+                                    if (mergeFieldDefinition.has(OPTIONS) && mergeFieldDefinition.get(OPTIONS).has(DATE_FORMAT)) {
+                                        DateTime unomiDate = new DateTime(profile.getProperty(unomiId));
+                                        String mcDateFormat = mergeFieldDefinition.get(OPTIONS).get(DATE_FORMAT).asText();
+                                        mergeFields.put(mcTagName,  formatDate(MM_DD_YYYY, MC_BIRTDATE_MM_DD_YYYY, MC_BIRTDATE_DD_MM_YYYY, mcDateFormat,unomiDate));
+                                    }
+
                                     break;
                                 default:
                                     mergeFields.put(mcTagName, profile.getProperty(unomiId));
@@ -294,7 +305,7 @@ public class MailChimpServiceImpl implements MailChimpService {
                             || StringUtils.isBlank(mergeFields.getJSONObject(mcTagName).get(ZIP).toString())
                             || StringUtils.isBlank(mergeFields.getJSONObject(mcTagName).get(CITY).toString())
                             || StringUtils.isBlank(mergeFields.getJSONObject(mcTagName).get(COUNTRY).toString()))) {
-                            mergeFields.remove(mcTagName);
+                        mergeFields.remove(mcTagName);
                         logger.debug("Can't map the address property {}, one of the mandatory field is missing (addr1, zip, city, country)", mcTagName);
                     }
                 } else {
@@ -306,20 +317,15 @@ public class MailChimpServiceImpl implements MailChimpService {
         return MailChimpResult.SUCCESS;
     }
 
-    private void formatDate(Profile profile, JSONObject mergeFields, JsonNode mergeFieldDefinition, String mcTagName, String unomiId, String mmDdYyyy, String mmDdYyyy1, String ddMmYyyy) {
-        if (mergeFieldDefinition.has(OPTIONS) && mergeFieldDefinition.get(OPTIONS).has(DATE_FORMAT)) {
-            String mcDateFormat = mergeFieldDefinition.get(OPTIONS).get(DATE_FORMAT).asText();
-            DateTime dateTime = new DateTime(profile.getProperty(unomiId));
-            DateTimeFormatter dateTimeFormatter;
-            if (mcDateFormat.equals(mmDdYyyy)) {
-                dateTimeFormatter = DateTimeFormat.forPattern(mmDdYyyy1);
-            } else {
-                dateTimeFormatter = DateTimeFormat.forPattern(ddMmYyyy);
-            }
-            mergeFields.put(mcTagName, dateTimeFormatter.print(dateTime));
+    private String formatDate(String mcDateFormatOption, String FranceLocalDateFormat, String UnitedStatesOfAmericaLocalDateFormat, String mcDateFormat, DateTime unomiDate) {
+        if (mcDateFormat.equals(mcDateFormatOption)) {
+           return   DateTimeFormat.forPattern(FranceLocalDateFormat).print(unomiDate);
+        } else {
+            return DateTimeFormat.forPattern(UnitedStatesOfAmericaLocalDateFormat).print(unomiDate);
         }
     }
 
+
     private JsonNode getMCListProperties(String listIdentifier) {
         JsonNode currentMergeFields = HttpUtils.executeGetRequest(httpClient, getBaseUrl() + "/lists/" + listIdentifier + "/merge-fields", getHeaders(), false);
         if (currentMergeFields == null || !currentMergeFields.has(MERGE_FIELDS)) {


[3/3] incubator-unomi git commit: Change consents name and formatDate function

Posted by dg...@apache.org.
Change consents name and formatDate function


Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/77533726
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/77533726
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/77533726

Branch: refs/heads/master
Commit: 775337269c11cf477d719da03cb08cb2855b67bf
Parents: 68e291a
Author: dinesh1996 <di...@ynov.com>
Authored: Wed Jan 24 15:48:28 2018 +0100
Committer: dinesh1996 <di...@ynov.com>
Committed: Wed Jan 24 15:48:28 2018 +0100

----------------------------------------------------------------------
 .../services/internal/MailChimpServiceImpl.java | 34 +++++++++-----------
 1 file changed, 15 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/77533726/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
----------------------------------------------------------------------
diff --git a/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java b/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
index bc4b76b..a704f99 100644
--- a/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
+++ b/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/internal/MailChimpServiceImpl.java
@@ -40,7 +40,7 @@ import java.util.Map;
 public class MailChimpServiceImpl implements MailChimpService {
 
     private static Logger logger = LoggerFactory.getLogger(MailChimpServiceImpl.class);
-    
+
     private static final String ACCEPT = "Accept";
     private static final String AUTHORIZATION = "Authorization";
     private static final String LISTS = "lists";
@@ -69,16 +69,16 @@ public class MailChimpServiceImpl implements MailChimpService {
     private static final String DATE_FORMAT = "date_format";
     private static final String OPTIONS = "options";
     private static final String DATE = "date";
-    private static final String MM_DD_YYYY = "MM/DD/YYYY";
-    private static final String MC_BIRTDATE_MM_DD_YYYY = "MM/dd/yyyy";
-    private static final String MC_BIRTDATE_DD_MM_YYYY = "dd/MM/yyyy";
+    private static final String MC_MM_DD_YYYY = "MM/DD/YYYY";
+    private static final String MM_DD_YYYY = "MM/dd/yyyy";
+    private static final String DD_MM_YYYY = "dd/MM/yyyy";
     private static final String BIRTHDAY = "birthday";
-    private static final String MM_DD = "MM/DD";
-    private static final String MC_BIRTDAY_MM_DD = "MM/dd";
-    private static final String MC_BIRTDAY_DD_MM = "dd/MM";
+    private static final String MC_MM_DD = "MM/DD";
+    private static final String MM_DD = "MM/dd";
+    private static final String DD_MM = "dd/MM";
     private static final String SEPARATOR_CHARS_PROPERTIES = ",";
     private static final String SEPARATOR_CHARS_PROPERTY = "<=>";
-   
+
     private String apiKey;
     private String urlSubDomain;
     private Map<String, List<Map<String, String>>> listMergeFieldMapping;
@@ -281,18 +281,13 @@ public class MailChimpServiceImpl implements MailChimpService {
                                     break;
                                 case DATE:
                                     if (mergeFieldDefinition.has(OPTIONS) && mergeFieldDefinition.get(OPTIONS).has(DATE_FORMAT)) {
-                                        DateTime unomiDate = new DateTime(profile.getProperty(unomiId));
-                                        String mcDateFormat = mergeFieldDefinition.get(OPTIONS).get(DATE_FORMAT).asText();
-                                        mergeFields.put(mcTagName,  formatDate(MM_DD_YYYY, MC_BIRTDATE_MM_DD_YYYY, MC_BIRTDATE_DD_MM_YYYY, mcDateFormat, unomiDate));
+                                        mergeFields.put(mcTagName, formatDate(mergeFieldDefinition.get(OPTIONS).get(DATE_FORMAT).asText(), profile.getProperty(unomiId)));
                                     }
                                     break;
                                 case BIRTHDAY:
                                     if (mergeFieldDefinition.has(OPTIONS) && mergeFieldDefinition.get(OPTIONS).has(DATE_FORMAT)) {
-                                        DateTime unomiDate = new DateTime(profile.getProperty(unomiId));
-                                        String mcDateFormat = mergeFieldDefinition.get(OPTIONS).get(DATE_FORMAT).asText();
-                                        mergeFields.put(mcTagName,  formatDate(MM_DD_YYYY, MC_BIRTDATE_MM_DD_YYYY, MC_BIRTDATE_DD_MM_YYYY, mcDateFormat,unomiDate));
+                                        mergeFields.put(mcTagName, formatDate(mergeFieldDefinition.get(OPTIONS).get(DATE_FORMAT).asText(), profile.getProperty(unomiId)));
                                     }
-
                                     break;
                                 default:
                                     mergeFields.put(mcTagName, profile.getProperty(unomiId));
@@ -317,11 +312,12 @@ public class MailChimpServiceImpl implements MailChimpService {
         return MailChimpResult.SUCCESS;
     }
 
-    private String formatDate(String mcDateFormatOption, String FranceLocalDateFormat, String UnitedStatesOfAmericaLocalDateFormat, String mcDateFormat, DateTime unomiDate) {
-        if (mcDateFormat.equals(mcDateFormatOption)) {
-           return   DateTimeFormat.forPattern(FranceLocalDateFormat).print(unomiDate);
+    private String formatDate(String mcDateFormat, Object date) {
+        DateTime dateTime = new DateTime(date);
+        if (StringUtils.contains(mcDateFormat, "/YYYY")) {
+            return DateTimeFormat.forPattern((mcDateFormat.equals(MC_MM_DD_YYYY) ? MM_DD_YYYY : DD_MM_YYYY)).print(dateTime);
         } else {
-            return DateTimeFormat.forPattern(UnitedStatesOfAmericaLocalDateFormat).print(unomiDate);
+            return DateTimeFormat.forPattern((mcDateFormat.equals(MC_MM_DD) ? MM_DD : DD_MM)).print(dateTime);
         }
     }