Author: chatellier Date: 2011-01-07 12:43:39 +0000 (Fri, 07 Jan 2011) New Revision: 486 Log: Envoi d'un mail apres la publication des resultats Modified: trunk/coser-business/pom.xml trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties trunk/coser-ui/src/main/java/fr/ifremer/coser/CoserConfig.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties trunk/coser-web/src/main/java/fr/ifremer/coser/web/ServiceFactory.java Modified: trunk/coser-business/pom.xml =================================================================== --- trunk/coser-business/pom.xml 2011-01-07 10:27:40 UTC (rev 485) +++ trunk/coser-business/pom.xml 2011-01-07 12:43:39 UTC (rev 486) @@ -56,6 +56,10 @@ </dependency> <dependency> <groupId>org.apache.commons</groupId> + <artifactId>commons-email</artifactId> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> <artifactId>commons-math</artifactId> </dependency> <dependency> Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2011-01-07 10:27:40 UTC (rev 485) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserBusinessConfig.java 2011-01-07 12:43:39 UTC (rev 486) @@ -28,6 +28,7 @@ import static org.nuiton.i18n.I18n._; import java.io.File; +import java.util.List; import java.util.Locale; import org.nuiton.util.ApplicationConfig; @@ -73,6 +74,15 @@ return result; } + public void setsmtpHost(String smtpHost) { + setOption(CoserBusinessOption.SMTP_HOST.key, smtpHost); + } + + public String getSmtpHost() { + String result = getOption(CoserBusinessOption.SMTP_HOST.key); + return result; + } + public Locale getLocale() { Locale result = getOption(Locale.class, CoserBusinessOption.LOCALE.key); return result; @@ -142,12 +152,19 @@ return result; } + public List<String> getNewResultNotificationList() { + // la liste est vide si l'option est null + List<String> emails = getOptionAsList(CoserBusinessOption.WEB_PUBLICATION_EMAIL.key).getOption(); + return emails; + } + public static enum CoserBusinessOption implements OptionDef { DATABASE_DIRECTORY("coser.database.directory", _("coser.config.database.directory.description"), "${user.home}" + File.separator + "coser", String.class, false, false), PROJECTS_DIRECTORY("coser.projects.directory", _("coser.config.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "projects", String.class, false, false), VALIDATOR_DIRECTORY("coser.validator.directory", _("coser.config.validator.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "validators", String.class, false, false), + SMTP_HOST("coser.smtp.host", _("coser.config.smtp.host.description"), "smtp", String.class, false, false), LOCALE("coser.locale", _("coser.config.locale.description"), Locale.FRANCE.toString(), Locale.class, false, false), REFERENCE_SPECIES("coser.reference.species", _("coser.config.reference.species.description"), "", String.class, false, false), @@ -167,7 +184,8 @@ WEB_PROPERTIES_FILE("coser.web.properties.file", _("coser.config.web.properties.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "web.properties", String.class, false, false), WEB_PROJECTS_DIRECTORY("coser.web.projects.directory", _("coser.config.web.projects.directory.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webprojects", String.class, false, false), WEB_INDICATORS("coser.web.indicators.file", _("coser.config.web.indicators.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webindicators.csv", String.class, false, false), - WEB_ZONES("coser.web.zones.file", _("coser.config.web.zones.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webzones.csv", String.class, false, false); + WEB_ZONES("coser.web.zones.file", _("coser.config.web.zones.file.description"), "${" + DATABASE_DIRECTORY.key + "}" + File.separator + "webzones.csv", String.class, false, false), + WEB_PUBLICATION_EMAIL("coser.web.newresult.emails", _("coser.config.web.newresult.emails.description"), null, String.class, false, false); protected String key; protected String description; Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-07 10:27:40 UTC (rev 485) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-07 12:43:39 UTC (rev 486) @@ -80,7 +80,6 @@ import org.nuiton.math.matrix.MatrixND; import org.nuiton.math.matrix.MatrixProvider; import org.nuiton.util.FileUtil; -import org.nuiton.util.StringUtil; import org.nuiton.util.ZipUtil; import fr.ifremer.coser.CoserBusinessConfig; Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-07 10:27:40 UTC (rev 485) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-07 12:43:39 UTC (rev 486) @@ -25,6 +25,8 @@ package fr.ifremer.coser.services; +import static org.nuiton.i18n.I18n._; + import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -39,6 +41,8 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.commons.mail.EmailException; +import org.apache.commons.mail.MultiPartEmail; import org.nuiton.util.FileUtil; import org.nuiton.util.ZipUtil; @@ -187,6 +191,9 @@ log.info("Unzipping file " + archiveFile + " to " + projectsDirectory); } + // send notification mails + sendNewResultNotifications(); + } catch (IOException ex) { throw new CoserBusinessException("Can't uncompress file", ex); } @@ -308,6 +315,32 @@ } /** + * Envoi un mail de notification apres la publication des resultat à la + * liste des adresses email renseignées dans la configuration. + */ + protected void sendNewResultNotifications() { + List<String> emails = config.getNewResultNotificationList(); + + for (String email : emails) { + try { + MultiPartEmail emailPart = new MultiPartEmail(); + emailPart.setHostName(config.getSmtpHost()); + emailPart.addTo(email); + emailPart.setFrom("noreply-coser at ifremer.fr", "Coser"); + emailPart.setSubject(_("coser.business.notificationmail.subject")); + emailPart.setContent(_("coser.business.notificationmail.body"), "text/plain; charset=ISO-8859-9"); + + // send mail + emailPart.send(); + } catch (EmailException ex) { + if (log.isErrorEnabled()) { + log.error("Can't send mail", ex); + } + } + } + } + + /** * Recuperer la liste des populations pour une zone données. * * @param zone zone Modified: trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties =================================================================== --- trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2011-01-07 10:27:40 UTC (rev 485) +++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2011-01-07 12:43:39 UTC (rev 486) @@ -71,6 +71,8 @@ coser.business.matrix.lengthstructure=Length structures coser.business.matrix.occurrence=Occurrence coser.business.matrix.samplingeffort=Sampling effort +coser.business.notificationmail.body=New results has been published.\n\n--\nCoser. +coser.business.notificationmail.subject=Coser \: New results published coser.business.publication.author=Author coser.business.publication.catchfilename=Catch file name coser.business.publication.comment=Comment @@ -102,9 +104,11 @@ coser.config.reference.typeSpecies.description=Code type species file location coser.config.selection.densityFilter.description=Default density filter value coser.config.selection.occurrenceFilter.description=Default occurrence filter value +coser.config.smtp.host.description=SMTP host address coser.config.validator.directory.description=Validation files directory location coser.config.web.frontend.description=Coser server url coser.config.web.indicators.file.description=Indicators match file +coser.config.web.newresult.emails.description=New results notification receivers coser.config.web.projects.directory.description=Web projects storage directory coser.config.web.properties.file.description=Web informations properties file coser.config.web.uploadurl.description=Coser server upload result url Modified: trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties =================================================================== --- trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2011-01-07 10:27:40 UTC (rev 485) +++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2011-01-07 12:43:39 UTC (rev 486) @@ -71,6 +71,8 @@ coser.business.matrix.lengthstructure=Structures en taille coser.business.matrix.occurrence=Occurrence coser.business.matrix.samplingeffort=Effort d'\u00E9chantillonnage +coser.business.notificationmail.body=De nouveaux r\u00E9sultats viennent d'\u00EAtre publi\u00E9s.\n\n--\nCoser. +coser.business.notificationmail.subject=Coser \: Nouveaux r\u00E9sultats publi\u00E9s coser.business.publication.author=Auteur coser.business.publication.catchfilename=Nom du fichier captures coser.business.publication.comment=Commentaire @@ -102,9 +104,11 @@ coser.config.reference.typeSpecies.description=Emplacement du fichier de code type des esp\u00E8ces coser.config.selection.densityFilter.description=Filtre par d\u00E9faut sur la moyenne des densit\u00E9s coser.config.selection.occurrenceFilter.description=Filtre par d\u00E9faut sur la moyenne des occurrences +coser.config.smtp.host.description=Adresse du serveur SMTP pour envoyer les mails coser.config.validator.directory.description=Emplacement des fichiers de validations coser.config.web.frontend.description=Adresse du serveur web coser coser.config.web.indicators.file.description=Fichier de correspondance des indicateurs +coser.config.web.newresult.emails.description=Liste des destinataires des notifications de nouveaux r\u00E9sultats coser.config.web.projects.directory.description=Dossier de stockage des projets pour le Web coser.config.web.properties.file.description=Fichier d'enregistrement des informations serveur coser.config.web.uploadurl.description=Adresse d'envoi des r\u00E9sultats Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/CoserConfig.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/CoserConfig.java 2011-01-07 10:27:40 UTC (rev 485) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/CoserConfig.java 2011-01-07 12:43:39 UTC (rev 486) @@ -62,15 +62,6 @@ return result; } - public void setsmtpHost(String smtpHost) { - setOption(CoserOption.SMTP_HOST.key, smtpHost); - } - - public String getSmtpHost() { - String result = getOption(CoserOption.SMTP_HOST.key); - return result; - } - public void setSupportEmail(String supportEmail) { setOption(CoserOption.SUPPORT_EMAIL.key, supportEmail); } @@ -90,7 +81,6 @@ CONFIG_FILE(CONFIG_FILE_NAME, _("coser.config.config.file.description"), "coser.properties", String.class, true, true), LOOKANDFEEL("coser.lookandfeel", _("coser.config.lookandfeel.description"), null, String.class, false, false), APPLICATION_VERSION("coser.application.version", _("coser.config.application.version.description"), null, String.class, false, false), - SMTP_HOST("coser.smtp.host", _("coser.config.smtp.host.description"), "smtp", String.class, false, false), SUPPORT_EMAIL("coser.support.email", _("coser.config.support.email.description"), "support at codelutin.com", String.class, false, false), WEBSITE_URL("coser.website", _("coser.config.website.description"), "http://coser.labs.libre-entreprise.org/", String.class, false, false); Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2011-01-07 10:27:40 UTC (rev 485) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2011-01-07 12:43:39 UTC (rev 486) @@ -194,7 +194,7 @@ // category misc modelBuilder.addCategory(_("coser.config.category.misc"), _("coser.config.category.misc.description")); - modelBuilder.addOption(CoserConfig.CoserOption.SMTP_HOST); + modelBuilder.addOption(CoserBusinessConfig.CoserBusinessOption.SMTP_HOST); modelBuilder.addOption(CoserConfig.CoserOption.SUPPORT_EMAIL); ConfigUI configUI = modelBuilder.buildUI(view, _("coser.config.category.path")); Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2011-01-07 10:27:40 UTC (rev 485) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2011-01-07 12:43:39 UTC (rev 486) @@ -7,7 +7,6 @@ coser.config.category.path.description=File and directory configuration coser.config.config.file.description=Coser configuration file coser.config.lookandfeel.description=Application's swing theme -coser.config.smtp.host.description=SMTP host address coser.config.support.email.description=Support email address coser.config.website.description=Coser website coser.ui.common.cancel=Cancel Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2011-01-07 10:27:40 UTC (rev 485) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2011-01-07 12:43:39 UTC (rev 486) @@ -7,7 +7,6 @@ coser.config.category.path.description=Configuration des fichiers et r\u00E9pertoires coser.config.config.file.description=Fichier de configuration de Coser coser.config.lookandfeel.description=Themes graphique Swing de l'application -coser.config.smtp.host.description=Adresse du serveur SMTP pour envoyer les mails coser.config.support.email.description=Adresse de support pour l'envoi des erreurs coser.config.website.description=Site internet de Coser coser.ui.common.cancel=Annuler Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/ServiceFactory.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/ServiceFactory.java 2011-01-07 10:27:40 UTC (rev 485) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/ServiceFactory.java 2011-01-07 12:43:39 UTC (rev 486) @@ -22,6 +22,7 @@ package fr.ifremer.coser.web; +import org.nuiton.i18n.I18n; import org.nuiton.util.ArgumentsParserException; import fr.ifremer.coser.services.WebService; @@ -41,6 +42,11 @@ protected static WebService webService; + static { + // on a pas trop de locale là :( + I18n.init(); + } + /** * Get application config configuration. *