UNOMI-47 : Once per profile handled in the mailing action, because event updatedProfile is not persisted
Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/2d58c953 Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/2d58c953 Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/2d58c953 Branch: refs/heads/master Commit: 2d58c953bfd1c494afd32f0e366588e05696daa9 Parents: 3e094f1 Author: Abdelkader Midani <[email protected]> Authored: Wed Aug 3 12:40:40 2016 +0200 Committer: Quentin Lamerand <[email protected]> Committed: Thu Aug 4 19:02:06 2016 +0200 ---------------------------------------------------------------------- plugins/mail/pom.xml | 6 ++++ .../plugins/mail/actions/SendMailAction.java | 31 ++++++++++++++++++++ .../META-INF/cxs/actions/sendMailAction.json | 16 ++++++++++ .../resources/OSGI-INF/blueprint/blueprint.xml | 4 +++ 4 files changed, 57 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/2d58c953/plugins/mail/pom.xml ---------------------------------------------------------------------- diff --git a/plugins/mail/pom.xml b/plugins/mail/pom.xml index fcc431e..7bb2eca 100644 --- a/plugins/mail/pom.xml +++ b/plugins/mail/pom.xml @@ -31,6 +31,12 @@ <dependencies> <dependency> + <groupId>org.apache.unomi</groupId> + <artifactId>unomi-persistence-spi</artifactId> + <version>1.1.0-incubating-SNAPSHOT</version> + <scope>provided</scope> + </dependency> + <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> </dependency> http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/2d58c953/plugins/mail/src/main/java/org/apache/unomi/plugins/mail/actions/SendMailAction.java ---------------------------------------------------------------------- diff --git a/plugins/mail/src/main/java/org/apache/unomi/plugins/mail/actions/SendMailAction.java b/plugins/mail/src/main/java/org/apache/unomi/plugins/mail/actions/SendMailAction.java index af22211..278418d 100644 --- a/plugins/mail/src/main/java/org/apache/unomi/plugins/mail/actions/SendMailAction.java +++ b/plugins/mail/src/main/java/org/apache/unomi/plugins/mail/actions/SendMailAction.java @@ -22,25 +22,35 @@ import org.apache.commons.mail.EmailException; import org.apache.commons.mail.HtmlEmail; import org.apache.commons.mail.ImageHtmlEmail; import org.apache.unomi.api.Event; +import org.apache.unomi.api.Profile; import org.apache.unomi.api.actions.Action; import org.apache.unomi.api.actions.ActionExecutor; import org.apache.unomi.api.services.EventService; +import org.apache.unomi.persistence.spi.PersistenceService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.stringtemplate.v4.ST; import java.net.MalformedURLException; import java.net.URL; +import java.util.HashMap; +import java.util.Map; public class SendMailAction implements ActionExecutor { private static final Logger logger = LoggerFactory.getLogger(SendMailAction.class.getName()); + private PersistenceService persistenceService; + private String mailServerHostName; private int mailServerPort; private String mailServerUsername; private String mailServerPassword; private boolean mailServerSSLOnConnect = true; + public void setPersistenceService(PersistenceService persistenceService) { + this.persistenceService = persistenceService; + } + public void setMailServerHostName(String mailServerHostName) { this.mailServerHostName = mailServerHostName; } @@ -62,6 +72,9 @@ public class SendMailAction implements ActionExecutor { } public int execute(Action action, Event event) { + String notifType = (String) action.getParameterValues().get("notificationType"); + String notifTypeId = (String) action.getParameterValues().get("notificationTypeId"); + Boolean notifyOnce = (Boolean) action.getParameterValues().get("notifyOncePerProfile"); String from = (String) action.getParameterValues().get("from"); String to = (String) action.getParameterValues().get("to"); String cc = (String) action.getParameterValues().get("cc"); @@ -69,6 +82,24 @@ public class SendMailAction implements ActionExecutor { String subject = (String) action.getParameterValues().get("subject"); String template = (String) action.getParameterValues().get("template"); + Map profileNotif = (HashMap) event.getProfile().getSystemProperties().get("notificationAck"); + if (profileNotif != null && profileNotif.get(notifType) != null && ((HashMap) profileNotif.get(notifType)).get(notifTypeId) != null) { + Integer notifTypeAck = (Integer) ((HashMap) profileNotif.get(notifType) ).get(notifTypeId); + if(notifyOnce.booleanValue() && notifTypeAck > 0){ + logger.info("Notification "+notifType+" already sent for the profile "+event.getProfileId()); + return EventService.NO_CHANGE; + } + } else { + Map notification = profileNotif!=null?profileNotif:new HashMap(); + notification.put(notifType, notification.get(notifType)!=null?notification.get(notifType):new HashMap()); + Integer notifTypeAck = (Integer) ((HashMap) notification.get(notifType) ).get(notifTypeId); + if(notifTypeAck == null){ + ((HashMap) notification.get(notifType) ).put(notifTypeId, 1); + } + event.getProfile().getSystemProperties().put("notificationAck", notification); + persistenceService.update(event.getProfile().getItemId(), null, Profile.class, "systemProperties", event.getProfile().getSystemProperties()); + } + ST stringTemplate = new ST(template); stringTemplate.add("profile", event.getProfile()); stringTemplate.add("event", event); http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/2d58c953/plugins/mail/src/main/resources/META-INF/cxs/actions/sendMailAction.json ---------------------------------------------------------------------- diff --git a/plugins/mail/src/main/resources/META-INF/cxs/actions/sendMailAction.json b/plugins/mail/src/main/resources/META-INF/cxs/actions/sendMailAction.json index c2c9152..cfd1679 100644 --- a/plugins/mail/src/main/resources/META-INF/cxs/actions/sendMailAction.json +++ b/plugins/mail/src/main/resources/META-INF/cxs/actions/sendMailAction.json @@ -11,6 +11,22 @@ "actionExecutor": "sendMail", "parameters": [ { + "id": "notificationType", + "type": "string", + "multivalued": false + }, + { + "id": "notificationTypeId", + "type": "string", + "multivalued": false + }, + { + "id": "notifyOncePerProfile", + "type": "boolean", + "multivalued": false, + "defaultValue": false + }, + { "id": "from", "type": "string", "multivalued": false http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/2d58c953/plugins/mail/src/main/resources/OSGI-INF/blueprint/blueprint.xml ---------------------------------------------------------------------- diff --git a/plugins/mail/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/plugins/mail/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 0cbde8d..e8e1849 100644 --- a/plugins/mail/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/plugins/mail/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -35,6 +35,7 @@ <!-- Action executors --> <bean id="sendMailActionImpl" class="org.apache.unomi.plugins.mail.actions.SendMailAction"> + <property name="persistenceService" ref="persistenceService"/> <property name="mailServerHostName" value="${mail.server.hostname}"/> <property name="mailServerPort" value="${mail.server.port}"/> <property name="mailServerUsername" value="${mail.server.username}"/> @@ -47,4 +48,7 @@ </service-properties> </service> + <reference id="persistenceService" + interface="org.apache.unomi.persistence.spi.PersistenceService"/> + </blueprint>
