Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 32d05ea7 by Tony Chemit at 2023-06-15T17:25:39+02:00 En PS / logbook / Activité, la validation sur les heures / numéro d'incrémant n'est pas correcte - Closes #2731 - - - - - 6 changed files: - core/api/dto-validation/src/main/java/fr/ird/observe/dto/validation/validators/data/ps/logbook/ActivityCheckTime.java - core/services/i18n/src/main/i18n/translations/services_en_GB.properties - core/services/i18n/src/main/i18n/translations/services_es_ES.properties - core/services/i18n/src/main/i18n/translations/services_fr_FR.properties - core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/ValidateService-dataResult.json - toolkit/api-validation/src/main/java/fr/ird/observe/validation/validators/collection/CollectionValidationWalkerContext.java Changes: ===================================== core/api/dto-validation/src/main/java/fr/ird/observe/dto/validation/validators/data/ps/logbook/ActivityCheckTime.java ===================================== @@ -23,6 +23,7 @@ package fr.ird.observe.dto.validation.validators.data.ps.logbook; */ import com.opensymphony.xwork2.validator.ValidationException; +import fr.ird.observe.dto.I18nDecoratorHelper; import fr.ird.observe.dto.data.ps.logbook.ActivityDto; import fr.ird.observe.dto.data.ps.logbook.RouteDto; import fr.ird.observe.dto.data.ps.logbook.TimeAndNumberAware; @@ -64,7 +65,7 @@ public class ActivityCheckTime extends NuitonFieldValidatorSupport { protected void addError(CollectionValidationWalkerContext<ActivityDto, TimeAndNumberAware> context, Object object) { TimeAndNumberAware current = context.getCurrent(); - setDefaultMessage(MESSAGE_KEY + String.format(MESSAGE_PARAMETERS, context.getHumanIndex(), current.getTime(), current.getNumber())); + setDefaultMessage(MESSAGE_KEY + String.format(MESSAGE_PARAMETERS, context.getHumanIndex(), I18nDecoratorHelper.getTimeLabel(getValidatorContext().getLocale(),current.getTime()), current.getNumber())); addFieldError(getFieldName(), object); } ===================================== core/services/i18n/src/main/i18n/translations/services_en_GB.properties ===================================== @@ -905,10 +905,10 @@ observe.data.ll.pairing.ActivityPairingResultItem.type=Observed activity observe.data.pairing.ActivityPairingResultItem.computedTimeAfter=after observe.data.pairing.ActivityPairingResultItem.computedTimeBefore=before observe.data.pairing.ActivityPairingResultItem.computedTimeEquals=Same date - time -observe.data.ps.Activity.validation.invalid.time.and.number=Observation time cant' be after a previous activity if number is greater (activity at position %1$s is not correct (time %2$s, number %3$s). +observe.data.ps.Activity.validation.invalid.time.and.number=Observation time can't be after a previous activity if his order number is greater (activity at position %1$s is not correct (time %2$s, order number %3$s). observe.data.ps.Route.validation.duplicated.date=There is already another route at this date. observe.data.ps.Route.validation.invalid.quadrant=Activity quadrant at position %1$s is not consistent with trip ocean (%2$s) of trip (indian\: 1 or 2, atlantic\: 1,2,3 or 4). -observe.data.ps.Route.validation.invalid.time=Observation time cant' be after the one of the previous activity (activity at position %1$s is not correct). +observe.data.ps.Route.validation.invalid.time=Observation time can't be after the one of the previous activity (activity at position %1$s is not correct). observe.data.ps.SampleSpecies.validation.mismatch.measuredCount=Measure count (%s) must be the sum of frequencies count (%s) observe.data.ps.SampleSpecies.validation.mismatch.subSampleNumber=The sub sample number must be strictly positive if the sample is a « super sample ». observe.data.ps.common.Trip.action.move.all=Move all ===================================== core/services/i18n/src/main/i18n/translations/services_es_ES.properties ===================================== @@ -905,7 +905,7 @@ observe.data.ll.pairing.ActivityPairingResultItem.type=Observed activity \#TODO observe.data.pairing.ActivityPairingResultItem.computedTimeAfter=after \#TODO observe.data.pairing.ActivityPairingResultItem.computedTimeBefore=before \#TODO observe.data.pairing.ActivityPairingResultItem.computedTimeEquals=Same date - time \#TODO -observe.data.ps.Activity.validation.invalid.time.and.number=Observation time cant' be after a previous activity if number is greater (activity at position %1$s is not correct (time %2$s, number %3$s). \#TODO +observe.data.ps.Activity.validation.invalid.time.and.number=Observation time can't be after a previous activity if his order number is greater (activity at position %1$s is not correct (time %2$s, order number %3$s). \#TODO observe.data.ps.Route.validation.duplicated.date=Ya existe otra ruta en esa fecha. observe.data.ps.Route.validation.invalid.quadrant=El cuadrante de la actividad %1$s no es coherente con el océano (%2$s) de la marea (indico \: 1,2, atlántico \: 1, 2, 3, 4) observe.data.ps.Route.validation.invalid.time=La hora de la observación de la actividad debe ser superior a la de la actividad anterior (actividad %1$s incorrecta). ===================================== core/services/i18n/src/main/i18n/translations/services_fr_FR.properties ===================================== @@ -905,7 +905,7 @@ observe.data.ll.pairing.ActivityPairingResultItem.type=Activité observée observe.data.pairing.ActivityPairingResultItem.computedTimeAfter=après observe.data.pairing.ActivityPairingResultItem.computedTimeBefore=avant observe.data.pairing.ActivityPairingResultItem.computedTimeEquals=Même date - heure -observe.data.ps.Activity.validation.invalid.time.and.number=L'heure d'observation d'une activité doit être supérieure à celle de l'activité précédente si son identifiant l'est (activité de position %1$s incorrecte, heure \: %2$s, identifiant \: %3$s). +observe.data.ps.Activity.validation.invalid.time.and.number=L'heure d'observation d'une activité doit être supérieure à celle de l'activité précédente si son numéro d'ordre l'est (activité de position %1$s incorrecte, heure \: %2$s, numéro d'ordre \: %3$s). observe.data.ps.Route.validation.duplicated.date=Il existe déjà une autre route à cette date. observe.data.ps.Route.validation.invalid.quadrant=Le quadrant de l’activité à la position %1$s n'est pas cohérent par rapport à l'océan (%2$s) de la marée (indien \: 1 observe.data.ps.Route.validation.invalid.time=L'heure d'observation d'une activité doit être supérieure à celle de l'activité précédente (activité de position %1$s incorrecte). ===================================== core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/ValidateService-dataResult.json ===================================== @@ -39368,6 +39368,11 @@ "scope": "ERROR", "message": "Obligatoire si opération de pêche réussie" }, + { + "fieldName": "time", + "scope": "ERROR", + "message": "L\u0027heure d\u0027observation d\u0027une activité doit être supérieure à celle de l\u0027activité précédente si son numéro d\u0027ordre l\u0027est (activité de position 2 incorrecte, heure : 15:12, numéro d\u0027ordre : 1)." + }, { "fieldName": "time", "scope": "WARNING", ===================================== toolkit/api-validation/src/main/java/fr/ird/observe/validation/validators/collection/CollectionValidationWalkerContext.java ===================================== @@ -43,13 +43,13 @@ public class CollectionValidationWalkerContext<D extends ToolkitId, C extends To protected final BiPredicate<CollectionValidationWalkerContext<D, C>, C> usePredicate; protected final BiPredicate<CollectionValidationWalkerContext<D, C>, C> validPredicate; protected final int size; - protected C skip; + protected C editing; protected int index = -1; protected C current; protected C previous; public static <D extends ToolkitId, C extends ToolkitId> CollectionValidationWalkerContext<D, C> validate(D container, Collection<C> collection, C skip, BiPredicate<CollectionValidationWalkerContext<D, C>, C> usePredicate, BiPredicate<CollectionValidationWalkerContext<D, C>, C> validPredicate) { - return create(container, collection, usePredicate, validPredicate).map(c -> c.setSkip(skip).validate()).orElse(null); + return create(container, collection, usePredicate, validPredicate).map(c -> c.setEditing(skip).validate()).orElse(null); } public static <D extends ToolkitId, C extends ToolkitId> CollectionValidationWalkerContext<D, C> validate(D container, Collection<C> collection, BiPredicate<CollectionValidationWalkerContext<D, C>, C> usePredicate, BiPredicate<CollectionValidationWalkerContext<D, C>, C> validPredicate) { @@ -71,13 +71,14 @@ public class CollectionValidationWalkerContext<D extends ToolkitId, C extends To this.validPredicate = validPredicate; } - public CollectionValidationWalkerContext<D, C> setSkip(C skip) { - this.skip = skip; + public CollectionValidationWalkerContext<D, C> setEditing(C editing) { + this.editing = editing; return this; } public CollectionValidationWalkerContext<D, C> validate() { for (C current : collection) { + current = getCurrent(current); boolean use = addCurrent(current, usePredicate); if (use) { boolean valid = validPredicate.test(this, current); @@ -89,10 +90,26 @@ public class CollectionValidationWalkerContext<D extends ToolkitId, C extends To return null; } + private C getCurrent(C current) { + if (editing != null && Objects.equals(current.getId(), editing.getId())) { + // use editing one as current + return editing; + } + return current; + } + public boolean addCurrent(C current, BiPredicate<CollectionValidationWalkerContext<D, C>, C> predicate) { index++; - if (skip != null && Objects.equals(current.getId(), skip.getId())) { - return false; + if (editing != null) { + if (!Objects.equals(current.getId(), editing.getId())) { + boolean use = predicate.test(this, current); + if (use) { + this.previous = this.current; + this.current = current; + } + // always return false, since we don't want to validate this entry + return false; + } } boolean use = predicate.test(this, current); if (use) { View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/32d05ea70619acec5a6330020a... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/32d05ea70619acec5a6330020a... You're receiving this email because of your account on gitlab.com.