r2211 - in branches/wao-4.0.x: wao-persistence/src/main/java/fr/ifremer/wao wao-persistence/src/main/java/fr/ifremer/wao/entity wao-services/src/main/java/fr/ifremer/wao/services/service wao-services/src/main/java/fr/ifremer/wao/services/service/csv wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations wao-services/src/main/resources/i18n
Author: bleny Date: 2014-08-13 12:23:05 +0200 (Wed, 13 Aug 2014) New Revision: 2211 Url: http://forge.codelutin.com/projects/wao/repository/revisions/2211 Log: Ajout d'une r?\195?\168gle emp?\195?\170chant l'utilisation de date avant la cr?\195?\169ation de Wao pour pr?\195?\169venir un import absurde (mauvaise utilisation du tableur) ; refactoring divers sur WaoUtils ; fixes #5609 Added: branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/DayParserFormatter.java branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/DayTimeParserFormatter.java Modified: branches/wao-4.0.x/wao-persistence/src/main/java/fr/ifremer/wao/WaoUtils.java branches/wao-4.0.x/wao-persistence/src/main/java/fr/ifremer/wao/entity/ObsProgram.java branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/SamplingPlanService.java branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ContactImportExportModel.java branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/SampleRowCodeParserFormatter.java branches/wao-4.0.x/wao-services/src/main/resources/i18n/wao-services_en_GB.properties branches/wao-4.0.x/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties Modified: branches/wao-4.0.x/wao-persistence/src/main/java/fr/ifremer/wao/WaoUtils.java =================================================================== --- branches/wao-4.0.x/wao-persistence/src/main/java/fr/ifremer/wao/WaoUtils.java 2014-08-13 09:36:03 UTC (rev 2210) +++ branches/wao-4.0.x/wao-persistence/src/main/java/fr/ifremer/wao/WaoUtils.java 2014-08-13 10:23:05 UTC (rev 2211) @@ -22,10 +22,10 @@ */ import fr.ifremer.wao.entity.I18nAble; -import fr.ifremer.wao.entity.ObsProgram; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.time.DateUtils; import org.nuiton.i18n.I18n; +import org.nuiton.util.DateUtil; import java.text.DateFormat; import java.text.ParseException; @@ -35,7 +35,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Locale; -import java.util.regex.Pattern; public class WaoUtils { @@ -59,6 +58,8 @@ protected static final String FRENCH_LANGUAGE = new Locale("fr").getLanguage(); + protected static final Date WAO_CREATION_DATE = DateUtil.createDate(27, 1, 2010); + @Deprecated public static String formatMonth(Date date) { return formatDate(date, MONTH_PATTERN); @@ -118,26 +119,22 @@ return dateFormat.parse(monthYear); } - public static Date parseDate(Locale locale, String monthYear) throws ParseException { + public static Date parseDate(Locale locale, String date) throws ParseException { String pattern = I18n.l(locale, "wao.date.parser"); DateFormat dateFormat = new SimpleDateFormat(pattern); - return dateFormat.parse(monthYear); + return dateFormat.parse(date); } - public static Date parseDateTime(Locale locale, String monthYear) throws ParseException { + public static Date parseDateTime(Locale locale, String dateTime) throws ParseException { String pattern = I18n.l(locale, "wao.datetime.parser"); DateFormat dateFormat = new SimpleDateFormat(pattern); - return dateFormat.parse(monthYear); + return dateFormat.parse(dateTime); } public static String l(Locale locale, I18nAble i18nAble) { return I18n.l(locale, i18nAble.getI18nKey()); } - public static Pattern getSampleRowCodePattern(ObsProgram obsProgram) { - return Pattern.compile("^(\\d{4})_" + obsProgram.getShortCode() + "(\\d{4})$"); - } - public static <T extends Enum> Collection<Integer> toOrdinals(Collection<T> enums) { List<Integer> ordinals = new LinkedList<>(); for (Enum anEnum : enums) { @@ -185,4 +182,8 @@ boolean isFrench = FRENCH_LANGUAGE.equals(locale.getLanguage()); return isFrench; } + + public static boolean isAfterWaoCreation(Date date) { + return WAO_CREATION_DATE.before(date); + } } Modified: branches/wao-4.0.x/wao-persistence/src/main/java/fr/ifremer/wao/entity/ObsProgram.java =================================================================== --- branches/wao-4.0.x/wao-persistence/src/main/java/fr/ifremer/wao/entity/ObsProgram.java 2014-08-13 09:36:03 UTC (rev 2210) +++ branches/wao-4.0.x/wao-persistence/src/main/java/fr/ifremer/wao/entity/ObsProgram.java 2014-08-13 10:23:05 UTC (rev 2211) @@ -20,6 +20,8 @@ */ package fr.ifremer.wao.entity; +import java.util.regex.Pattern; + import static org.nuiton.i18n.I18n.n; public enum ObsProgram implements I18nAble { @@ -66,4 +68,9 @@ public String getI18nKey() { return i18nKey; } + + public Pattern getSampleRowCodePattern() { + return Pattern.compile("^(\\d{4})_" + getShortCode() + "(\\d{4})$"); + } + } Modified: branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/SamplingPlanService.java =================================================================== --- branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/SamplingPlanService.java 2014-08-13 09:36:03 UTC (rev 2210) +++ branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/SamplingPlanService.java 2014-08-13 10:23:05 UTC (rev 2211) @@ -722,7 +722,7 @@ } if (updateSampleRowCommand.isCreation()) { - if ( ! WaoUtils.getSampleRowCodePattern(sampleRow.getObsProgram()).matcher(sampleRow.getCode()).matches()) { + if ( ! sampleRow.getObsProgram().getSampleRowCodePattern().matcher(sampleRow.getCode()).matches()) { throw new WrongSampleRowCodeFormatException(sampleRow); } } else { Modified: branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ContactImportExportModel.java =================================================================== --- branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ContactImportExportModel.java 2014-08-13 09:36:03 UTC (rev 2210) +++ branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ContactImportExportModel.java 2014-08-13 10:23:05 UTC (rev 2211) @@ -41,6 +41,8 @@ import fr.ifremer.wao.services.service.csv.operations.BoatParserFormatter; import fr.ifremer.wao.services.service.csv.operations.CompanyParserFormatter; import fr.ifremer.wao.services.service.csv.operations.ContactStateMotivesParserFormatter; +import fr.ifremer.wao.services.service.csv.operations.DayParserFormatter; +import fr.ifremer.wao.services.service.csv.operations.DayTimeParserFormatter; import fr.ifremer.wao.services.service.csv.operations.I18nAbleParserFormatter; import fr.ifremer.wao.services.service.csv.operations.SampleRowParserFormatter; import fr.ifremer.wao.services.service.csv.operations.UserParserFormatter; @@ -140,7 +142,7 @@ protected ModelBuilder<Contact> getModel() { ModelBuilder<Contact> modelBuilder = new ModelBuilder<>(); modelBuilder.newColumnForImportExport("CONTACT_ID", Contact.PROPERTY_TOPIA_ID); - modelBuilder.newColumnForImportExport("CONTACT_DATE_CREATION", Contact.PROPERTY_CREATION_DATE, Common.DAY_TIME); + modelBuilder.newColumnForImportExport("CONTACT_DATE_CREATION", Contact.PROPERTY_CREATION_DATE, new DayTimeParserFormatter(locale)); modelBuilder.newColumnForImportExport("CONTACT_OBSERVATEUR_PRINCIPAL", Contact.PROPERTY_MAIN_OBSERVER, new UserParserFormatter(locale, waoUsers)); modelBuilder.newColumnForImportExport("CONTACT_OBSERVATEURS_SECONDAIRES", Contact.PROPERTY_SECONDARY_OBSERVERS, new UsersParserFormatter(locale, waoUsers)); @@ -171,9 +173,9 @@ new CompanyParserFormatter(locale, null) ); modelBuilder.newColumnForImportExport("CONTACT_ETAT", "contactState", new I18nAbleParserFormatter<>(locale, ContactState.getAllowedStates(obsProgram))); - modelBuilder.newColumnForImportExport("CONTACT_DEBUT_OBSERVATION", Contact.PROPERTY_OBSERVATION_BEGIN_DATE, Common.DAY_TIME); - modelBuilder.newColumnForImportExport("CONTACT_FIN_OBSERVATION", Contact.PROPERTY_OBSERVATION_END_DATE, Common.DAY_TIME); - modelBuilder.newColumnForImportExport("CONTACT_SAISIE_DONNEES", Contact.PROPERTY_DATA_INPUT_DATE, Common.DAY); + modelBuilder.newColumnForImportExport("CONTACT_DEBUT_OBSERVATION", Contact.PROPERTY_OBSERVATION_BEGIN_DATE, new DayTimeParserFormatter(locale)); + modelBuilder.newColumnForImportExport("CONTACT_FIN_OBSERVATION", Contact.PROPERTY_OBSERVATION_END_DATE, new DayTimeParserFormatter(locale)); + modelBuilder.newColumnForImportExport("CONTACT_SAISIE_DONNEES", Contact.PROPERTY_DATA_INPUT_DATE, new DayParserFormatter(locale)); modelBuilder.newColumnForImportExport("CONTACT_COMMENTAIRE_OBSERVATEUR", Contact.PROPERTY_COMMENT); modelBuilder.newColumnForImportExport("CONTACT_COMMENTAIRE_COORDINATEUR", Contact.PROPERTY_COMMENT_COORDINATOR); modelBuilder.newColumnForImportExport("CONTACT_COMMENTAIRE_PROGRAMME", Contact.PROPERTY_COMMENT_ADMIN); @@ -211,7 +213,7 @@ return name; } }); - modelBuilder.newColumnForImportExport("CONTACT_TRANSMISSION_RESTITUTION", Contact.PROPERTY_RESTITUTION, Common.DAY); + modelBuilder.newColumnForImportExport("CONTACT_TRANSMISSION_RESTITUTION", Contact.PROPERTY_RESTITUTION, new DayParserFormatter(locale)); Set<ObservedDataControl> observedDataControlsValues = new HashSet<>(); Collections.addAll(observedDataControlsValues, ObservedDataControl.values()); Added: branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/DayParserFormatter.java =================================================================== --- branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/DayParserFormatter.java (rev 0) +++ branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/DayParserFormatter.java 2014-08-13 10:23:05 UTC (rev 2211) @@ -0,0 +1,31 @@ +package fr.ifremer.wao.services.service.csv.operations; + +import fr.ifremer.wao.WaoUtils; +import org.nuiton.csv.Common; +import org.nuiton.i18n.I18n; + +import java.text.ParseException; +import java.util.Date; +import java.util.Locale; + +/** + * On vérifie que ce n'est pas une date absurde (l'an 14...) + */ +public class DayParserFormatter extends Common.DateValue { + + protected Locale locale; + + public DayParserFormatter(Locale locale) { + super("dd/MM/yyyy"); + this.locale = locale; + } + + @Override + public Date parse(String value) throws ParseException { + Date day = super.parse(value); + if (day != null && ! WaoUtils.isAfterWaoCreation(day)) { + throw new IllegalArgumentException(I18n.l(locale, "wao.import.failure.dateBeforeWaoCreation", value)); + } + return day; + } +} Added: branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/DayTimeParserFormatter.java =================================================================== --- branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/DayTimeParserFormatter.java (rev 0) +++ branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/DayTimeParserFormatter.java 2014-08-13 10:23:05 UTC (rev 2211) @@ -0,0 +1,31 @@ +package fr.ifremer.wao.services.service.csv.operations; + +import fr.ifremer.wao.WaoUtils; +import org.nuiton.csv.Common; +import org.nuiton.i18n.I18n; + +import java.text.ParseException; +import java.util.Date; +import java.util.Locale; + +/** + * On vérifie que ce n'est pas une date absurde (l'an 14...) + */ +public class DayTimeParserFormatter extends Common.DateValue { + + protected Locale locale; + + public DayTimeParserFormatter(Locale locale) { + super("dd/MM/yyyy HH:mm"); + this.locale = locale; + } + + @Override + public Date parse(String value) throws ParseException { + Date dayTime = super.parse(value); + if (dayTime != null && ! WaoUtils.isAfterWaoCreation(dayTime)) { + throw new IllegalArgumentException(I18n.l(locale, "wao.import.failure.dateBeforeWaoCreation", value)); + } + return dayTime; + } +} Modified: branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/SampleRowCodeParserFormatter.java =================================================================== --- branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/SampleRowCodeParserFormatter.java 2014-08-13 09:36:03 UTC (rev 2210) +++ branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/SampleRowCodeParserFormatter.java 2014-08-13 10:23:05 UTC (rev 2211) @@ -23,7 +23,6 @@ */ package fr.ifremer.wao.services.service.csv.operations; -import fr.ifremer.wao.WaoUtils; import fr.ifremer.wao.entity.ObsProgram; import org.apache.commons.lang3.StringUtils; import org.nuiton.csv.ValueParserFormatter; @@ -41,7 +40,7 @@ public SampleRowCodeParserFormatter(Locale locale, ObsProgram obsProgram) { this.locale = locale; - sampleRowCodePattern = WaoUtils.getSampleRowCodePattern(obsProgram); + sampleRowCodePattern = obsProgram.getSampleRowCodePattern(); } @Override Modified: branches/wao-4.0.x/wao-services/src/main/resources/i18n/wao-services_en_GB.properties =================================================================== --- branches/wao-4.0.x/wao-services/src/main/resources/i18n/wao-services_en_GB.properties 2014-08-13 09:36:03 UTC (rev 2210) +++ branches/wao-4.0.x/wao-services/src/main/resources/i18n/wao-services_en_GB.properties 2014-08-13 10:23:05 UTC (rev 2211) @@ -76,6 +76,7 @@ wao.import.contact.failure.wrongSampleRowCode=The is no sample row with code '%s' wao.import.contact.failure.wrongTerrestrialLocation=There is no location of type '%s' with code '%s' wao.import.failure=Import fail for reason\: %s. +wao.import.failure.dateBeforeWaoCreation=The is too old (before 2010-01-27) wao.import.failure.invalid.regionCode=The code '%s' is not a valid region code wao.import.failure.wrongLocationType='%s' is not a valid location type, allowed values are %s wao.import.failure.wrongObsDebCode=There is no profession code having code '%s' Modified: branches/wao-4.0.x/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties =================================================================== --- branches/wao-4.0.x/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties 2014-08-13 09:36:03 UTC (rev 2210) +++ branches/wao-4.0.x/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties 2014-08-13 10:23:05 UTC (rev 2211) @@ -73,6 +73,7 @@ wao.import.contact.failure.wrongSampleRowCode=Il n'y a pas de ligne du plan avec le code '%s' wao.import.contact.failure.wrongTerrestrialLocation=Il n'y a pas de lieu de type '%s' ayant pour code '%s' wao.import.failure=Une erreur est survenue lors de l'import \: %s. +wao.import.failure.dateBeforeWaoCreation=La date est trop ancienne (avant le 27/01/2010) wao.import.failure.invalid.regionCode=Le code '%s' n'est pas un code de région valide wao.import.failure.wrongLocationType='%s' n'est pas un type de lieu valide, les valeurs admises sont %s wao.import.failure.wrongObsDebCode=Il n'y a pas de code métier ayant pour code '%s'
participants (1)
-
bleny@users.forge.codelutin.com