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/11 17:44:08 UTC
[2/4] incubator-unomi git commit: Externalized mapping function and
change the cfg file by adding option to map or not
Externalized mapping function and change the cfg file by adding option to map or not
Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/58685c6c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/58685c6c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/58685c6c
Branch: refs/heads/master
Commit: 58685c6c1b746a1704514d23a2213d7900fe0461
Parents: 6835957
Author: Dinesh <di...@ynov.com>
Authored: Fri Dec 1 16:33:05 2017 +0100
Committer: Dinesh <di...@ynov.com>
Committed: Fri Dec 1 16:33:05 2017 +0100
----------------------------------------------------------------------
.../mailchimp/services/MailChimpService.java | 13 +-
.../services/internal/MailChimpServiceImpl.java | 238 ++++++++++---------
.../resources/OSGI-INF/blueprint/blueprint.xml | 1 +
.../org.apache.unomi.mailchimpconnector.cfg | 3 +-
4 files changed, 145 insertions(+), 110 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/58685c6c/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/MailChimpService.java
----------------------------------------------------------------------
diff --git a/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/MailChimpService.java b/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/MailChimpService.java
index 4abe3c6..132d369 100644
--- a/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/MailChimpService.java
+++ b/extensions/unomi-mailchimp/services/src/main/java/org/apache/unomi/mailchimp/services/MailChimpService.java
@@ -20,6 +20,7 @@ package org.apache.unomi.mailchimp.services;
import org.apache.unomi.api.Profile;
import org.apache.unomi.api.actions.Action;
+import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
@@ -56,7 +57,17 @@ public interface MailChimpService {
*
* @param profile @see org.apache.unomi.api.Profile
* @param action @see org.apache.unomi.api.actions.Action
- * @return ue if the visitor is successfully unsbscribed to a MailChimp list.
+ * @return true if the visitor is successfully unsbscribed to a MailChimp list.
*/
MailChimpResult unsubscribeFromMCList(Profile profile, Action action);
+
+ /**
+ * This function will update merger properties of MailChimp list.
+ *
+ * @param action @see org.apache.unomi.api.actions.Action
+ * @return true if the visitor is successfully unsbscribed to a MailChimp list.
+ */
+ MailChimpResult updateMergerPropertiesForList(Profile profile,Action action,JSONObject nameStruct);
}
+
+
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/58685c6c/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 0110d17..f1c50fa 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
@@ -57,82 +57,9 @@ public class MailChimpServiceImpl implements MailChimpService {
private String apiKey;
private String urlSubDomain;
private String listMergeField;
+ private Boolean mappingMergeFieldsActivation;
private CloseableHttpClient httpClient;
-
- private MailChimpResult updateMergerPropertiesForList(Action action) {
-
- String newMergefields[] = StringUtils.split(listMergeField, ",");
- if (newMergefields.length <= 0) {
- logger.error("List of merger fields is not correctly configured");
- return null;
- }
-
- String listIdentifier = (String) action.getParameterValues().get("listIdentifier");
- if (StringUtils.isBlank(listIdentifier)) {
- logger.error("MailChimp list identifier not found");
- return null;
- }
-
- JsonNode currentMergeFields = getAllMergeFieldofOneMCList(listIdentifier);
- if (currentMergeFields == null) {
- logger.error("Could't get MailChimp list's merge fields");
- return null;
- }
-
- for (String newMergeField : newMergefields) {
-
- String tabMergerField[] = StringUtils.split(newMergeField, ":");
-
- if (tabMergerField.length == 3) {
-
- boolean isPropertyPresent = false;
- for (JsonNode currentMergeField : currentMergeFields.get("merge_fields")) {
- if (currentMergeField.has("tag") && tabMergerField[0].toUpperCase().equals(currentMergeField.get("tag").asText().toUpperCase())) {
- logger.info("Property is already present tag: {}, name: {}, type: {}", tabMergerField[0], tabMergerField[1], tabMergerField[2]);
- isPropertyPresent = true;
- }
- }
- if (!isPropertyPresent) {
- JSONObject bodyMergerField = new JSONObject();
- bodyMergerField.put("tag", tabMergerField[0]);
- bodyMergerField.put("name", tabMergerField[1]);
- bodyMergerField.put("type", tabMergerField[2]);
- JsonNode response = HttpUtils.executePostRequest(httpClient, getBaseUrl() + "/lists/" + listIdentifier + "/merge-fields", getHeaders(), bodyMergerField.toString());
- if (response != null && response.has("merge_id")) {
- logger.info("property added {}", bodyMergerField);
- } else {
- logger.warn("couldn't add property {}", bodyMergerField);
- }
- }
-
- } else {
- logger.error("List of merger fields is not correctly configured");
- return MailChimpResult.ERROR;
- }
- }
- return MailChimpResult.UPDATED;
- }
-
- private JsonNode getAllMergeFieldofOneMCList(String listIdentifier) {
- if (!isMailChimpConnectorConfigured() && StringUtils.isBlank(listMergeField)) {
- return null;
- }
-
- if (StringUtils.isBlank(listIdentifier)) {
- logger.error("MailChimp list identifier not found");
- return null;
- }
-
- JsonNode currentMergeFields = HttpUtils.executeGetRequest(httpClient, getBaseUrl() + "/lists/" + listIdentifier + "/merge-fields", getHeaders());
-
- if (currentMergeFields == null || !currentMergeFields.has("merge_fields")) {
- logger.error("Can't find merge_fields from the response, the response was {}", currentMergeFields);
- return null;
- }
- return currentMergeFields;
- }
-
@Override
public List<HashMap<String, String>> getAllLists() {
List<HashMap<String, String>> mcLists = new ArrayList<>();
@@ -169,31 +96,42 @@ public class MailChimpServiceImpl implements MailChimpService {
logger.error("MailChimp list identifier not found");
return MailChimpResult.ERROR;
}
-
-
JsonNode member = isMemberOfMailChimpList(profile, action);
+ JSONObject nameStruct = new JSONObject();
if (member != null && member.has(STATUS)) {
+ JSONObject body = new JSONObject();
+ if (mappingMergeFieldsActivation) {
+ if (updateMergerPropertiesForList(profile,action,nameStruct) != MailChimpResult.UPDATED) {
+ logger.error("Problem with the mapping properties");
+ return MailChimpResult.NO_CHANGE;
+ }
+
+// nameStruct = updatePropertiesValue(profile, listIdentifier, nameStruct);
+// if (nameStruct == null) {
+// logger.error("Couldn't update mapping properties properties");
+// return MailChimpResult.NO_CHANGE;
+// }
+ body.put(MERGE_FIELDS, nameStruct);
+ }
if (member.get(STATUS).asText().equals(UNSUBSCRIBED)) {
logger.info("The visitor is already in the MailChimp list, his status is unsubscribed");
-
- JSONObject nameStruct = new JSONObject();
-
- if (updateMergerPropertiesForList(action) == MailChimpResult.UPDATED) {
- nameStruct = updatePropertiesValue(profile, listIdentifier, nameStruct);
- }
- JSONObject body = new JSONObject();
body.put(STATUS, SUBSCRIBED);
+ }
- body.put(MERGE_FIELDS, nameStruct);
+ return updateSubscription(listIdentifier, body.toString(), member, true);
+ }
- return updateSubscription(listIdentifier, body.toString(), member, true);
+ if (mappingMergeFieldsActivation) {
+ if (updateMergerPropertiesForList(profile,action,nameStruct) != MailChimpResult.UPDATED) {
+ logger.error("Problem with the mapping properties");
+ return MailChimpResult.NO_CHANGE;
}
- return MailChimpResult.NO_CHANGE;
- }
- JSONObject nameStruct = new JSONObject();
- if (updateMergerPropertiesForList(action) == MailChimpResult.UPDATED) {
- nameStruct = updatePropertiesValue(profile, listIdentifier, nameStruct);
+// nameStruct = updatePropertiesValue(profile, listIdentifier, nameStruct);
+// if (nameStruct == null) {
+// logger.warn("The visitor will be add without mapping properties");
+// }
}
+
nameStruct.put(FNAME, profile.getProperty(FIRST_NAME).toString());
nameStruct.put(LNAME, profile.getProperty(LAST_NAME).toString());
@@ -209,7 +147,6 @@ public class MailChimpServiceImpl implements MailChimpService {
JSONObject body = new JSONObject();
body.put(MEMBERS, dataMember);
-
JsonNode response = HttpUtils.executePostRequest(httpClient, getBaseUrl() + "/lists/" + listIdentifier, getHeaders(), body.toString());
if (response == null || (response.has(ERRORS) && response.get(ERRORS).size() > 0)) {
logger.error("Error when adding user to MailChimp list, list identifier was {} and response was {}", listIdentifier, response);
@@ -218,23 +155,6 @@ public class MailChimpServiceImpl implements MailChimpService {
return MailChimpResult.UPDATED;
}
- private JSONObject updatePropertiesValue(Profile profile, String listIdentifier, JSONObject nameStruct) {
- JsonNode currentMergeFields = getAllMergeFieldofOneMCList(listIdentifier);
- if (currentMergeFields != null) {
- for (JsonNode currentMergeField : currentMergeFields.get("merge_fields")) {
- if (currentMergeField.has("tag")) {
- Map<String, Object> properties = profile.getProperties();
-
- for (Map.Entry<String, Object> entry : properties.entrySet()) {
- if (entry.getKey().toUpperCase().equals(currentMergeField.get("tag").asText())) {
- nameStruct.put(currentMergeField.get("tag").asText(), entry.getValue().toString());
- }
- }
- }
- }
- }
- return nameStruct;
- }
@Override
public MailChimpResult removeFromMCList(Profile profile, Action action) {
@@ -283,6 +203,104 @@ public class MailChimpServiceImpl implements MailChimpService {
return updateSubscription(listIdentifier, body.toString(), member, false);
}
+
+ @Override
+ public MailChimpResult updateMergerPropertiesForList(Profile profile,Action action,JSONObject nameStruct) {
+
+ String newMergefields[] = StringUtils.split(listMergeField, ",");
+ if (newMergefields.length <= 0) {
+ logger.error("List of merger fields is not correctly configured");
+ return MailChimpResult.ERROR;
+ }
+
+ String listIdentifier = (String) action.getParameterValues().get("listIdentifier");
+ if (StringUtils.isBlank(listIdentifier)) {
+ logger.error("MailChimp list identifier not found");
+ return MailChimpResult.ERROR;
+ }
+
+ JsonNode currentMergeFields = getAllMergeFieldofOneMCList(listIdentifier);
+ if (currentMergeFields == null) {
+ logger.error("Could't get MailChimp list's merge fields");
+ return MailChimpResult.ERROR;
+ }
+
+ for (String newMergeField : newMergefields) {
+
+ String tabMergerField[] = StringUtils.split(newMergeField, ":");
+
+ if (tabMergerField.length == 4) {
+
+ boolean isPropertyPresent = false;
+ for (JsonNode currentMergeField : currentMergeFields.get("merge_fields")) {
+ if (currentMergeField.has("tag") && tabMergerField[0].toUpperCase().equals(currentMergeField.get("tag").asText().toUpperCase())) {
+ logger.info("Property is already present MailChimp's tag: {}, tag(for Apache Unomi) {}, name: {}, type: {}", tabMergerField[0], tabMergerField[1], tabMergerField[2], tabMergerField[3]);
+ isPropertyPresent = true;
+ }
+ }
+ if (!isPropertyPresent) {
+ JSONObject bodyMergerField = new JSONObject();
+ bodyMergerField.put("tag", tabMergerField[1]);
+ bodyMergerField.put("name", tabMergerField[2]);
+ bodyMergerField.put("type", tabMergerField[3]);
+ JsonNode response = HttpUtils.executePostRequest(httpClient, getBaseUrl() + "/lists/" + listIdentifier + "/merge-fields", getHeaders(), bodyMergerField.toString());
+ if (response != null && response.has("merge_id")) {
+ logger.info("property added {}", bodyMergerField);
+ } else {
+ logger.warn("couldn't add property {}", bodyMergerField);
+ }
+ }
+
+ } else {
+ logger.error("List of merger fields is not correctly configured");
+ return MailChimpResult.ERROR;
+ }
+ }
+ nameStruct = updatePropertiesValue(profile, listIdentifier, nameStruct);
+ if (nameStruct == null) {
+ logger.warn("The visitor will be add without mapping properties");
+ }
+ return MailChimpResult.UPDATED;
+
+ }
+
+ private JsonNode getAllMergeFieldofOneMCList(String listIdentifier) {
+ if (!isMailChimpConnectorConfigured() && StringUtils.isBlank(listMergeField)) {
+ return null;
+ }
+
+ if (StringUtils.isBlank(listIdentifier)) {
+ logger.error("MailChimp list identifier not found");
+ return null;
+ }
+
+ JsonNode currentMergeFields = HttpUtils.executeGetRequest(httpClient, getBaseUrl() + "/lists/" + listIdentifier + "/merge-fields", getHeaders());
+
+ if (currentMergeFields == null || !currentMergeFields.has("merge_fields")) {
+ logger.error("Can't find merge_fields from the response, the response was {}", currentMergeFields);
+ return null;
+ }
+ return currentMergeFields;
+ }
+
+ private JSONObject updatePropertiesValue(Profile profile, String listIdentifier, JSONObject nameStruct) {
+ JsonNode currentMergeFields = getAllMergeFieldofOneMCList(listIdentifier);
+ if (currentMergeFields != null) {
+ for (JsonNode currentMergeField : currentMergeFields.get("merge_fields")) {
+ if (currentMergeField.has("tag")) {
+ Map<String, Object> properties = profile.getProperties();
+
+ for (Map.Entry<String, Object> entry : properties.entrySet()) {
+ if (entry.getKey().toUpperCase().equals(currentMergeField.get("tag").asText())) {
+ nameStruct.put(currentMergeField.get("tag").asText(), entry.getValue().toString());
+ }
+ }
+ }
+ }
+ }
+ return nameStruct;
+ }
+
private void initHttpClient() {
if (httpClient == null) {
httpClient = HttpUtils.initHttpClient();
@@ -366,4 +384,8 @@ public class MailChimpServiceImpl implements MailChimpService {
public void setListMergeField(String listMergeFields) {
this.listMergeField = listMergeFields;
}
+
+ public void setMappingMergeFieldsActivation(Boolean mappingMergeFieldsActivation) {
+ this.mappingMergeFieldsActivation = mappingMergeFieldsActivation;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/58685c6c/extensions/unomi-mailchimp/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/extensions/unomi-mailchimp/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/unomi-mailchimp/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index b94e3dc..0ffcccb 100644
--- a/extensions/unomi-mailchimp/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/extensions/unomi-mailchimp/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -34,6 +34,7 @@
<property name="apiKey" value="${mailChimpConnector.apiKey}"/>
<property name="urlSubDomain" value="${mailChimpConnector.url.subDomain}"/>
<property name="listMergeField" value="${mailChimpConnector.list.merge-fields}"/>
+ <property name="mappingMergeFieldsActivation" value="${mailChimpConnector.list.merge-fields.activation}"/>
</bean>
<service id="mailChimpService" ref="mailChimpServiceImpl" auto-export="interfaces"/>
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/58685c6c/extensions/unomi-mailchimp/services/src/main/resources/org.apache.unomi.mailchimpconnector.cfg
----------------------------------------------------------------------
diff --git a/extensions/unomi-mailchimp/services/src/main/resources/org.apache.unomi.mailchimpconnector.cfg b/extensions/unomi-mailchimp/services/src/main/resources/org.apache.unomi.mailchimpconnector.cfg
index 8263c81..2c8d201 100644
--- a/extensions/unomi-mailchimp/services/src/main/resources/org.apache.unomi.mailchimpconnector.cfg
+++ b/extensions/unomi-mailchimp/services/src/main/resources/org.apache.unomi.mailchimpconnector.cfg
@@ -16,4 +16,5 @@
#
mailChimpConnector.apiKey=
mailChimpConnector.url.subDomain=
-mailChimpConnector.list.merge-fields=company:Company:text,phoneNumber:Phone Number:phone,jobTitle:Job Title:text,city:City:text,zipCode:Zip Code:zip,address:Address:address
+mailChimpConnector.list.merge-fields=COMPANY:company:Company:text,PHONENUMBE:phoneNumber:Phone Number:phone,JOBTITLE:jobTitle:Job Title:text,CITY:city:City:text,ZIPCODE:zipCode:Zip Code:zip,:ADDRESS:address:Address:address
+mailChimpConnector.list.merge-fields.activation=true