dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #34629
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 17760: Introduced class email. Added web api method for sending system notification emails.
------------------------------------------------------------
revno: 17760
committer: Lars Helge Overland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Sun 2014-12-21 18:57:33 +0100
message:
Introduced class email. Added web api method for sending system notification emails.
added:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/email/Email.java
modified:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/email/EmailService.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java
dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/email/DefaultEmailService.java
dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/DefaultMessageService.java
dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/setting/DefaultSystemSettingManager.java
dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/EmailController.java
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/email/Email.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/email/Email.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/email/Email.java 2014-12-21 17:57:33 +0000
@@ -0,0 +1,140 @@
+package org.hisp.dhis.email;
+
+/*
+ * Copyright (c) 2004-2014, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.util.Set;
+
+import org.hisp.dhis.common.BaseIdentifiableObject;
+import org.hisp.dhis.common.DxfNamespaces;
+import org.hisp.dhis.common.view.DetailedView;
+import org.hisp.dhis.common.view.ExportView;
+import org.hisp.dhis.user.User;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonView;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+
+/**
+ * @author Lars Helge Overland
+ */
+@JacksonXmlRootElement( localName = "email", namespace = DxfNamespaces.DXF_2_0 )
+public class Email
+{
+ private String subject;
+
+ private String text;
+
+ private User sender;
+
+ private Set<User> recipients;
+
+ // -------------------------------------------------------------------------
+ // Contructors
+ // -------------------------------------------------------------------------
+
+ public Email()
+ {
+ }
+
+ public Email( String subject, String text )
+ {
+ this.subject = subject;
+ this.text = text;
+ }
+
+ public Email( String subject, String text, User sender, Set<User> recipients )
+ {
+ this.subject = subject;
+ this.text = text;
+ this.sender = sender;
+ this.recipients = recipients;
+ }
+
+ // -------------------------------------------------------------------------
+ // Getters and setters
+ // -------------------------------------------------------------------------
+
+ @JsonProperty
+ @JsonView( { DetailedView.class, ExportView.class } )
+ @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 )
+ public String getSubject()
+ {
+ return subject;
+ }
+
+ public void setSubject( String subject )
+ {
+ this.subject = subject;
+ }
+
+ @JsonProperty
+ @JsonView( { DetailedView.class, ExportView.class } )
+ @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 )
+ public String getText()
+ {
+ return text;
+ }
+
+ public void setText( String text )
+ {
+ this.text = text;
+ }
+
+ @JsonProperty
+ @JsonSerialize( as = BaseIdentifiableObject.class )
+ @JsonView( { DetailedView.class, ExportView.class } )
+ @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 )
+ public User getSender()
+ {
+ return sender;
+ }
+
+ public void setSender( User sender )
+ {
+ this.sender = sender;
+ }
+
+ @JsonProperty
+ @JsonSerialize( contentAs = BaseIdentifiableObject.class )
+ @JsonView( { DetailedView.class, ExportView.class } )
+ @JacksonXmlElementWrapper( localName = "recipients", namespace = DxfNamespaces.DXF_2_0 )
+ @JacksonXmlProperty( localName = "recipient", namespace = DxfNamespaces.DXF_2_0 )
+ public Set<User> getRecipients()
+ {
+ return recipients;
+ }
+
+ public void setRecipients( Set<User> recipients )
+ {
+ this.recipients = recipients;
+ }
+}
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/email/EmailService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/email/EmailService.java 2014-06-16 14:31:54 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/email/EmailService.java 2014-12-21 17:57:33 +0000
@@ -28,10 +28,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-import org.hisp.dhis.user.User;
-
-import java.util.Set;
-
/**
* @author Halvdan Hoem Grelland <halvdanhg@xxxxxxxxx>
*/
@@ -46,28 +42,24 @@
/**
* Sends an email to the recipient user from the sender.
*
- * @param subject the subject text of the email.
- * @param text the text (body) of the email.
- * @param sender the sender of the email.
- * @param recipient the recipient of the email.
- * @param forceSend if true the email is sent regardless of the recipients' email notification settings.
- */
- void sendEmail( String subject, String text, User sender, User recipient, boolean forceSend );
-
- /**
- * Sends an email to multiple recipients from the sender.
- *
- * @param subject the subject text of the email.
- * @param text the text (body) of the email.
- * @param sender the sender of the email.
- * @param recipients the recipients of the email.
- * @param forceSend if true the email is sent regardless of the email notification settings of the recipients.
- */
- void sendEmail( String subject, String text, User sender, Set<User> recipients, boolean forceSend);
+ * @param email the email to send.
+ */
+ void sendEmail( Email email );
/**
* Sends an automatically generated email message to the current user.
* Useful for testing the SMTP configuration of the system.
*/
- void sendTestEmail( );
+ void sendTestEmail();
+
+ /**
+ * Sends an email using the system notification email as recipient. Requires
+ * that a valid system notification email address has been specified. Only
+ * the subject and text properties of the given email are read.
+ *
+ * @param subject the subject text of the email.
+ * @param text the text (body) of the email.
+ * @return true if an email was sent, false if not.
+ */
+ boolean sendSystemEmail( Email email );
}
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java 2014-11-25 12:35:16 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java 2014-12-21 17:57:33 +0000
@@ -184,6 +184,8 @@
boolean selfRegistrationNoRecaptcha();
boolean emailEnabled();
+
+ boolean systemNotificationEmailValid();
String googleAnalyticsUA();
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/email/DefaultEmailService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/email/DefaultEmailService.java 2014-08-27 09:49:23 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/email/DefaultEmailService.java 2014-12-21 17:57:33 +0000
@@ -28,16 +28,17 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-import java.util.HashSet;
-import java.util.Set;
-
import org.apache.commons.lang.StringUtils;
import org.hisp.dhis.message.MessageSender;
import org.hisp.dhis.setting.SystemSettingManager;
+import org.hisp.dhis.system.util.ValidationUtils;
import org.hisp.dhis.user.CurrentUserService;
import org.hisp.dhis.user.User;
+import org.hisp.dhis.user.UserCredentials;
import org.springframework.transaction.annotation.Transactional;
+import com.google.common.collect.Sets;
+
/**
* @author Halvdan Hoem Grelland <halvdanhg@xxxxxxxxx>
*/
@@ -85,26 +86,44 @@
}
@Override
- public void sendEmail( String subject, String text, User sender, User recipient, boolean forceSend )
- {
- Set<User> recipients = new HashSet<>();
- recipients.add( recipient );
-
- emailMessageSender.sendMessage( subject, text, sender, new HashSet<>( recipients ), forceSend );
- }
-
- @Override
- public void sendEmail( String subject, String text, User sender, Set<User> recipients, boolean forceSend )
- {
- emailMessageSender.sendMessage( subject, text, sender, new HashSet<>( recipients ), forceSend );
- }
-
- @Override
- public void sendTestEmail( )
+ public void sendEmail( Email email )
+ {
+ emailMessageSender.sendMessage( email.getSubject(), email.getText(), email.getSender(), email.getRecipients(), true );
+ }
+
+ @Override
+ public void sendTestEmail()
{
String instanceName = StringUtils.defaultIfBlank( (String) systemSettingManager.getSystemSetting(
SystemSettingManager.KEY_APPLICATION_TITLE ), TEST_DEFAULT_SENDER );
- sendEmail( TEST_EMAIL_SUBJECT, TEST_EMAIL_TEXT + instanceName, null, currentUserService.getCurrentUser(), true );
+ Email email = new Email( TEST_EMAIL_SUBJECT, TEST_EMAIL_TEXT + instanceName, null, Sets.newHashSet( currentUserService.getCurrentUser() ) );
+
+ sendEmail( email );
+ }
+
+ @Override
+ public boolean sendSystemEmail( Email email )
+ {
+ String recipient = (String) systemSettingManager.getSystemSetting( SystemSettingManager.KEY_SYSTEM_NOTIFICATIONS_EMAIL );
+ String appTitle = (String) systemSettingManager.getSystemSetting( SystemSettingManager.KEY_APPLICATION_TITLE );
+
+ if ( recipient == null || !ValidationUtils.emailIsValid( recipient ) )
+ {
+ return false;
+ }
+
+ User user = new User();
+ UserCredentials credentials = new UserCredentials();
+ credentials.setUsername( recipient );
+ user.setEmail( recipient );
+
+ User sender = new User();
+ sender.setFirstName( StringUtils.trimToEmpty( appTitle ) );
+ sender.setSurname( recipient );
+
+ emailMessageSender.sendMessage( email.getSubject(), email.getText(), sender, Sets.newHashSet( user ), true );
+
+ return true;
}
}
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/DefaultMessageService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/DefaultMessageService.java 2014-11-25 20:22:50 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/DefaultMessageService.java 2014-12-21 17:57:33 +0000
@@ -33,24 +33,20 @@
import java.util.List;
import java.util.Set;
-import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hisp.dhis.configuration.ConfigurationService;
import org.hisp.dhis.dataset.CompleteDataSetRegistration;
import org.hisp.dhis.dataset.DataSet;
-import org.hisp.dhis.setting.SystemSettingManager;
-import org.hisp.dhis.system.util.ValidationUtils;
+import org.hisp.dhis.email.Email;
+import org.hisp.dhis.email.EmailService;
import org.hisp.dhis.system.velocity.VelocityManager;
import org.hisp.dhis.user.CurrentUserService;
import org.hisp.dhis.user.User;
-import org.hisp.dhis.user.UserCredentials;
import org.hisp.dhis.user.UserGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-import com.google.common.collect.Sets;
-
/**
* @author Lars Helge Overland
*/
@@ -89,20 +85,13 @@
this.configurationService = configurationService;
}
- private SystemSettingManager systemSettingManager;
-
- public void setSystemSettingManager( SystemSettingManager systemSettingManager )
- {
- this.systemSettingManager = systemSettingManager;
- }
-
- private MessageSender emailMessageSender;
-
- public void setEmailMessageSender( MessageSender emailMessageSender )
- {
- this.emailMessageSender = emailMessageSender;
- }
+ private EmailService emailService;
+ public void setEmailService( EmailService emailService )
+ {
+ this.emailService = emailService;
+ }
+
private List<MessageSender> messageSenders;
@Autowired
@@ -190,31 +179,8 @@
@Override
public int sendSystemNotification( String subject, String text )
{
- String email = (String) systemSettingManager.getSystemSetting( SystemSettingManager.KEY_SYSTEM_NOTIFICATIONS_EMAIL );
- String appTitle = (String) systemSettingManager.getSystemSetting( SystemSettingManager.KEY_APPLICATION_TITLE );
-
- // ---------------------------------------------------------------------
- // Send email to system notification email address
- // ---------------------------------------------------------------------
-
- if ( email != null && ValidationUtils.emailIsValid( email ) )
- {
- User user = new User();
- UserCredentials credentials = new UserCredentials();
- credentials.setUsername( email );
- user.setEmail( email );
-
- User sender = new User();
- sender.setFirstName( StringUtils.trimToEmpty( appTitle ) );
- sender.setSurname( email );
-
- emailMessageSender.sendMessage( subject, text, sender, Sets.newHashSet( user ), true );
- }
-
- // ---------------------------------------------------------------------
- // Send feedback
- // ---------------------------------------------------------------------
-
+ emailService.sendSystemEmail( new Email( subject, text ) );
+
return sendFeedback( subject, text, null );
}
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/setting/DefaultSystemSettingManager.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/setting/DefaultSystemSettingManager.java 2014-10-16 06:17:19 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/setting/DefaultSystemSettingManager.java 2014-12-21 17:57:33 +0000
@@ -29,6 +29,7 @@
*/
import org.apache.commons.lang.StringUtils;
+import org.hisp.dhis.system.util.ValidationUtils;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
@@ -198,6 +199,14 @@
}
@Override
+ public boolean systemNotificationEmailValid()
+ {
+ String address = (String) getSystemSetting( KEY_SYSTEM_NOTIFICATIONS_EMAIL );
+
+ return address != null && ValidationUtils.emailIsValid( address );
+ }
+
+ @Override
public String googleAnalyticsUA()
{
return StringUtils.trimToNull( (String) getSystemSetting( KEY_GOOGLE_ANALYTICS_UA ) );
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml 2014-12-19 15:42:38 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml 2014-12-21 17:57:33 +0000
@@ -629,8 +629,7 @@
<property name="messageConversationStore" ref="org.hisp.dhis.message.MessageConversationStore" />
<property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
<property name="configurationService" ref="org.hisp.dhis.configuration.ConfigurationService" />
- <property name="systemSettingManager" ref="org.hisp.dhis.setting.SystemSettingManager" />
- <property name="emailMessageSender" ref="emailMessageSender" />
+ <property name="emailService" ref="org.hisp.dhis.email.EmailService" />
</bean>
<bean id="emailMessageSender" class="org.hisp.dhis.message.EmailMessageSender">
=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/EmailController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/EmailController.java 2014-11-11 12:51:06 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/EmailController.java 2014-12-21 17:57:33 +0000
@@ -28,17 +28,19 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+import javax.servlet.http.HttpServletResponse;
+
+import org.hisp.dhis.email.Email;
import org.hisp.dhis.email.EmailService;
+import org.hisp.dhis.setting.SystemSettingManager;
import org.hisp.dhis.user.CurrentUserService;
import org.hisp.dhis.webapi.utils.ContextUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
/**
* @author Halvdan Hoem Grelland <halvdanhg@xxxxxxxxx>
*/
@@ -57,27 +59,54 @@
@Autowired
private CurrentUserService currentUserService;
+
+ @Autowired
+ private SystemSettingManager systemSettingManager;
@RequestMapping( value = "/test", method = RequestMethod.POST )
- public void sendTestEmail( HttpServletRequest request, HttpServletResponse response )
+ public void sendTestEmail( HttpServletResponse response )
{
String userEmail = currentUserService.getCurrentUser().getEmail();
boolean smtpConfigured = emailService.emailEnabled();
boolean userEmailConfigured = userEmail != null && !userEmail.isEmpty();
- if ( smtpConfigured && userEmailConfigured )
- {
- emailService.sendTestEmail();
-
- ContextUtils.okResponse( response, "A test email was sent to " + userEmail );
- }
- else if ( !smtpConfigured )
+ if ( !smtpConfigured )
{
ContextUtils.conflictResponse( response, "Could not send test email, SMTP server not configured" );
+ return;
}
- else
+
+ if ( !userEmailConfigured )
{
ContextUtils.conflictResponse( response, "Could not send test email, no email configured for current user" );
- }
+ return;
+ }
+
+ emailService.sendTestEmail();
+
+ ContextUtils.okResponse( response, "Test email was sent to " + userEmail );
+ }
+
+ @RequestMapping( value = "/notification", method = RequestMethod.POST )
+ public void sendSystemNotificationEmail( @RequestBody Email email, HttpServletResponse response )
+ {
+ boolean smtpConfigured = emailService.emailEnabled();
+ boolean systemNotificationEmailValid = systemSettingManager.systemNotificationEmailValid();
+
+ if ( !smtpConfigured )
+ {
+ ContextUtils.conflictResponse( response, "Could not send email, SMTP server not configured" );
+ return;
+ }
+
+ if ( !systemNotificationEmailValid )
+ {
+ ContextUtils.conflictResponse( response, "Could not send email, system notification email address not set or not valid" );
+ return;
+ }
+
+ emailService.sendSystemEmail( email );
+
+ ContextUtils.okResponse( response, "System notification email sent" );
}
}