[Suiviobsmer-commits] r995 - in trunk: wao-business/src/main/java/fr/ifremer/wao wao-business/src/main/java/fr/ifremer/wao/service wao-business/src/main/resources/i18n wao-business/src/main/xmi wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/resources/fr/ifremer/wao/ui/pages wao-ui/src/main/resources/i18n wao-ui/src/main/webapp wao-ui/src/main/webapp/css
Author: bleny Date: 2011-02-08 14:48:56 +0000 (Tue, 08 Feb 2011) New Revision: 995 Log: evol #2605 : email for accidental captures Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Administration_fr.properties trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties trunk/wao-ui/src/main/webapp/Administration.tml trunk/wao-ui/src/main/webapp/ContactForm.tml trunk/wao-ui/src/main/webapp/css/contacts.css Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-02-08 14:48:56 UTC (rev 995) @@ -755,4 +755,10 @@ queries.add("ALTER TABLE SampleRow ADD terrestrialLocationInfos TEXT;"); } + + @Override + protected void addMammalsNotificationsColumns_2_1(List<String> queries) { + queries.add("ALTER TABLE WaoUser ADD mammalsNotifications BOOLEAN DEFAULT FALSE;"); + queries.add("ALTER TABLE Contact ADD mammalsInfo TEXT"); + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2011-02-08 14:48:56 UTC (rev 995) @@ -123,6 +123,8 @@ protected abstract void addTerrestrialLocationOnSampleRowAndContact_2_0(List<String> queries); + protected abstract void addMammalsNotificationsColumns_2_1(List<String> queries); + protected static final Version[] VERSIONS = new Version[] { VersionUtil.valueOf("1.0"), VersionUtil.valueOf("1.1"), @@ -131,7 +133,8 @@ VersionUtil.valueOf("1.4"), VersionUtil.valueOf("1.5"), VersionUtil.valueOf("1.6"), - VersionUtil.valueOf("2.0") + VersionUtil.valueOf("2.0"), + VersionUtil.valueOf("2.1") }; @Override @@ -336,7 +339,7 @@ } String[] strings = queries.toArray(new String[queries.size()]); - executeSQL(tx, true, true, strings); + executeSQL(tx, showSql, showProgression, strings); } /** given "XXX_YYY et ZZZ_", will split with " et " and with "_" to extract @@ -432,7 +435,20 @@ addTerrestrialLocationOnSampleRowAndContact_2_0(queries); String[] strings = queries.toArray(new String[queries.size()]); - executeSQL(tx, true, true, strings); + executeSQL(tx, showSql, showProgression, strings); } + public void migrateTo_2_1(TopiaContextImplementor tx, + boolean showSql, + boolean showProgression) throws TopiaException { + + List<String> queries = new LinkedList<String>(); + + addMammalsNotificationsColumns_2_1(queries); + + String[] strings = queries.toArray(new String[queries.size()]); + executeSQL(tx, showSql, showProgression, strings); + } + + } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java 2011-02-08 14:48:56 UTC (rev 995) @@ -30,8 +30,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Date; -import java.util.Locale; import static org.nuiton.i18n.I18n.l_; @@ -120,4 +121,30 @@ public static String translate(String i18nKey, Object... args) { return l_(context.getLocale(), i18nKey, args); } + + public static final String monthPattern = "MM/yyyy"; + public static final String datePattern = "dd/MM/yyyy"; + public static final String dateTimePattern = "dd/MM/yyyy HH:mm"; + public static final String timePattern = "HH:mm"; + + public static String formatMonthTime(Date date) { + return formatDate(date, monthPattern); + } + + public static String formatDate(Date date) { + return formatDate(date, datePattern); + } + + public static String formatDateTime(Date date) { + return formatDate(date, dateTimePattern); + } + + public static String formatTime(Date date) { + return formatDate(date, timePattern); + } + + protected static String formatDate(Date date, String pattern) { + DateFormat dateFormat = new SimpleDateFormat(pattern, context.getLocale()); + return dateFormat.format(date); + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-02-08 14:48:56 UTC (rev 995) @@ -58,6 +58,7 @@ import fr.ifremer.wao.entity.SampleMonth; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.WaoUser; +import fr.ifremer.wao.entity.WaoUserDAO; import fr.ifremer.wao.io.ContactInput; import fr.ifremer.wao.io.ImportRefusedException; import fr.ifremer.wao.io.ImportResults; @@ -71,6 +72,7 @@ import fr.ifremer.wao.io.csv.WaoCsvHeader.FISHING_ZONE; import fr.ifremer.wao.io.csv.WaoCsvHeader.SAMPLING; import org.apache.commons.lang.BooleanUtils; +import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.SimpleEmail; @@ -91,6 +93,7 @@ import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -311,7 +314,7 @@ @Override public void executeSaveContact(TopiaContext transaction, Contact contact, boolean delete) - throws TopiaException, NullSampleMonthException { + throws TopiaException, NullSampleMonthException, EmailException { checkObserver(contact); checkSampleRow(contact); @@ -333,11 +336,87 @@ // Execute delete dao.delete(contactFound); } else { + notifyUsersForMammalsObservation(transaction, contactFound, contact); createOrUpdateContact(dao, contact, contactFound, true); } transaction.commitTransaction(); } + protected void notifyUsersForMammalsObservation(TopiaContext transaction, + Contact contactFound, Contact contact) throws TopiaException { + + boolean sendNotification = false; + + // we send notifications if there is mammals Capture and + // we prevent re-send of multiple identical messages + if (contact.getMammalsCapture()) { + String oldMessage = null; + if (contactFound != null) { + oldMessage = contactFound.getMammalsInfo(); + } + boolean messageChanged = ObjectUtils.notEqual(contact.getMammalsInfo(), oldMessage); + if (messageChanged) { + sendNotification = true; + } + } + + if (sendNotification) { + + String object = WaoUtils.translate(n_("wao.business.mammalsCapture.mail.subject")); + + String boat = contact.getBoat().getName() + " (" + + contact.getBoat().getImmatriculation() + ")"; + String time = ""; + if (contact.getObservationBeginDate() != null) { + time = WaoUtils.formatDateTime(contact.getObservationBeginDate()) + " "; + } + if (contact.getObservationEndDate() != null) { + time += WaoUtils.formatDateTime(contact.getObservationEndDate()); + } + SampleRow sampleRow = contact.getSampleRow(); + + List<String> facadesNames = new ArrayList<String>(); + for (FishingZone fishingZone : sampleRow.getFishingZone()) { + facadesNames.add(fishingZone.getSectorName() + " (" + fishingZone.getFacadeName() + ")"); + } + String profession = sampleRow.getCode() + " " + + " " + StringUtil.join(facadesNames, ", ", true) + + " " + sampleRow.getFishingZonesInfos() + + " " + sampleRow.getProfessionDescription() + + " " + sampleRow.getProfession().getLibelle() + + " " + sampleRow.getProfession().getSpecies(); + + String body = WaoUtils.translate(n_("wao.business.mammalsCapture.mail.message"), + boat, time, profession, contact.getMammalsInfo()); + + if (log.isDebugEnabled()) { + log.debug("will send email with object '" + object + "' and body \n" + body); + } + + + WaoUserDAO userDao = WaoDAOHelper.getWaoUserDAO(transaction); + // users contains all the user we need to notify for the capture + List<WaoUser> waoUsers = userDao.findAllByMammalsNotifications(true); + + if (log.isDebugEnabled()) { + log.debug("notification will be sent to " + waoUsers.size() + " users"); + } + + for (WaoUser waoUser : waoUsers) { + String userLogin = waoUser.getLogin(); + if (StringUtil.isEmail(userLogin)) { + try { + WaoUtils.sendEmail(userLogin, object, body); + } catch (EmailException e) { + if (log.isErrorEnabled()) { + log.error("unable to send email to " + userLogin, e); + } + } + } + } + } + } + protected void checkObserver(Contact contact) throws WaoException { // Ano #2287 Temporary fix to avoid saving a null observer if (contact.getMainObserver() == null) { Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-02-08 14:48:56 UTC (rev 995) @@ -35,7 +35,13 @@ import fr.ifremer.wao.WaoProperty; import fr.ifremer.wao.WaoQueryBuilder; import fr.ifremer.wao.WaoQueryHelper; -import fr.ifremer.wao.bean.*; +import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.FacadeRow; +import fr.ifremer.wao.bean.FacadeRowImpl; +import fr.ifremer.wao.bean.ObsProgram; +import fr.ifremer.wao.bean.SamplingFilter; +import fr.ifremer.wao.bean.SamplingStrategy; +import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.CompanyDAO; @@ -77,7 +83,6 @@ import org.nuiton.topia.framework.TopiaQuery; import org.nuiton.topia.framework.TopiaQuery.Op; import org.nuiton.util.DateUtil; -import org.nuiton.util.ObjectUtil; import org.nuiton.util.PeriodDates; import org.nuiton.util.StringUtil; import org.slf4j.Logger; Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java 2011-02-08 14:48:56 UTC (rev 995) @@ -39,7 +39,6 @@ import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.CompanyDAO; -import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.ContactDAO; import fr.ifremer.wao.entity.News; import fr.ifremer.wao.entity.SampleRow; @@ -51,11 +50,11 @@ import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.entity.WaoUserDAO; import fr.ifremer.wao.entity.WaoUserImpl; -import org.apache.commons.lang.StringUtils; import org.apache.commons.mail.EmailException; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaQuery; +import org.nuiton.util.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -254,8 +253,7 @@ transaction.commitTransaction(); try { - // FIXME-JC20100122 Use REGEX instead of @ to test if the login is a valid email - if (user.getLogin().contains("@") && user.isPasswordChanged()) { + if (StringUtil.isEmail(user.getLogin()) && user.isPasswordChanged()) { String subject = "[WAO] "; String msg = "Bonjour,\n\n"; if (isNewUser) { Modified: trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-02-08 14:48:56 UTC (rev 995) @@ -103,6 +103,8 @@ wao.business.contact.validation.commentAdminNecessaryForDataReliability=You must precise in admin comment why data reliability is '%s' wao.business.contact.validation.dataReliabilityMissingForValidation=You must provide data reliability before validating wao.business.entity.UserProfile.description=%s on %s%s +wao.business.mammalsCapture.mail.message=Hello,\n\nAn observer of the ObsMer program provided to WAO the following information\:\n\nBoat\: %s\nTide\: %s\nProfession\: %s\n\nAccidental capture\:\n%s\n\nBest regards,\n\nObsmer program\nhttp\://www.ifremer.fr/wao +wao.business.mammalsCapture.mail.subject=Obsmer WAO\: Information about an accidental capture wao.business.other=Other wao.business.readOnly=(read-only) wao.error.boat.canCreateContact= Modified: trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-02-08 14:48:56 UTC (rev 995) @@ -115,6 +115,8 @@ wao.business.contact.validation.commentAdminNecessaryForDataReliability=Il faut pr\u00E9ciser dans le commentaire administrateur pourquoi la donn\u00E9e est '%s' wao.business.contact.validation.dataReliabilityMissingForValidation=Il faut pr\u00E9ciser la qualit\u00E9 de la donn\u00E9e avant de valider wao.business.entity.UserProfile.description=%s sur %s%s +wao.business.mammalsCapture.mail.message=Bonjour,\n\nUn observateur du programme Obsmer a renseign\u00E9 dans WAO l'information suivante \:\n\nNavire \: %s\nMar\u00E9e \: %s\nM\u00E9tier \: %s\n\nCapture accidentelle \:\n%s\n\nCordialement,\n\nLe programme Obsmer\nhttp\://www.ifremer.fr/wao +wao.business.mammalsCapture.mail.subject=Obsmer WAO\: Information sur capture accidentelle wao.business.other=Autre wao.business.readOnly=(lecture seule) wao.error.boat.canCreateContact=Impossible de cr\u00E9er un nouveau contact pour la soci\u00E9t\u00E9 %1$s et le navire %2$s (%3$d) Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2011-02-08 14:48:56 UTC (rev 995) @@ -500,6 +500,7 @@ "generatePassword", WaoUser.PROPERTY_PASSWORD, WaoUser.PROPERTY_PHONE_NUMBER, + WaoUser.PROPERTY_MAMMALS_NOTIFICATIONS, WaoUser.PROPERTY_ACTIVE, "userRole" ); Modified: trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Administration_fr.properties =================================================================== --- trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Administration_fr.properties 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/pages/Administration_fr.properties 2011-02-08 14:48:56 UTC (rev 995) @@ -31,5 +31,4 @@ city-label: Ville phoneNumber-label: T\u00e9l\u00e9phone email-label: E-mail - active-label: Actif Modified: trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties =================================================================== --- trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-02-08 14:48:56 UTC (rev 995) @@ -84,6 +84,7 @@ wao.ui.field.Contact.endDate=Observation end wao.ui.field.Contact.mainObserver=Main observer wao.ui.field.Contact.mammalsCapture=Accidental capture +wao.ui.field.Contact.mammalsInfo= wao.ui.field.Contact.mammalsObservation=Exceptional observation wao.ui.field.Contact.nbObservants=Observers number wao.ui.field.Contact.samplingStrategy=Sampling strategy followed @@ -115,6 +116,7 @@ wao.ui.field.User.login=Login wao.ui.field.UserProfile.userRole=Role wao.ui.field.WaoUser.login=Identifier +wao.ui.field.WaoUser.mammalsNotifications=Receive notifications about mammals captures wao.ui.field.WaoUser.password=Password wao.ui.filters.filters=Search filters wao.ui.filters.refresh=Refresh filters Modified: trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties =================================================================== --- trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-02-08 14:48:56 UTC (rev 995) @@ -84,6 +84,7 @@ wao.ui.field.Contact.endDate=Fin d'observation wao.ui.field.Contact.mainObserver=Observateur r\u00E9f\u00E9rent wao.ui.field.Contact.mammalsCapture=Capture accidentelle +wao.ui.field.Contact.mammalsInfo=Noms scientifiques et nombres d'individus des esp\u00E8ces captur\u00E9es wao.ui.field.Contact.mammalsObservation=Observation exceptionnelle wao.ui.field.Contact.nbObservants=Nombre d'observateurs wao.ui.field.Contact.samplingStrategy=Strat\u00E9gie d'\u00E9chantillonnage suivie @@ -115,6 +116,7 @@ wao.ui.field.User.login=Identifiant wao.ui.field.UserProfile.userRole=R\u00F4le wao.ui.field.WaoUser.login=Identifiant +wao.ui.field.WaoUser.mammalsNotifications=Recevoir les notifications de captures accidentelles wao.ui.field.WaoUser.password=Mot de passe wao.ui.filters.filters=Filtres de recherche wao.ui.filters.refresh=Rafra\u00EEchir les champs du filtre Modified: trunk/wao-ui/src/main/webapp/Administration.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Administration.tml 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-ui/src/main/webapp/Administration.tml 2011-02-08 14:48:56 UTC (rev 995) @@ -139,6 +139,14 @@ </ul> </t:zone> </p:userRole> + <p:mammalsNotifications> + <t:if t:test="currentUser.obsMer"> + <t:if t:test="currentUser.admin"> + <label t:for="mammalsNotifications">${message:wao.ui.field.WaoUser.mammalsNotifications}</label> + <input t:type="checkbox" t:id="mammalsNotifications" value="userEdited.mammalsNotifications" /> + </t:if> + </t:if> + </p:mammalsNotifications> </form> </t:zone> </fieldset> Modified: trunk/wao-ui/src/main/webapp/ContactForm.tml =================================================================== --- trunk/wao-ui/src/main/webapp/ContactForm.tml 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-ui/src/main/webapp/ContactForm.tml 2011-02-08 14:48:56 UTC (rev 995) @@ -235,6 +235,12 @@ </label> <input t:type="checkbox" t:id="mammalsCapture" value="contact.mammalsCapture" /> </div> + <div> + <label for="mammalsInfo"> + ${message:wao.ui.field.Contact.mammalsInfo} + </label> + <input t:type="textarea" t:id="mammalsInfo" value="contact.mammalsInfo" /> + </div> </t:if> <t:if test="connectedUser.obsVente"> <div> Modified: trunk/wao-ui/src/main/webapp/css/contacts.css =================================================================== --- trunk/wao-ui/src/main/webapp/css/contacts.css 2011-02-08 14:47:37 UTC (rev 994) +++ trunk/wao-ui/src/main/webapp/css/contacts.css 2011-02-08 14:48:56 UTC (rev 995) @@ -114,9 +114,10 @@ div#so-contacts td.observationBeginDate, div#so-contacts td.observationEndDate, div#so-contacts td.nbObservants, +div#so-contacts td.mammals, div#so-contacts td.actualSamplingStrategy, div#so-contacts td.completeSampling, div#so-contacts td.dataInputDate, -div#so-contacts td.validations { +div#so-contacts td.validation { text-align: center; }
participants (1)
-
bleny@users.labs.libre-entreprise.org