branch develop updated (cb0cdf8 -> 754637f)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository observe. See http://git.codelutin.com/observe.git from cb0cdf8 donner un nom aux deux listes du context de l'application pour eviter les comflits new efafe24 migartion du validateur sur les tailles et poids des espèces (refs 7706) new 8b4b0cd utilisation des decorateur pour les validateur vitesse d'activité (refs 7706) new af75b52 Opération de péche palangre : ajout des autres operations de péches pour la validation de l'unicité de l'id métier et du numéro (refs 7706) new 1f8ca0f Suppression des validateurs non utilisés (refs 7706) new 754637f Merge branch 'feature/7706' into develop The 5 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 754637f7245585d1be9bb1bafd0aa97b3e70e495 Merge: cb0cdf8 1f8ca0f Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Nov 10 10:36:31 2015 +0100 Merge branch 'feature/7706' into develop commit 1f8ca0fac8aeb52e48f2d89ab3aa6970a9dadb90 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Nov 10 10:35:19 2015 +0100 Suppression des validateurs non utilisés (refs 7706) commit af75b527a7e891fa7a2c0abeb1c6e6ec28750a9f Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Nov 10 09:19:56 2015 +0100 Opération de péche palangre : ajout des autres operations de péches pour la validation de l'unicité de l'id métier et du numéro (refs 7706) commit 8b4b0cd15f932cb812963b80f641a16fc19a448f Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Mon Nov 9 17:14:45 2015 +0100 utilisation des decorateur pour les validateur vitesse d'activité (refs 7706) commit efafe24c04dd581a15a1d62c7dfc3a5458b1b5cf Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Mon Nov 9 16:48:52 2015 +0100 migartion du validateur sur les tailles et poids des espèces (refs 7706) Summary of changes: .../java/fr/ird/observe/ui/DecoratorService.java | 3 + .../ird/observe/validation/ValidationContext.java | 20 + .../dto/AbstractEspeceFieldDtoValidator.java | 34 +- .../dto/ActivityDebutDePecheSaneDtoValidator.java | 205 ---------- .../dto/ActivityFinDePecheSaneDtoValidator.java | 242 ----------- .../dto/ActivitySimpleSpeedDtoValidator.java | 10 +- .../validator/dto/ActivitySpeedDtoValidator.java | 7 +- .../dto/RouteActivitysFieldDtoValidator.java | 132 ------ .../dto/SetLonglineUniqueHomeIdDtoValidator.java | 50 +-- .../dto/SetLonglineUniqueNumberDtoValidator.java | 57 +-- .../dto/VesselActivityFieldDtoValidator.java | 451 --------------------- ...TargetCatchDto-n1-update-warning-validation.xml | 4 +- ...argetLengthDto-n1-update-warning-validation.xml | 4 +- ...choolEstimateDto-n1-update-error-validation.xml | 2 +- .../src/main/resources/validators.xml | 3 - .../v1/ReferentialServiceController.java | 6 + .../src/main/resources/validators.xml | 2 - .../ActivityDebutDePecheSaneValidator.java | 199 --------- .../entities/ActivityFinDePecheSaneValidator.java | 237 ----------- .../entities/RouteActivitysFieldValidator.java | 135 ------ .../entities/VesselActivityFieldValidator.java | 446 -------------------- .../src/test/resources/validators.xml | 2 - .../services/service/ReferentialService.java | 4 + .../xmi/observe-services-dto-longline.properties | 3 + .../main/xmi/observe-services-dto-longline.zargo | Bin 65285 -> 66568 bytes .../services/dto/ObserveDtosInitializer.java | 5 + .../services/service/ReferentialServiceTopia.java | 12 + .../service/longline/SetLonglineServiceTopia.java | 44 ++ .../src/test/resources/validators.xml | 2 - 29 files changed, 160 insertions(+), 2161 deletions(-) delete mode 100644 observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityDebutDePecheSaneDtoValidator.java delete mode 100644 observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityFinDePecheSaneDtoValidator.java delete mode 100644 observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/RouteActivitysFieldDtoValidator.java delete mode 100644 observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/VesselActivityFieldDtoValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/ActivityDebutDePecheSaneValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/ActivityFinDePecheSaneValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/RouteActivitysFieldValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/VesselActivityFieldValidator.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit efafe24c04dd581a15a1d62c7dfc3a5458b1b5cf Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Mon Nov 9 16:48:52 2015 +0100 migartion du validateur sur les tailles et poids des espèces (refs 7706) --- .../ird/observe/validation/ValidationContext.java | 20 +++++++++++++ .../dto/AbstractEspeceFieldDtoValidator.java | 34 +++++++++++----------- ...TargetCatchDto-n1-update-warning-validation.xml | 4 +-- ...argetLengthDto-n1-update-warning-validation.xml | 4 +-- ...choolEstimateDto-n1-update-error-validation.xml | 2 +- .../v1/ReferentialServiceController.java | 6 ++++ .../services/service/ReferentialService.java | 4 +++ .../services/service/ReferentialServiceTopia.java | 12 ++++++++ 8 files changed, 64 insertions(+), 22 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java index e34e5b9..913c026 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java @@ -28,11 +28,13 @@ import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.longline.ActivityLonglineDto; import fr.ird.observe.services.dto.longline.SetLonglineDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; +import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.services.dto.seine.FloatingObjectDto; import fr.ird.observe.services.dto.seine.RouteDto; import fr.ird.observe.services.dto.seine.SetSeineDto; import fr.ird.observe.services.dto.seine.TripSeineDto; +import fr.ird.observe.services.service.ReferentialService; import fr.ird.observe.services.service.longline.ActivityLonglineService; import fr.ird.observe.services.service.longline.SetLonglineService; import fr.ird.observe.services.service.longline.TripLonglineService; @@ -141,6 +143,16 @@ public class ValidationContext { } }; + private static final DtoSupplier<SpeciesDto> SPECIES_DTO_SUPPLIER = new DtoSupplier<SpeciesDto>() { + + @Override + public SpeciesDto get(ObserveSwingDataSource dataSource, String id) { + ReferentialService service = dataSource.newService(ReferentialService.class); + SpeciesDto dto = service.loadSpecies(id); + return dto; + } + }; + protected DataContext dataContext; protected Map<String, Object> cache; @@ -253,6 +265,14 @@ public class ValidationContext { return result; } + public SpeciesDto getSpecies(String speciesId) { + SpeciesDto result = null; + if (speciesId != null) { + result = getDto(SPECIES_DTO_SUPPLIER, speciesId); + } + return result; + } + public List<?> getEditingReferentielList() { return referentielList; } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/AbstractEspeceFieldDtoValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/AbstractEspeceFieldDtoValidator.java index 542966b..fbee473 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/AbstractEspeceFieldDtoValidator.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/AbstractEspeceFieldDtoValidator.java @@ -218,19 +218,21 @@ public abstract class AbstractEspeceFieldDtoValidator extends FieldValidatorSupp } // l'species associée - ReferenceDto<SpeciesDto> species = (ReferenceDto<SpeciesDto>) getFieldValue(speciesFieldName, object); + ReferenceDto<SpeciesDto> speciesRef = (ReferenceDto<SpeciesDto>) getFieldValue(speciesFieldName, object); - if (species == null) { + if (speciesRef == null) { // pas de species trouvée, on ne peut pas valider return; } if (log.isDebugEnabled()) { - log.debug("Espece to validate : " + species); + log.debug("Espece to validate : " + speciesRef); } - Bound bound = getBound(species); + SpeciesDto speciesDto = (SpeciesDto) getValueStack().findValue("getSpecies(\"" + speciesRef.getId() + "\")"); + + Bound bound = getBound(speciesDto); if (log.isDebugEnabled()) { log.debug("Espece Bound to validate : " + bound); @@ -264,19 +266,17 @@ public abstract class AbstractEspeceFieldDtoValidator extends FieldValidatorSupp } } - protected Bound getBound(ReferenceDto<SpeciesDto> referentiel) { - - // FIXME il faut mettre en place un cache dans la valueStack de la validation pour recupéré les SpeciesDto -// Float min = getBoundMin(referentiel); -// Float max = getBoundMax(referentiel); -// -// if (min == null || min == 0 || max == null || max == 0) { -// // l'une des deux borne n'est pas définie, on ne peut pas utiliser -// // la données -// return null; -// } -// return new Bound(min, max); - return null; + protected Bound getBound(SpeciesDto species) { + + Float min = getBoundMin(species); + Float max = getBoundMax(species); + + if (min == null || min == 0 || max == null || max == 0) { + // l'une des deux borne n'est pas définie, on ne peut pas utiliser + // la données + return null; + } + return new Bound(min, max); } protected boolean validateBound(Float value, diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/NonTargetCatchDto-n1-update-warning-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/NonTargetCatchDto-n1-update-warning-validation.xml index 1cfbfdc..fc038c0 100644 --- a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/NonTargetCatchDto-n1-update-warning-validation.xml +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/NonTargetCatchDto-n1-update-warning-validation.xml @@ -63,7 +63,7 @@ </field-validator> <!-- validation du weight par borne --> - <field-validator type="species_weight"> + <field-validator type="species_weightDto"> <param name="ratio">1.0</param> <message>validator.nonTargetCatch.bound.meanWeight##${min}##${max}</message> </field-validator> @@ -81,7 +81,7 @@ </field-validator> <!-- validation de la taille par borne --> - <field-validator type="species_length"> + <field-validator type="species_lengthDto"> <param name="ratio">1.0</param> <message>validator.nonTargetCatch.bound.meanLength##${min}##${max}</message> </field-validator> diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/NonTargetLengthDto-n1-update-warning-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/NonTargetLengthDto-n1-update-warning-validation.xml index e38c3f0..22d42a2 100644 --- a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/NonTargetLengthDto-n1-update-warning-validation.xml +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/NonTargetLengthDto-n1-update-warning-validation.xml @@ -29,7 +29,7 @@ <field name="length"> <!-- validation de la taille par borne --> - <field-validator type="species_length"> + <field-validator type="species_lengthDto"> <!--<param name="fieldName">length</param>--> <param name="ratio">1.0</param> <message>validator.nonTargetSample.bound.length##${min}##${max}</message> @@ -40,7 +40,7 @@ <field name="weight"> <!-- validation du weight par borne (uniquement pour mode saisie par individus) --> - <field-validator type="species_weight"> + <field-validator type="species_weightDto"> <param name="ratio">1.0</param> <param name="expression"> <![CDATA[ acquisitionMode == 1 ]]> diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/SchoolEstimateDto-n1-update-error-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/SchoolEstimateDto-n1-update-error-validation.xml index 43e663a..284d9cf 100644 --- a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/SchoolEstimateDto-n1-update-error-validation.xml +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/SchoolEstimateDto-n1-update-error-validation.xml @@ -66,7 +66,7 @@ </field-validator> <!-- validation du weight par borne --> - <field-validator type="species_weight"> + <field-validator type="species_weightDto"> <param name="ratio">1.0</param> <message>validator.nonTargetCatch.bound.meanWeight##${min}##${max}</message> </field-validator> diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java index 525c3ec..464e0ee 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferentialServiceController.java @@ -27,6 +27,7 @@ import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.service.DataNotFoundException; import fr.ird.observe.services.service.ReferentialService; @@ -60,6 +61,11 @@ public class ReferentialServiceController extends ObserveAuthenticatedServiceCon } @Override + public SpeciesDto loadSpecies(String id) { + return service.loadSpecies(id); + } + + @Override public <R extends ReferentialDto> FormDto<R> loadToRead(Class<R> type, String id) throws DataNotFoundException { return service.loadToRead(type, id); } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java index 950be0a..dc35e0e 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java @@ -28,6 +28,7 @@ import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.spi.DeleteRequest; import fr.ird.observe.services.spi.PostRequest; import fr.ird.observe.services.spi.ReadDataPermission; @@ -55,6 +56,9 @@ public interface ReferentialService extends ObserveService { <R extends ReferentialDto> ReferenceSetDto<R> getReferentialReferenceSetIfModify(Class<R> type, Date updateAfter); @ReadReferentialPermission + SpeciesDto loadSpecies(String id); + + @ReadReferentialPermission <R extends ReferentialDto> FormDto<R> loadToRead(Class<R> type, String id) throws DataNotFoundException; @ReadReferentialPermission diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java index 787648d..c4e9908 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java @@ -25,6 +25,7 @@ package fr.ird.observe.services.service; import com.google.common.base.Optional; import fr.ird.observe.entities.EntityMap; import fr.ird.observe.entities.referentiel.ReferenceEntity; +import fr.ird.observe.entities.referentiel.Species; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.DtoMap; import fr.ird.observe.services.dto.FormDto; @@ -35,6 +36,7 @@ import fr.ird.observe.services.dto.ReferenceSetDtos; import fr.ird.observe.services.dto.constants.ReferenceStatus; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; +import fr.ird.observe.services.dto.referential.SpeciesDto; import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; @@ -78,6 +80,16 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe } @Override + public SpeciesDto loadSpecies(String id) { + + Species speciesEntity = loadEntity(SpeciesDto.class, Species.class, id); + + SpeciesDto speciesDto = entityToDto(SpeciesDto.class, Species.class, speciesEntity); + + return speciesDto; + } + + @Override public <D extends ReferentialDto> FormDto<D> loadToRead(Class<D> dtoType, String id) { Class<ReferenceEntity> entityType = getEntityType(dtoType); ReferenceEntity entity = loadEntity(dtoType, entityType, id); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 8b4b0cd15f932cb812963b80f641a16fc19a448f Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Mon Nov 9 17:14:45 2015 +0100 utilisation des decorateur pour les validateur vitesse d'activité (refs 7706) --- .../src/main/java/fr/ird/observe/ui/DecoratorService.java | 3 +++ .../validator/dto/ActivitySimpleSpeedDtoValidator.java | 10 ++++------ .../validation/validator/dto/ActivitySpeedDtoValidator.java | 7 +++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/DecoratorService.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/DecoratorService.java index 3b2ffcb..5d60408 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/DecoratorService.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/DecoratorService.java @@ -100,6 +100,7 @@ import fr.ird.observe.services.dto.referential.seine.VesselActivitySeineDto; import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; import fr.ird.observe.services.dto.referential.seine.WindDto; import fr.ird.observe.services.dto.seine.ActivitySeineDto; +import fr.ird.observe.services.dto.seine.ActivitySeineStubDto; import fr.ird.observe.services.dto.seine.FloatingObjectDto; import fr.ird.observe.services.dto.seine.GearUseFeaturesMeasurementSeineDto; import fr.ird.observe.services.dto.seine.NonTargetCatchDto; @@ -428,6 +429,8 @@ public class DecoratorService extends DecoratorProvider { "${time}$tH:%1$tM##${vesselActivitySeine/label}$s", "${time}$tH:%1$tM##${vesselActivitySeine}$s", " - "); + registerObserveDecorator(ActivitySeineStubDto.class, "${time}$tH:%1$tM"); + registerReferenceDtoDecorator(ActivityLonglineDto.class, "${timeStamp}$td/%1$tm/%1$tY %1$tH:%1$tM##${vesselActivityLongline/label}$s", "${timeStamp}$td/%1$tm/%1$tY %1$tH:%1$tM##${vesselActivityLongline}$s", diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySimpleSpeedDtoValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySimpleSpeedDtoValidator.java index 6dc48f7..b8e0e9e 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySimpleSpeedDtoValidator.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySimpleSpeedDtoValidator.java @@ -25,6 +25,7 @@ package fr.ird.observe.validation.validator.dto; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; +import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.business.gps.GPSPoint; import fr.ird.observe.business.gps.GpsPoints; import fr.ird.observe.services.dto.seine.ActivitySeineDto; @@ -170,19 +171,16 @@ public class ActivitySimpleSpeedDtoValidator extends FieldValidatorSupport { return "activitySimpleSpeed"; } - //FIXME protected String decorate(ActivitySeineDto activitySeine) { - return activitySeine.toString(); + return ObserveSwingApplicationContext.get().getDecorator(ActivitySeineDto.class).toString(activitySeine); } - //FIXME protected String decorate(ActivitySeineStubDto activitySeine) { - return activitySeine.toString(); + return ObserveSwingApplicationContext.get().getDecorator(ActivitySeineStubDto.class).toString(activitySeine); } - //FIXME protected String decorate(GPSPoint currentPoint) { - return currentPoint.toString(); + return ObserveSwingApplicationContext.get().getDecorator(GPSPoint.class).toString(currentPoint); } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySpeedDtoValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySpeedDtoValidator.java index 0b0149e..7347e57 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySpeedDtoValidator.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySpeedDtoValidator.java @@ -25,6 +25,7 @@ package fr.ird.observe.validation.validator.dto; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; +import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.business.gps.GPSPoint; import fr.ird.observe.business.gps.GpsPoints; import fr.ird.observe.services.dto.seine.ActivitySeineStubDto; @@ -96,14 +97,12 @@ public class ActivitySpeedDtoValidator extends FieldValidatorSupport { return invalidActivity; } - //FIXME protected String decorate(ActivitySeineStubDto activitySeine) { - return activitySeine.toString(); + return ObserveSwingApplicationContext.get().getDecorator(ActivitySeineStubDto.class).toString(activitySeine); } - //FIXME protected String decorate(GPSPoint currentPoint) { - return currentPoint.toString(); + return ObserveSwingApplicationContext.get().getDecorator(GPSPoint.class).toString(currentPoint); } public CollectionFieldExpressionValidator getDelegate(final RouteDto route) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit af75b527a7e891fa7a2c0abeb1c6e6ec28750a9f Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Nov 10 09:19:56 2015 +0100 Opération de péche palangre : ajout des autres operations de péches pour la validation de l'unicité de l'id métier et du numéro (refs 7706) --- .../dto/SetLonglineUniqueHomeIdDtoValidator.java | 50 +++++------------- .../dto/SetLonglineUniqueNumberDtoValidator.java | 57 ++++++++------------- .../xmi/observe-services-dto-longline.properties | 3 ++ .../main/xmi/observe-services-dto-longline.zargo | Bin 65285 -> 66568 bytes .../services/dto/ObserveDtosInitializer.java | 5 ++ .../service/longline/SetLonglineServiceTopia.java | 44 ++++++++++++++++ 6 files changed, 86 insertions(+), 73 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/SetLonglineUniqueHomeIdDtoValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/SetLonglineUniqueHomeIdDtoValidator.java index ff167d3..f79007a 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/SetLonglineUniqueHomeIdDtoValidator.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/SetLonglineUniqueHomeIdDtoValidator.java @@ -22,15 +22,18 @@ package fr.ird.observe.validation.validator.dto; * #L% */ -import com.google.common.base.Objects; +import com.google.common.base.Optional; +import com.google.common.collect.Iterables; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; +import fr.ird.observe.ObserveSwingApplicationContext; +import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.longline.ActivityLonglineDto; import fr.ird.observe.services.dto.longline.SetLonglineDto; -import fr.ird.observe.services.dto.longline.TripLonglineActivityDto; -import fr.ird.observe.services.dto.longline.TripLonglineDto; - -import java.util.Set; +import fr.ird.observe.services.dto.longline.SetLonglineStubDto; +import fr.ird.observe.services.dto.longline.SetLonglineStubDtos; +import org.nuiton.decorator.Decorator; /** * Created on 12/7/14. @@ -54,46 +57,21 @@ public class SetLonglineUniqueHomeIdDtoValidator extends FieldValidatorSupport { if (homeId != null) { - String setLonglineTopiaId = setLongline.getId(); - - TripLonglineDto tripLongline = (TripLonglineDto) stack.findValue("currentTripLongline"); - - Set<TripLonglineActivityDto> activityLonglines = tripLongline.getActivityLongline(); - - boolean notValid = false; - - for (TripLonglineActivityDto activityLongline : activityLonglines) { - - // FIXME migration client-serveur -// SetLonglineDto setLongline1 = activityLongline.getSetLongline(); - SetLonglineDto setLongline1 = null; - - if (setLongline1 != null - && !Objects.equal(setLonglineTopiaId, setLongline1.getId()) - && homeId.equals(setLongline1.getHomeId())) { + Optional<SetLonglineStubDto> sameHomeIdSetLonglineOptional = Iterables.tryFind(setLongline.getOtherSets(), SetLonglineStubDtos.newHomeIdPredicate(homeId)); - notValid = true; + if (sameHomeIdSetLonglineOptional.isPresent()) { - //FIXME -// DecoratorService provider = ObserveServiceHelper.getDecoratorService(); -// Decorator<?> decorator = provider.getDecorator(activityLongline); + ReferenceDto<ActivityLonglineDto> activityLonglineRef = sameHomeIdSetLonglineOptional.get().getActivityLongline(); - stack.set("duplicatedActivity", activityLongline); + Decorator<ReferenceDto> decorator = ObserveSwingApplicationContext.get().getDecorator(ReferenceDto.class, ActivityLonglineDto.class.getSimpleName()); - break; + stack.set("duplicatedActivity", decorator.toString(activityLonglineRef)); - } - - } - - if (notValid) { - - // vitesse trop grande addFieldError(getFieldName(), object); + } } - } @Override diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/SetLonglineUniqueNumberDtoValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/SetLonglineUniqueNumberDtoValidator.java index fb59e56..8b1502b 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/SetLonglineUniqueNumberDtoValidator.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/SetLonglineUniqueNumberDtoValidator.java @@ -22,11 +22,18 @@ package fr.ird.observe.validation.validator.dto; * #L% */ +import com.google.common.base.Optional; +import com.google.common.collect.Iterables; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; +import fr.ird.observe.ObserveSwingApplicationContext; +import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.longline.ActivityLonglineDto; import fr.ird.observe.services.dto.longline.SetLonglineDto; -import fr.ird.observe.services.dto.longline.TripLonglineDto; +import fr.ird.observe.services.dto.longline.SetLonglineStubDto; +import fr.ird.observe.services.dto.longline.SetLonglineStubDtos; +import org.nuiton.decorator.Decorator; /** * Created on 12/7/14. @@ -50,45 +57,21 @@ public class SetLonglineUniqueNumberDtoValidator extends FieldValidatorSupport { if (number != null) { - String setLonglineTopiaId = setLongline.getId(); - - TripLonglineDto tripLongline = (TripLonglineDto) stack.findValue("currentTripLongline"); - - boolean notValid = false; - - // FIXME migration client-serveur -// Set<ActivityLonglineDto> activityLonglines = tripLongline.getActivityLongline(); -// -// for (ActivityLonglineDto activityLongline : activityLonglines) { -// -// SetLonglineDto setLongline1 = activityLongline.getSetLongline(); -// -// -// if (setLongline1 != null -// && !Objects.equal(setLonglineTopiaId, setLongline1.getId()) -// && number.equals(setLongline1.getNumber())) { -// -// notValid = true; -// -// //FIXME -//// DecoratorService provider = ObserveServiceHelper.getDecoratorService(); -//// Decorator<?> decorator = provider.getDecorator(activityLongline); -// -// stack.set("duplicatedActivity", activityLongline); -// -// break; -// -// } -// -// } - - if (notValid) { - - // vitesse trop grande + Optional<SetLonglineStubDto> sameNumberSetLonglineOptional = Iterables.tryFind(setLongline.getOtherSets(), SetLonglineStubDtos.newNumberPredicate(number)); + + if (sameNumberSetLonglineOptional.isPresent()) { + + ReferenceDto<ActivityLonglineDto> activityLonglineRef = sameNumberSetLonglineOptional.get().getActivityLongline(); + + Decorator<ReferenceDto> decorator = ObserveSwingApplicationContext.get().getDecorator(ReferenceDto.class, ActivityLonglineDto.class.getSimpleName()); + + stack.set("duplicatedActivity", decorator.toString(activityLonglineRef)); + addFieldError(getFieldName(), object); + } - } + } } diff --git a/observe-services-model/src/main/xmi/observe-services-dto-longline.properties b/observe-services-model/src/main/xmi/observe-services-dto-longline.properties index 3096cbf..0aed190 100644 --- a/observe-services-model/src/main/xmi/observe-services-dto-longline.properties +++ b/observe-services-model/src/main/xmi/observe-services-dto-longline.properties @@ -32,6 +32,8 @@ fr.ird.observe.services.dto.longline.SetLongline.attribute.lineType.tagValue.sim fr.ird.observe.services.dto.longline.SetLongline.attribute.lightsticksType.tagValue.simpleBeanWithNoInterfaceAttributeGeneric=fr.ird.observe.services.dto.referential.longline.LightsticksTypeDto fr.ird.observe.services.dto.longline.SetLongline.attribute.lightsticksColor.tagValue.simpleBeanWithNoInterfaceAttributeGeneric=fr.ird.observe.services.dto.referential.longline.LightsticksColorDto +fr.ird.observe.services.dto.longline.SetLonglineStub.attribute.activityLongline.tagValue.simpleBeanWithNoInterfaceAttributeGeneric=fr.ird.observe.services.dto.longline.ActivityLonglineDto + fr.ird.observe.services.dto.longline.HooksComposition.attribute.hookType.tagValue.simpleBeanWithNoInterfaceAttributeGeneric=fr.ird.observe.services.dto.referential.longline.HookTypeDto fr.ird.observe.services.dto.longline.HooksComposition.attribute.hookSize.tagValue.simpleBeanWithNoInterfaceAttributeGeneric=fr.ird.observe.services.dto.referential.longline.HookSizeDto @@ -107,4 +109,5 @@ fr.ird.observe.services.dto.longline.Basket.attribute.branchline.stereotype=uniq fr.ird.observe.services.dto.longline.GearUseFeaturesLongline.attribute.gearUseFeaturesMeasurement.stereotype=unique,ordered fr.ird.observe.services.dto.longline.TripLonglineGearUse.attribute.gearUseFeaturesLongline.stereotype=unique,ordered fr.ird.observe.services.dto.longline.TripLongline.attribute.activityLongline.stereotype=unique,ordered +fr.ird.observe.services.dto.longline.SetLonglineStub.attribute.activityLongline.stereotype=unique diff --git a/observe-services-model/src/main/xmi/observe-services-dto-longline.zargo b/observe-services-model/src/main/xmi/observe-services-dto-longline.zargo index df6798f..361b3a3 100644 Binary files a/observe-services-model/src/main/xmi/observe-services-dto-longline.zargo and b/observe-services-model/src/main/xmi/observe-services-dto-longline.zargo differ diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java index 96eecd4..512b690 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java @@ -709,6 +709,11 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { } @Override + public void initSetLonglineStubDto() { + // la logique de copie est à ecrire directement dans le service + } + + @Override public void initSetLonglineTdrDto() { registerDto(SetLonglineTdrDto.class, SetLongline.class, SetLonglineTdrDto.PROPERTY_TDR, diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineServiceTopia.java index 1e5cdb3..d87a5d3 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineServiceTopia.java @@ -22,19 +22,25 @@ package fr.ird.observe.services.service.longline; * #L% */ +import com.google.common.collect.Sets; import fr.ird.observe.entities.longline.ActivityLongline; +import fr.ird.observe.entities.longline.ActivityLonglineTopiaDao; import fr.ird.observe.entities.longline.SetLongline; +import fr.ird.observe.entities.longline.TripLongline; +import fr.ird.observe.entities.longline.TripLonglineTopiaDao; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.longline.ActivityLonglineDto; import fr.ird.observe.services.dto.longline.SetLonglineDto; +import fr.ird.observe.services.dto.longline.SetLonglineStubDto; import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.result.SaveResultDtos; import fr.ird.observe.services.service.DataNotFoundException; import org.apache.commons.lang3.time.DateUtils; import java.util.Date; +import java.util.Set; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com @@ -74,6 +80,12 @@ public class SetLonglineServiceTopia extends ObserveServiceTopia implements SetL FormDto<SetLonglineDto> form = entityToEditFormDto(SetLonglineDto.class, SetLongline.class, setLongline); + ActivityLonglineTopiaDao activityLonglineDao = getTopiaPersistenceContext().getActivityLonglineDao(); + + ActivityLongline activityLongline = activityLonglineDao.forSetLonglineEquals(setLongline).findUnique(); + + form.getForm().setOtherSets(getOtherSetLonglineDtos(activityLongline, setLongline)); + return form; } @@ -105,6 +117,8 @@ public class SetLonglineServiceTopia extends ObserveServiceTopia implements SetL FormDto<SetLonglineDto> form = entityToEditFormDto(SetLonglineDto.class, SetLongline.class, preCreated); + form.getForm().setOtherSets(getOtherSetLonglineDtos(activityLongline, preCreated)); + return form; } @@ -151,4 +165,34 @@ public class SetLonglineServiceTopia extends ObserveServiceTopia implements SetL public boolean exists(String id) { return existsEntity(SetLongline.class, id); } + + protected Set<SetLonglineStubDto> getOtherSetLonglineDtos(ActivityLongline currentActivityLongline, SetLongline setLongline) { + + Set<SetLonglineStubDto> otherSetLonglineDtos = Sets.newHashSet(); + + TripLonglineTopiaDao tripLonglineDao = getTopiaPersistenceContext().getTripLonglineDao(); + + TripLongline tripLongline = tripLonglineDao.forActivityLonglineContains(currentActivityLongline).findUnique(); + + for (ActivityLongline activityLongline : tripLongline.getActivityLongline()) { + + SetLongline otherSetLongline = activityLongline.getSetLongline(); + + if (otherSetLongline != null && ! setLongline.equals(otherSetLongline)) { + + SetLonglineStubDto otherSetDto = new SetLonglineStubDto(); + otherSetDto.setId(otherSetLongline.getTopiaId()); + otherSetDto.setHomeId(otherSetLongline.getHomeId()); + otherSetDto.setNumber(otherSetLongline.getNumber()); + otherSetDto.setActivityLongline(entityToReferenceDto(activityLongline)); + otherSetLonglineDtos.add(otherSetDto); + + } + + } + + return otherSetLonglineDtos; + + } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 1f8ca0fac8aeb52e48f2d89ab3aa6970a9dadb90 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Nov 10 10:35:19 2015 +0100 Suppression des validateurs non utilisés (refs 7706) --- .../dto/ActivityDebutDePecheSaneDtoValidator.java | 205 ---------- .../dto/ActivityFinDePecheSaneDtoValidator.java | 242 ----------- .../dto/RouteActivitysFieldDtoValidator.java | 132 ------ .../dto/VesselActivityFieldDtoValidator.java | 451 --------------------- .../src/main/resources/validators.xml | 3 - .../src/main/resources/validators.xml | 2 - .../ActivityDebutDePecheSaneValidator.java | 199 --------- .../entities/ActivityFinDePecheSaneValidator.java | 237 ----------- .../entities/RouteActivitysFieldValidator.java | 135 ------ .../entities/VesselActivityFieldValidator.java | 446 -------------------- .../src/test/resources/validators.xml | 2 - .../src/test/resources/validators.xml | 2 - 12 files changed, 2056 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityDebutDePecheSaneDtoValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityDebutDePecheSaneDtoValidator.java deleted file mode 100644 index f31fe9c..0000000 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityDebutDePecheSaneDtoValidator.java +++ /dev/null @@ -1,205 +0,0 @@ -package fr.ird.observe.validation.validator.dto; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.services.dto.seine.ActivitySeineDto; -import fr.ird.observe.services.dto.seine.RouteDto; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.Date; - -/** - * <!-- START SNIPPET: javadoc --> ActivityDebutDePecheSaneValidator vérifie que - * que l'utilisation d'une activity de début de calée est possible. - * <p/> - * On peut utiliser une activité de ce type uniquement si il n'existe pas déjà - * une telle activité de calée positive et qui n'est pas suivie d'une activité - * de fin de veille. <!-- END SNIPPET: javadoc - * --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public class ActivityDebutDePecheSaneDtoValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(ActivityDebutDePecheSaneDtoValidator.class); - - private ValueStack stack; - - @Override - public String getValidatorType() { - return "activityDebutDePecheSane"; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - if (object == null) { - - // pas d'objet, donc rien a faire - return; - } - - ActivitySeineDto activitySeine = (ActivitySeineDto) object; - - // FIXME migration client-serveur -// if (!activitySeine.isSetOperation()) { -// -// // rien a valider -// return; -// } - - if (activitySeine.getTime() == null) { - - // heure d'obsersation non encore positionne, on ne peut pas valider - return; - } - - // l'activity est une activite de début de pêche - // on doit vérifier qu'il n'existe pas déjà une autre telle - // activité (de caléé positive) qui n'est pas suivi d'une activité - // de fin de pêche - - RouteDto route = (RouteDto) stack.findValue("routeEntity"); - if (route == null) { - - if (log.isWarnEnabled()) { - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - } - return; - } - - boolean valid; - - if (activitySeine.getId() == null) { - - // activity en creation - valid = checkCreateMode(route, activitySeine); - - } else { - - // activity en mise a jour - valid = checkUpdateMode(route, activitySeine); - } - - if (!valid) { - - addError(object); - } - } - - protected boolean checkCreateMode(RouteDto route, ActivitySeineDto activitySeine) { - - Date currentTime = activitySeine.getTime(); - - // recuperation de l'activity de debut de peche juste avant la nouvelle - // activity - // FIXME migration client-serveur -// ActivitySeineDto openSet = -// ActivitySeineDtos.getLastActivityDebutDePechePositiveBefore(route, currentTime); - ActivitySeineDto openSet = null; - - if (openSet == null) { - - // pas de peche positive avant la nouvelle activity - // on autorise donc celle-ci - return true; - } - - // on cherche la fin de pêche associée à l'actitivé retenue - // FIXME migration client-serveur -// ActivitySeineDto closeSet = -// ActivitySeineDtos.getNextActivityFinDePeche(route, openSet); - ActivitySeineDto closeSet = null; - - return closeSet != null && - currentTime.after(closeSet.getTime()); - } - - protected boolean checkUpdateMode(RouteDto route, ActivitySeineDto activitySeine) { - - // on recupere l'activity de fermeture de l'activite de peche - // FIXME migration client-serveur -// ActivitySeineDto closeSet = -// ActivitySeineDtos.getNextActivityFinDePeche(route, activitySeine); - ActivitySeineDto closeSet = null; - - if (closeSet == null) { - // pas d'activity de fin, cela est possible ? - return true; - } - - Date currentTime = activitySeine.getTime(); - - // on doit vérifier que l'heure du debut de set n'est pas apres la fin - return !currentTime.after(closeSet.getTime()); - } - - protected void addError(Object object) { - // la set n'est pas fermee ou bien on veut inserer le debut de peche - // avant la fermeture d'une autre peche ce qui n'est pas possible - String fieldName = getFieldName(); - if (log.isInfoEnabled()) { - log.info("not valid , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } -} diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityFinDePecheSaneDtoValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityFinDePecheSaneDtoValidator.java deleted file mode 100644 index f83f48f..0000000 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityFinDePecheSaneDtoValidator.java +++ /dev/null @@ -1,242 +0,0 @@ -package fr.ird.observe.validation.validator.dto; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.services.dto.seine.ActivitySeineDto; -import fr.ird.observe.services.dto.seine.RouteDto; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.Date; - -/** - * <!-- START SNIPPET: javadoc --> ActivityFinDePecheSaneValidator vérifie que - * que l'utilisation d'une activity de fin de pêche est requise ou non. - * <p/> - * On peut utiliser une activité de ce type uniquement si il existe déjà - * une activité de calée positive et sans activity de fin de pêche. - * <!-- END SNIPPET: javadoc --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public class ActivityFinDePecheSaneDtoValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(ActivityFinDePecheSaneDtoValidator.class); - - private ValueStack stack; - - @Override - public String getValidatorType() { - return "activityFinDePecheSane"; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - if (object == null) { - - // pas d'objet, donc rien a faire - return; - } - - ActivitySeineDto activitySeine = (ActivitySeineDto) object; - - // FIXME migration client-serveur -// if (!activitySeine.isActivityFinDePeche()) { -// -// // rien a valider -// return; -// } - - Date currentTime = activitySeine.getTime(); - - if (currentTime == null) { - - // heure d'obsersation non encore positionne, on ne peut pas valider - return; - } - - // l'activity est une activite de début de pêche - // on doit vérifier qu'il n'existe pas déjà une autre telle - // activité (de caléé positive) qui n'est pas suivi d'une activité - // de fin de pêche - - RouteDto route = (RouteDto) stack.findValue("routeEntity"); - if (route == null) { - - if (log.isWarnEnabled()) { - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - } - return; - } - - boolean valid; - - if (activitySeine.getId() == null) { - - // activity en creation - valid = checkCreateMode(route, activitySeine); - - } else { - - // activity en mise a jour - valid = checkUpdateMode(route, activitySeine); - } - - if (!valid) { - - addError(object); - } - - } - - - protected boolean checkCreateMode(RouteDto route, ActivitySeineDto activitySeine) { - - Date currentTime = activitySeine.getTime(); - - // recuperation de l'activity de debut de peche juste avant la nouvelle - // activity - // FIXME migration client-serveur -// ActivitySeineDto openSet = -// ActivitySeineDtos.getLastActivityDebutDePechePositiveBefore(route, currentTime); - ActivitySeineDto openSet = null; - - if (openSet == null) { - - // pas de peche positive avant la nouvelle activity - // pas possible de fermer une peche - return false; - } - - // on cherche la fin de pêche associée à l'actitivé retenue - // FIXME migration client-serveur -// ActivitySeineDto closeSet = ActivitySeineDtos.getNextActivityFinDePeche(route, openSet); - ActivitySeineDto closeSet = null; - - if (closeSet == null) { - - // la set n'est pas fermee, on peut donc ajouter une activity - // de fin de peche - return true; - } - - // la set est deja ferme, on ne peut donc pas creer une activity de - // fin de peche - return false; - } - - protected boolean checkUpdateMode(RouteDto route, ActivitySeineDto activitySeine) { - - Date currentTime = activitySeine.getTime(); - - // on recupere le debut de peche de cette activity de fin de peche - // FIXME migration client-serveur -// ActivitySeineDto openSet = ActivitySeineDtos.getLastActivityDebutDePechePositiveBefore(route, currentTime); - ActivitySeineDto openSet = null; - - if (openSet == null) { - - // la fin de peche ne couvre plus son debut de peche - return false; - } - - if (currentTime.before(openSet.getTime())) { - - // l'activity de fin ne peut pas etre avant le debut de peche - return false; - } - - // on recupere la prochaine activity de peche - // FIXME migration client-serveur -// openSet = ActivitySeineDtos.getNextActivityDebutDePechePositive(route, activitySeine); - - if (openSet == null) { - // pas de set apres cell-ci, donc pas de probleme - return true; - } - - - // il existe une activity de peche apres celle-ci - - if (currentTime.after(openSet.getTime())) { - - // la fin de peche ne couvre plus son debut de peche - return false; - } - - //TODO On doit interdire dans l'éditeur de temps la possibilite - //TODO de saisir une fil de set avant un debut de calee... - return true; - - } - - - protected void addError(Object object) { - // ce qui est requis et ce qui existe n'est pas en adequation - String fieldName = getFieldName(); - if (log.isInfoEnabled()) { - log.info("not valid , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } - -} diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/RouteActivitysFieldDtoValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/RouteActivitysFieldDtoValidator.java deleted file mode 100644 index f0ca598..0000000 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/RouteActivitysFieldDtoValidator.java +++ /dev/null @@ -1,132 +0,0 @@ -package fr.ird.observe.validation.validator.dto; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.services.dto.seine.RouteDto; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * <!-- START SNIPPET: javadoc --> RouteActivitysFieldValidator vérifie que - * les activtés d'une route sont cohérentes au niveau des activités vessel. - * <p/> - * On vérifie que chaque activté de pêche positive a été fermée. - * <p/> - * <!-- END SNIPPET: javadoc --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public class RouteActivitysFieldDtoValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(RouteActivitysFieldDtoValidator.class); - - private ValueStack stack; - - @Override - public String getValidatorType() { - return "routeActivitys"; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - if (object == null) { - - // pas d'objet, donc rien a faire - return; - } - - // On utilise la route fournie par la pile pour pouvoir la parcourir - // en profondeur (alors que celle offerte par l 'objet est celle de l'ui - // et qu'elle est déconnectée de la base ). - - RouteDto route = (RouteDto) stack.findValue("routeEntity"); - if (route == null) { - - if (log.isWarnEnabled()) { - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - } - return; - } - - if (route.isActivitySeineEmpty()) { - - // aucune activité, donc rien à valider - return; - } - - // récupération des activités de pêche positive sur la route - // FIXME migration client-serveur -// List<ActivitySeineDto> positiveSet = ActivitySeineDtos.getActivityDebutDePechePositive(route); -// -// List<ActivitySeineDto> closedSet = ActivitySeineDtos.getActivityFinDePeche(route); -// -// if (positiveSet.size() < closedSet.size()) { -// -// // il manque une activity de fin de pêche -// String fieldName = getFieldName(); -// if (log.isInfoEnabled()) { -// log.info("missing a activity fin de peche , fieldName : " + fieldName); -// } -// addFieldError(fieldName, object); -// } - } -} diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/VesselActivityFieldDtoValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/VesselActivityFieldDtoValidator.java deleted file mode 100644 index 635fa9e..0000000 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/VesselActivityFieldDtoValidator.java +++ /dev/null @@ -1,451 +0,0 @@ -package fr.ird.observe.validation.validator.dto; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Lists; -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.services.dto.referential.seine.VesselActivitySeineDto; -import fr.ird.observe.services.dto.seine.ActivitySeineDto; -import fr.ird.observe.services.dto.seine.ActivitySeineStubDto; -import fr.ird.observe.services.dto.seine.RouteDto; -import fr.ird.observe.services.dto.seine.TripSeineDto; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.ArrayList; -import java.util.List; - -/** - * <!-- START SNIPPET: javadoc --> VesselActivityFieldValidator vérifie que - * l'activity vessel d'une activité est cohérente. <!-- END SNIPPET: javadoc - * --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.0 - */ -public class VesselActivityFieldDtoValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(VesselActivityFieldDtoValidator.class); - - private ValueStack stack; - - private String code; - - public void setCode(String code) { - this.code = code; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - if (code == null) { - throw new ValidationException("le parametre code est obligatoire"); - } - - try { - ActivitySeineDto activitySeine = (ActivitySeineDto) object; - if (activitySeine == null) { - if (log.isDebugEnabled()) { - log.debug("pas d'activity!"); - } - // pas d'activity - return; - } -// boolean create = activity.getTopiaId() == null; -// if (!create) { -// // l'activity vessel est uniquement modifiable en mode creation -// return; -// } - - VesselActivitySeineDto property; - property = (VesselActivitySeineDto) getFieldValue(ActivitySeineDto.PROPERTY_VESSEL_ACTIVITY_SEINE, - object); - if (property == null) { - // si pas de valeur, on ne fait rien - if (log.isDebugEnabled()) { - log.debug("pas d'activity vessel!"); - } - return; - } - - boolean valid = true; - - TripSeineDto maree = (TripSeineDto) stack.findValue("tripEntity"); - - if (maree == null) { - - log.warn("COULD NOT FIND DATA CONTEXT! [tripEntity]"); - return; - } - if (log.isDebugEnabled()) { - log.debug("maree : " + maree); - } - RouteDto route = (RouteDto) stack.findValue("routeEntity"); - if (route == null) { - - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - return; - } - if (log.isDebugEnabled()) { - log.debug("route : " + route); - } - - String activityCode = (String) activitySeine.getVesselActivitySeine().getPropertyValue(VesselActivitySeineDto.PROPERTY_CODE); - int nbActivitys = route.sizeActivitySeine(); - - if (code.equals("-16") && !activityCode.equals(ActivitySeineDto.ACTIVITY_FIN_DE_VEILLE)) { - - valid = validate_16(activitySeine, maree, route, nbActivitys, false); - } - - switch (Integer.valueOf(code)) { - case 6: - if (activityCode.equals(ActivitySeineDto.ACTIVITY_FIN_DE_PECHE)) { - valid = validate_6(activitySeine, maree, route, nbActivitys); - } - break; - case 7: - if (activityCode.equals(ActivitySeineDto.ACTIVITY_DEBUT_DE_PECHE)) { - valid = validate_7(activitySeine, maree, route, nbActivitys); - } - break; - case 16: - if (activityCode.equals(ActivitySeineDto.ACTIVITY_FIN_DE_VEILLE)) { - valid = validate_16(activitySeine, maree, route, - nbActivitys, true); - } - break; - } - - - if (!valid) { - String fieldName = getFieldName(); - if (log.isDebugEnabled()) { - log.debug("not valid , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } - } catch (ValidationException e) { - throw e; - } catch (Exception e) { - log.error(e.getMessage(), e); - - } - - } - - @Override - public String getValidatorType() { - return "activityvessel"; - } - - /** - * validation de l'activity vessel 6 (debut de peche). - * <p/> - * Pour accepter une activité de début de pêche, on doit vérifier toutes les - * conditions suivantes : - * <p/> - * - si une activité de début de pêches existe sur la route avant cette - * activité, elle doit être fermée. - * - * @param activitySeine l'activite en cours de creation - * @param maree la maree courante - * @param route la route courante - * @param nbActivitys le counts d'activités actuellement (sans l'activity a - * tester) - * @return {@code true} if valid, {@code false} otherwise - */ - protected boolean validate_6(ActivitySeineDto activitySeine, - TripSeineDto maree, - RouteDto route, - int nbActivitys) { - if (nbActivitys == 0) { - // aucune activity : ok - return true; - } - //FIXME: non l'algo ne fonctionne pas : il faut calculer les intervalles - //FIXME: de set (debut -fin) ou (debut) - //FIXME: si on un intervalle (debut) alors pas possible - //FIXME: sinon on verifier que l'activity qu'on veut créer n'est pas - //FIXME: dans un intervalle (debut-fin) - List<ActivitySeineStubDto> activitySeines = Lists.newArrayList(route.getActivitySeine()); - Integer[] detectDebutSet = detectActivity(route, ActivitySeineDto.ACTIVITY_FIN_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineDto.ACTIVITY_DEBUT_DE_PECHE); - int nbDebutReal = 0; - int lastDebutReal = 0; - for (Integer i : detectDebutSet) { - ActivitySeineStubDto bActivitySeine = activitySeines.get(i); - // FIXME migration client-serveur -// if (bActivitySeine.getReasonForNoFishing() == null -// && bActivitySeine.getSetSeine() != null ) { -// // une senne -// nbDebutReal++; -// lastDebutReal = i; -// } - } - // il n'y a pas d'activity de debut de peche disponible - if (nbDebutReal > detectFinSet.length) { - ActivitySeineStubDto bActivitySeine = activitySeines.get(lastDebutReal); - log.info("il existe deja une activity de peche non fini : " + - bActivitySeine.getTime()); - return false; - } - - // tout est ok - return true; - } - - /** - * validation de l'activity vessel 7 (fin de peche) - * <p/> - * Pour accepter une activité de fin de pêche, on doit vérifier que toutes - * les conditions suivantes sont remplies : - * <p/> - * - une activité de début de pêche (avec coup de senne ?) précède cette - * activité et n'est pas déjà associée à une activité de fin de pêche. - * - * @param activitySeine l'activite en cours de creation - * @param maree la maree courante - * @param route la route courante - * @param nbActivitys le counts d'activités actuellement (sans l'activity a - * tester) - * @return {@code true} if valid, {@code false} otherwise - */ - protected boolean validate_7(ActivitySeineDto activitySeine, - TripSeineDto maree, - RouteDto route, - int nbActivitys) { - if (nbActivitys == 0) { - // aucune activity : donc pas possible - return false; - } - List<ActivitySeineStubDto> activitySeines = Lists.newArrayList(route.getActivitySeine()); - Integer[] detectDebutSet = detectActivity(route, ActivitySeineDto.ACTIVITY_FIN_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineDto.ACTIVITY_DEBUT_DE_PECHE); - Integer lastFinSet = null; - if (detectFinSet.length > 0) { - lastFinSet = detectFinSet[detectFinSet.length - 1]; - } -// int nbDebutReal = 0; -// Integer lastDebutReal = 0; - Integer lastDebutReal = null; - for (Integer i : detectDebutSet) { - ActivitySeineStubDto bActivitySeine = activitySeines.get(i); - // FIXME migration client-serveur -// if (bActivitySeine.getReasonForNoFishing() == null -// -// && bActivitySeine.getSetSeine() != null ) { -// // une senne -//// nbDebutReal++; -// lastDebutReal = i; -// } - } - if (lastDebutReal == null) { - // pas de set ouverte - log.info("pas d'activity de debut de peche ouverte"); - return false; - } - - // il n'y a pas d'activity de debut de peche disponible - if (lastFinSet != null && lastDebutReal < lastFinSet) { - log.info("pas d'activity de debut de peche disponible"); - return false; - } - - // il existe une set ouverte - ActivitySeineStubDto bActivitySeine = activitySeines.get(lastDebutReal); - - if (bActivitySeine.getTime().after(activitySeine.getTime())) { - log.info("activity de fin " + activitySeine.getTime() + - " doit etre apres celle de debut de peche : " + - bActivitySeine.getTime()); - // pas ok - return false; - } - - // tout est ok - return true; - } - - /** - * validation de l'activity vessel 16 (fin de veille). - * <p/> - * Pour accepter une activité de fin de veille, on doit vérifier toutes les - * conditions suivantes sont remplies : - * <p/> - * <pre> - * - toute activité de début de pêche doit être associée à une activité de - * fin de pêche (sauf si non coup de senne ?). - * - une seule activité de fin par route - * </pre> - * <p/> - * Pour toutes les autres activités (<code>is16 == false</code>), on doit - * vérifier : - * <p/> - * - l'activité est toujours avant une éventuelle activité de fin de - * veille. - * - * @param activitySeine l'activite en cours de creation - * @param maree la maree courante - * @param route la route courante - * @param nbActivitys le counts d'activités actuellement (sans l'activity a - * tester) - * @param is16 drapeau pour savoir si on accepte la valeur ou toutes - * les autres valeurs. - * @return {@code true} if valid, {@code false} otherwise - */ - protected boolean validate_16(ActivitySeineDto activitySeine, - TripSeineDto maree, - RouteDto route, - int nbActivitys, - boolean is16) { - if (nbActivitys == 0) { - // pas d'autre activity : ok - return true; - } - - if (is16) { - // on est sur une activity de fin de veille - List<ActivitySeineStubDto> activitySeines = Lists.newArrayList(route.getActivitySeine()); - // une seule activity de fin de veille par route - Integer[] detectActivity = detectActivity(route, ActivitySeineDto.ACTIVITY_FIN_DE_VEILLE); - if (activitySeine.getId() == null && detectActivity.length > 0) { - - log.info("il existe deja une activity de fin de veille!"); - return false; - } - - // chemit 2010-05-23 Cela n'est plus d'actualité : On peut avoir une activité après celle de fin de veille - - // l'activity de fin de veille doit toujours etre la plus recente -// Activity lastActivity = route.getLastActivity(); -// if (activity.getTime().before( -// lastActivity.getTime())) { -// // activity pas en derniere position -// log.info("l'activity de fin de veille doit etre la derniere " + -// "activity de la route"); -// -// return false; -// } - // il ne peut pas rester une activity de debut de peche sans fin - // de set (sauf si non coup de senne ?) - Integer[] detectDebutSet = detectActivity(route, ActivitySeineDto.ACTIVITY_FIN_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineDto.ACTIVITY_DEBUT_DE_PECHE); - int nbDebutReal = 0; - for (Integer i : detectDebutSet) { - ActivitySeineStubDto bActivitySeine = activitySeines.get(i); - // FIXME migration client-serveur - // if (bActivitySeine.getReasonForNoFishing() == null - // && bActivitySeine.getSetSeine() != null) { - // // une senne - // nbDebutReal++; - //} - } - if (nbDebutReal > detectFinSet.length) { - log.info("il manque une activity de fin de peche"); - return false; - } - - // tout est ok - return true; - } - - // chemit 2010-05-23 Cela n'est plus d'actualité : On peut avoir une activité après celle de fin de veille - - // on est sur une autre activity que celle de fin de veille, - // elle doit obligatoirement etre avant une eventuelle activity - // de fin de veille - -// List<Activity> activitys = route.getActivity(); -// Integer[] detectActivity = detectActivity(route, 16); -// if (detectActivity.length > 0) { -// Activity activityFinVeille = activites.get(detectActivity[0]); -// if (activity.getTime().after( -// activityFinVeille.getTime())) { -// log.info("activity doit etre avant la fin de veille : " + -// activityFinVeille.getTime()); -// // pas ok -// return false; -// } -// } - - // tout est ok - return true; - } - - /** - * Recupere les positions des activitys d'un certain type - * - * @param route la route à inspecter - * @param code le code du type d'activité à rechercher - * @return les positions des activitys d'un certain type donné - */ - protected Integer[] detectActivity(RouteDto route, String code) { - List<Integer> list = new ArrayList<Integer>(); - int index = 0; - for (ActivitySeineStubDto a : route.getActivitySeine()) { - // FIXME migration client-serveur -// String c = (String) a.getVesselActivitySeine().getPropertyValue(VesselActivitySeineDto.PROPERTY_CODE); -// if (code.equals(c)) { -// list.add(index); -// } - index++; - } - return list.toArray(new Integer[list.size()]); - } -} diff --git a/observe-application-swing/src/main/resources/validators.xml b/observe-application-swing/src/main/resources/validators.xml index f2f63bd..5856328 100644 --- a/observe-application-swing/src/main/resources/validators.xml +++ b/observe-application-swing/src/main/resources/validators.xml @@ -53,7 +53,6 @@ <validator name="fieldexpressionwithparams" class="org.nuiton.validator.xwork2.field.FieldExpressionWithParamsValidator"/> <!-- les validateurs spécifiques à ObServe --> - <validator name="collectionFieldExpression2" class="fr.ird.observe.validation.validator.CollectionFieldExpressionValidator2"/> <validator name="collectionFieldExpression" class="fr.ird.observe.validation.validator.CollectionFieldExpressionValidator2"/> <validator name="collectionUniqueKey" class="fr.ird.observe.validation.validator.CollectionUniqueKeyValidator2"/> <validator name="observeCollectionUniqueKey" class="fr.ird.observe.validation.validator.ObserveCollectionUniqueKeyValidator"/> @@ -62,7 +61,6 @@ <!--<validator name="openableEntity" class="fr.ird.observe.business.validation.field.OpenableFieldValidator"/>--> <validator name="species_length" class="fr.ird.observe.validation.validator.entities.SpeciesLengthFieldValidator"/> <validator name="species_weight" class="fr.ird.observe.validation.validator.entities.SpeciesWeightFieldValidator"/> - <validator name="activitybateau" class="fr.ird.observe.validation.validator.entities.VesselActivityFieldValidator"/> <validator name="activitySpeed" class="fr.ird.observe.validation.validator.entities.ActivitySpeedValidator"/> <validator name="activitySimpleSpeed" class="fr.ird.observe.validation.validator.entities.ActivitySimpleSpeedValidator"/> <validator name="activityFinDeVeilleExists" class="fr.ird.observe.validation.validator.entities.ActivityFinDeVeilleExistsValidator"/> @@ -73,7 +71,6 @@ <!--<validator name="openableEntity" class="fr.ird.observe.business.validation.field.OpenableFieldValidator"/>--> <validator name="species_lengthDto" class="fr.ird.observe.validation.validator.dto.SpeciesLengthFieldDtoValidator"/> <validator name="species_weightDto" class="fr.ird.observe.validation.validator.dto.SpeciesWeightFieldDtoValidator"/> - <validator name="activitybateauDto" class="fr.ird.observe.validation.validator.dto.VesselActivityFieldDtoValidator"/> <validator name="activitySpeedDto" class="fr.ird.observe.validation.validator.dto.ActivitySpeedDtoValidator"/> <validator name="activitySimpleSpeedDto" class="fr.ird.observe.validation.validator.dto.ActivitySimpleSpeedDtoValidator"/> <validator name="activityFinDeVeilleExistsDto" class="fr.ird.observe.validation.validator.dto.ActivityFinDeVeilleExistsDtoValidator"/> diff --git a/observe-application-web/src/main/resources/validators.xml b/observe-application-web/src/main/resources/validators.xml index 1f8667a..c75ce35 100644 --- a/observe-application-web/src/main/resources/validators.xml +++ b/observe-application-web/src/main/resources/validators.xml @@ -53,7 +53,6 @@ <validator name="fieldexpressionwithparams" class="org.nuiton.validator.xwork2.field.FieldExpressionWithParamsValidator"/> <!-- les validateurs spécifiques à ObServe --> - <validator name="collectionFieldExpression2" class="fr.ird.observe.validation.validator.CollectionFieldExpressionValidator2"/> <validator name="collectionFieldExpression" class="fr.ird.observe.validation.validator.CollectionFieldExpressionValidator2"/> <validator name="collectionUniqueKey" class="fr.ird.observe.validation.validator.CollectionUniqueKeyValidator2"/> <validator name="observeCollectionUniqueKey" class="fr.ird.observe.validation.validator.ObserveCollectionUniqueKeyValidator"/> @@ -62,7 +61,6 @@ <!--<validator name="openableEntity" class="fr.ird.observe.business.validation.field.OpenableFieldValidator"/>--> <validator name="species_length" class="fr.ird.observe.validation.validator.entities.SpeciesLengthFieldValidator"/> <validator name="species_weight" class="fr.ird.observe.validation.validator.entities.SpeciesWeightFieldValidator"/> - <validator name="activitybateau" class="fr.ird.observe.validation.validator.entities.VesselActivityFieldValidator"/> <validator name="activitySpeed" class="fr.ird.observe.validation.validator.entities.ActivitySpeedValidator"/> <validator name="activitySimpleSpeed" class="fr.ird.observe.validation.validator.entities.ActivitySimpleSpeedValidator"/> <validator name="activityFinDeVeilleExists" class="fr.ird.observe.validation.validator.entities.ActivityFinDeVeilleExistsValidator"/> diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/ActivityDebutDePecheSaneValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/ActivityDebutDePecheSaneValidator.java deleted file mode 100644 index b0ba32a..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/ActivityDebutDePecheSaneValidator.java +++ /dev/null @@ -1,199 +0,0 @@ -package fr.ird.observe.validation.validator.entities; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeines; -import fr.ird.observe.entities.seine.Route; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.Date; - -/** - * <!-- START SNIPPET: javadoc --> ActivityDebutDePecheSaneValidator vérifie que - * que l'utilisation d'une activity de début de calée est possible. - * <p/> - * On peut utiliser une activité de ce type uniquement si il n'existe pas déjà - * une telle activité de calée positive et qui n'est pas suivie d'une activité - * de fin de veille. <!-- END SNIPPET: javadoc - * --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public class ActivityDebutDePecheSaneValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(ActivityDebutDePecheSaneValidator.class); - - private ValueStack stack; - - @Override - public String getValidatorType() { - return "activityDebutDePecheSane"; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - if (object == null) { - - // pas d'objet, donc rien a faire - return; - } - - ActivitySeine activitySeine = (ActivitySeine) object; - - if (!activitySeine.isSetOperation()) { - - // rien a valider - return; - } - - if (activitySeine.getTime() == null) { - - // heure d'obsersation non encore positionne, on ne peut pas valider - return; - } - - // l'activity est une activite de début de pêche - // on doit vérifier qu'il n'existe pas déjà une autre telle - // activité (de caléé positive) qui n'est pas suivi d'une activité - // de fin de pêche - - Route route = (Route) stack.findValue("routeEntity"); - if (route == null) { - - if (log.isWarnEnabled()) { - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - } - return; - } - - boolean valid; - - if (activitySeine.getTopiaId() == null) { - - // activity en creation - valid = checkCreateMode(route, activitySeine); - - } else { - - // activity en mise a jour - valid = checkUpdateMode(route, activitySeine); - } - - if (!valid) { - - addError(object); - } - } - - protected boolean checkCreateMode(Route route, ActivitySeine activitySeine) { - - Date currentTime = activitySeine.getTime(); - - // recuperation de l'activity de debut de peche juste avant la nouvelle - // activity - ActivitySeine openSet = - ActivitySeines.getLastActivityDebutDePechePositiveBefore(route, currentTime); - - if (openSet == null) { - - // pas de peche positive avant la nouvelle activity - // on autorise donc celle-ci - return true; - } - - // on cherche la fin de pêche associée à l'actitivé retenue - ActivitySeine closeSet = - ActivitySeines.getNextActivityFinDePeche(route, openSet); - - return closeSet != null && - currentTime.after(closeSet.getTime()); - } - - protected boolean checkUpdateMode(Route route, ActivitySeine activitySeine) { - - // on recupere l'activity de fermeture de l'activite de peche - ActivitySeine closeSet = - ActivitySeines.getNextActivityFinDePeche(route, activitySeine); - - if (closeSet == null) { - // pas d'activity de fin, cela est possible ? - return true; - } - - Date currentTime = activitySeine.getTime(); - - // on doit vérifier que l'heure du debut de set n'est pas apres la fin - return !currentTime.after(closeSet.getTime()); - } - - protected void addError(Object object) { - // la set n'est pas fermee ou bien on veut inserer le debut de peche - // avant la fermeture d'une autre peche ce qui n'est pas possible - String fieldName = getFieldName(); - if (log.isInfoEnabled()) { - log.info("not valid , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/ActivityFinDePecheSaneValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/ActivityFinDePecheSaneValidator.java deleted file mode 100644 index 34e6232..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/ActivityFinDePecheSaneValidator.java +++ /dev/null @@ -1,237 +0,0 @@ -package fr.ird.observe.validation.validator.entities; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeines; -import fr.ird.observe.entities.seine.Route; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.Date; - -/** - * <!-- START SNIPPET: javadoc --> ActivityFinDePecheSaneValidator vérifie que - * que l'utilisation d'une activity de fin de pêche est requise ou non. - * <p/> - * On peut utiliser une activité de ce type uniquement si il existe déjà - * une activité de calée positive et sans activity de fin de pêche. - * <!-- END SNIPPET: javadoc --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public class ActivityFinDePecheSaneValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(ActivityFinDePecheSaneValidator.class); - - private ValueStack stack; - - @Override - public String getValidatorType() { - return "activityFinDePecheSane"; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - if (object == null) { - - // pas d'objet, donc rien a faire - return; - } - - ActivitySeine activitySeine = (ActivitySeine) object; - - if (!activitySeine.isActivityFinDePeche()) { - - // rien a valider - return; - } - - Date currentTime = activitySeine.getTime(); - - if (currentTime == null) { - - // heure d'obsersation non encore positionne, on ne peut pas valider - return; - } - - // l'activity est une activite de début de pêche - // on doit vérifier qu'il n'existe pas déjà une autre telle - // activité (de caléé positive) qui n'est pas suivi d'une activité - // de fin de pêche - - Route route = (Route) stack.findValue("routeEntity"); - if (route == null) { - - if (log.isWarnEnabled()) { - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - } - return; - } - - boolean valid; - - if (activitySeine.getTopiaId() == null) { - - // activity en creation - valid = checkCreateMode(route, activitySeine); - - } else { - - // activity en mise a jour - valid = checkUpdateMode(route, activitySeine); - } - - if (!valid) { - - addError(object); - } - - } - - - protected boolean checkCreateMode(Route route, ActivitySeine activitySeine) { - - Date currentTime = activitySeine.getTime(); - - // recuperation de l'activity de debut de peche juste avant la nouvelle - // activity - ActivitySeine openSet = - ActivitySeines.getLastActivityDebutDePechePositiveBefore(route, currentTime); - - if (openSet == null) { - - // pas de peche positive avant la nouvelle activity - // pas possible de fermer une peche - return false; - } - - // on cherche la fin de pêche associée à l'actitivé retenue - ActivitySeine closeSet = ActivitySeines.getNextActivityFinDePeche(route, openSet); - - if (closeSet == null) { - - // la set n'est pas fermee, on peut donc ajouter une activity - // de fin de peche - return true; - } - - // la set est deja ferme, on ne peut donc pas creer une activity de - // fin de peche - return false; - } - - protected boolean checkUpdateMode(Route route, ActivitySeine activitySeine) { - - Date currentTime = activitySeine.getTime(); - - // on recupere le debut de peche de cette activity de fin de peche - ActivitySeine openSet = - ActivitySeines.getLastActivityDebutDePechePositiveBefore(route, currentTime); - - if (openSet == null) { - - // la fin de peche ne couvre plus son debut de peche - return false; - } - - if (currentTime.before(openSet.getTime())) { - - // l'activity de fin ne peut pas etre avant le debut de peche - return false; - } - - // on recupere la prochaine activity de peche - openSet = - ActivitySeines.getNextActivityDebutDePechePositive(route, activitySeine); - - if (openSet == null) { - // pas de set apres cell-ci, donc pas de probleme - return true; - } - - - // il existe une activity de peche apres celle-ci - - if (currentTime.after(openSet.getTime())) { - - // la fin de peche ne couvre plus son debut de peche - return false; - } - - //TODO On doit interdire dans l'éditeur de temps la possibilite - //TODO de saisir une fil de set avant un debut de calee... - return true; - - } - - - protected void addError(Object object) { - // ce qui est requis et ce qui existe n'est pas en adequation - String fieldName = getFieldName(); - if (log.isInfoEnabled()) { - log.info("not valid , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } - -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/RouteActivitysFieldValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/RouteActivitysFieldValidator.java deleted file mode 100644 index f530449..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/RouteActivitysFieldValidator.java +++ /dev/null @@ -1,135 +0,0 @@ -package fr.ird.observe.validation.validator.entities; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeines; -import fr.ird.observe.entities.seine.Route; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.List; - -/** - * <!-- START SNIPPET: javadoc --> RouteActivitysFieldValidator vérifie que - * les activtés d'une route sont cohérentes au niveau des activités vessel. - * <p/> - * On vérifie que chaque activté de pêche positive a été fermée. - * <p/> - * <!-- END SNIPPET: javadoc --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public class RouteActivitysFieldValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(RouteActivitysFieldValidator.class); - - private ValueStack stack; - - @Override - public String getValidatorType() { - return "routeActivitys"; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - if (object == null) { - - // pas d'objet, donc rien a faire - return; - } - - // On utilise la route fournie par la pile pour pouvoir la parcourir - // en profondeur (alors que celle offerte par l 'objet est celle de l'ui - // et qu'elle est déconnectée de la base ). - - Route route = (Route) stack.findValue("routeEntity"); - if (route == null) { - - if (log.isWarnEnabled()) { - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - } - return; - } - - if (route.isActivitySeineEmpty()) { - - // aucune activité, donc rien à valider - return; - } - - // récupération des activités de pêche positive sur la route - List<ActivitySeine> positiveSet = ActivitySeines.getActivityDebutDePechePositive(route); - - List<ActivitySeine> closedSet = ActivitySeines.getActivityFinDePeche(route); - - if (positiveSet.size() < closedSet.size()) { - - // il manque une activity de fin de pêche - String fieldName = getFieldName(); - if (log.isInfoEnabled()) { - log.info("missing a activity fin de peche , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } - } -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/VesselActivityFieldValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/VesselActivityFieldValidator.java deleted file mode 100644 index a3b389c..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/validation/validator/entities/VesselActivityFieldValidator.java +++ /dev/null @@ -1,446 +0,0 @@ -package fr.ird.observe.validation.validator.entities; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Lists; -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.referentiel.seine.VesselActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeineImpl; -import fr.ird.observe.entities.seine.Route; -import fr.ird.observe.entities.seine.TripSeine; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.ArrayList; -import java.util.List; - -/** - * <!-- START SNIPPET: javadoc --> VesselActivityFieldValidator vérifie que - * l'activity vessel d'une activité est cohérente. <!-- END SNIPPET: javadoc - * --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.0 - */ -public class VesselActivityFieldValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(VesselActivityFieldValidator.class); - - private ValueStack stack; - - private String code; - - public void setCode(String code) { - this.code = code; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - if (code == null) { - throw new ValidationException("le parametre code est obligatoire"); - } - - try { - ActivitySeine activitySeine = (ActivitySeine) object; - if (activitySeine == null) { - if (log.isDebugEnabled()) { - log.debug("pas d'activity!"); - } - // pas d'activity - return; - } -// boolean create = activity.getTopiaId() == null; -// if (!create) { -// // l'activity vessel est uniquement modifiable en mode creation -// return; -// } - - VesselActivitySeine property; - property = (VesselActivitySeine) getFieldValue(ActivitySeine.PROPERTY_VESSEL_ACTIVITY_SEINE, - object); - if (property == null) { - // si pas de valeur, on ne fait rien - if (log.isDebugEnabled()) { - log.debug("pas d'activity vessel!"); - } - return; - } - - boolean valid = true; - - TripSeine maree = (TripSeine) stack.findValue("tripEntity"); - - if (maree == null) { - - log.warn("COULD NOT FIND DATA CONTEXT! [tripEntity]"); - return; - } - if (log.isDebugEnabled()) { - log.debug("maree : " + maree); - } - Route route = (Route) stack.findValue("routeEntity"); - if (route == null) { - - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - return; - } - if (log.isDebugEnabled()) { - log.debug("route : " + route); - } - - String activityCode = activitySeine.getVesselActivitySeine().getCode(); - int nbActivitys = route.sizeActivitySeine(); - - if (code.equals("-16") && !activityCode.equals(ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE)) { - - valid = validate_16(activitySeine, maree, route, nbActivitys, false); - } - - switch (Integer.valueOf(code)) { - case 6: - if (activityCode.equals(ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE)) { - valid = validate_6(activitySeine, maree, route, nbActivitys); - } - break; - case 7: - if (activityCode.equals(ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE)) { - valid = validate_7(activitySeine, maree, route, nbActivitys); - } - break; - case 16: - if (activityCode.equals(ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE)) { - valid = validate_16(activitySeine, maree, route, - nbActivitys, true); - } - break; - } - - - if (!valid) { - String fieldName = getFieldName(); - if (log.isDebugEnabled()) { - log.debug("not valid , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } - } catch (ValidationException e) { - throw e; - } catch (Exception e) { - log.error(e.getMessage(), e); - - } - - } - - @Override - public String getValidatorType() { - return "activityvessel"; - } - - /** - * validation de l'activity vessel 6 (debut de peche). - * <p/> - * Pour accepter une activité de début de pêche, on doit vérifier toutes les - * conditions suivantes : - * <p/> - * - si une activité de début de pêches existe sur la route avant cette - * activité, elle doit être fermée. - * - * @param activitySeine l'activite en cours de creation - * @param maree la maree courante - * @param route la route courante - * @param nbActivitys le counts d'activités actuellement (sans l'activity a - * tester) - * @return {@code true} if valid, {@code false} otherwise - */ - protected boolean validate_6(ActivitySeine activitySeine, - TripSeine maree, - Route route, - int nbActivitys) { - if (nbActivitys == 0) { - // aucune activity : ok - return true; - } - //FIXME: non l'algo ne fonctionne pas : il faut calculer les intervalles - //FIXME: de set (debut -fin) ou (debut) - //FIXME: si on un intervalle (debut) alors pas possible - //FIXME: sinon on verifier que l'activity qu'on veut créer n'est pas - //FIXME: dans un intervalle (debut-fin) - List<ActivitySeine> activitySeines = Lists.newArrayList(route.getActivitySeine()); - Integer[] detectDebutSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE); - int nbDebutReal = 0; - int lastDebutReal = 0; - for (Integer i : detectDebutSet) { - ActivitySeine bActivitySeine = activitySeines.get(i); - if (bActivitySeine.getReasonForNoFishing() == null && - bActivitySeine.getSetSeine() != null) { - // une senne - nbDebutReal++; - lastDebutReal = i; - } - } - // il n'y a pas d'activity de debut de peche disponible - if (nbDebutReal > detectFinSet.length) { - ActivitySeine bActivitySeine = activitySeines.get(lastDebutReal); - log.info("il existe deja une activity de peche non fini : " + - bActivitySeine.getTime()); - return false; - } - - // tout est ok - return true; - } - - /** - * validation de l'activity vessel 7 (fin de peche) - * <p/> - * Pour accepter une activité de fin de pêche, on doit vérifier que toutes - * les conditions suivantes sont remplies : - * <p/> - * - une activité de début de pêche (avec coup de senne ?) précède cette - * activité et n'est pas déjà associée à une activité de fin de pêche. - * - * @param activitySeine l'activite en cours de creation - * @param maree la maree courante - * @param route la route courante - * @param nbActivitys le counts d'activités actuellement (sans l'activity a - * tester) - * @return {@code true} if valid, {@code false} otherwise - */ - protected boolean validate_7(ActivitySeine activitySeine, - TripSeine maree, - Route route, - int nbActivitys) { - if (nbActivitys == 0) { - // aucune activity : donc pas possible - return false; - } - List<ActivitySeine> activitySeines = Lists.newArrayList(route.getActivitySeine()); - Integer[] detectDebutSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE); - Integer lastFinSet = null; - if (detectFinSet.length > 0) { - lastFinSet = detectFinSet[detectFinSet.length - 1]; - } -// int nbDebutReal = 0; -// Integer lastDebutReal = 0; - Integer lastDebutReal = null; - for (Integer i : detectDebutSet) { - ActivitySeine bActivitySeine = activitySeines.get(i); - if (bActivitySeine.getReasonForNoFishing() == null && - bActivitySeine.getSetSeine() != null) { - // une senne -// nbDebutReal++; - lastDebutReal = i; - } - } - if (lastDebutReal == null) { - // pas de set ouverte - log.info("pas d'activity de debut de peche ouverte"); - return false; - } - - // il n'y a pas d'activity de debut de peche disponible - if (lastFinSet != null && lastDebutReal < lastFinSet) { - log.info("pas d'activity de debut de peche disponible"); - return false; - } - - // il existe une set ouverte - ActivitySeine bActivitySeine = activitySeines.get(lastDebutReal); - - if (bActivitySeine.getTime().after(activitySeine.getTime())) { - log.info("activity de fin " + activitySeine.getTime() + - " doit etre apres celle de debut de peche : " + - bActivitySeine.getTime()); - // pas ok - return false; - } - - // tout est ok - return true; - } - - /** - * validation de l'activity vessel 16 (fin de veille). - * <p/> - * Pour accepter une activité de fin de veille, on doit vérifier toutes les - * conditions suivantes sont remplies : - * <p/> - * <pre> - * - toute activité de début de pêche doit être associée à une activité de - * fin de pêche (sauf si non coup de senne ?). - * - une seule activité de fin par route - * </pre> - * <p/> - * Pour toutes les autres activités (<code>is16 == false</code>), on doit - * vérifier : - * <p/> - * - l'activité est toujours avant une éventuelle activité de fin de - * veille. - * - * @param activitySeine l'activite en cours de creation - * @param maree la maree courante - * @param route la route courante - * @param nbActivitys le counts d'activités actuellement (sans l'activity a - * tester) - * @param is16 drapeau pour savoir si on accepte la valeur ou toutes - * les autres valeurs. - * @return {@code true} if valid, {@code false} otherwise - */ - protected boolean validate_16(ActivitySeine activitySeine, - TripSeine maree, - Route route, - int nbActivitys, - boolean is16) { - if (nbActivitys == 0) { - // pas d'autre activity : ok - return true; - } - - if (is16) { - // on est sur une activity de fin de veille - List<ActivitySeine> activitySeines = Lists.newArrayList(route.getActivitySeine()); - // une seule activity de fin de veille par route - Integer[] detectActivity = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE); - if (activitySeine.getTopiaId() == null && detectActivity.length > 0) { - - log.info("il existe deja une activity de fin de veille!"); - return false; - } - - // chemit 2010-05-23 Cela n'est plus d'actualité : On peut avoir une activité après celle de fin de veille - - // l'activity de fin de veille doit toujours etre la plus recente -// Activity lastActivity = route.getLastActivity(); -// if (activity.getTime().before( -// lastActivity.getTime())) { -// // activity pas en derniere position -// log.info("l'activity de fin de veille doit etre la derniere " + -// "activity de la route"); -// -// return false; -// } - // il ne peut pas rester une activity de debut de peche sans fin - // de set (sauf si non coup de senne ?) - Integer[] detectDebutSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE); - int nbDebutReal = 0; - for (Integer i : detectDebutSet) { - ActivitySeine bActivitySeine = activitySeines.get(i); - if (bActivitySeine.getReasonForNoFishing() == null && - bActivitySeine.getSetSeine() != null) { - // une senne - nbDebutReal++; - } - } - if (nbDebutReal > detectFinSet.length) { - log.info("il manque une activity de fin de peche"); - return false; - } - - // tout est ok - return true; - } - - // chemit 2010-05-23 Cela n'est plus d'actualité : On peut avoir une activité après celle de fin de veille - - // on est sur une autre activity que celle de fin de veille, - // elle doit obligatoirement etre avant une eventuelle activity - // de fin de veille - -// List<Activity> activitys = route.getActivity(); -// Integer[] detectActivity = detectActivity(route, 16); -// if (detectActivity.length > 0) { -// Activity activityFinVeille = activites.get(detectActivity[0]); -// if (activity.getTime().after( -// activityFinVeille.getTime())) { -// log.info("activity doit etre avant la fin de veille : " + -// activityFinVeille.getTime()); -// // pas ok -// return false; -// } -// } - - // tout est ok - return true; - } - - /** - * Recupere les positions des activitys d'un certain type - * - * @param route la route à inspecter - * @param code le code du type d'activité à rechercher - * @return les positions des activitys d'un certain type donné - */ - protected Integer[] detectActivity(Route route, String code) { - List<Integer> list = new ArrayList<Integer>(); - int index = 0; - for (ActivitySeine a : route.getActivitySeine()) { - String c = a.getVesselActivitySeine().getCode(); - if (code.equals(c)) { - list.add(index); - } - index++; - } - return list.toArray(new Integer[list.size()]); - } -} diff --git a/observe-entities-validation/src/test/resources/validators.xml b/observe-entities-validation/src/test/resources/validators.xml index 1f8667a..c75ce35 100644 --- a/observe-entities-validation/src/test/resources/validators.xml +++ b/observe-entities-validation/src/test/resources/validators.xml @@ -53,7 +53,6 @@ <validator name="fieldexpressionwithparams" class="org.nuiton.validator.xwork2.field.FieldExpressionWithParamsValidator"/> <!-- les validateurs spécifiques à ObServe --> - <validator name="collectionFieldExpression2" class="fr.ird.observe.validation.validator.CollectionFieldExpressionValidator2"/> <validator name="collectionFieldExpression" class="fr.ird.observe.validation.validator.CollectionFieldExpressionValidator2"/> <validator name="collectionUniqueKey" class="fr.ird.observe.validation.validator.CollectionUniqueKeyValidator2"/> <validator name="observeCollectionUniqueKey" class="fr.ird.observe.validation.validator.ObserveCollectionUniqueKeyValidator"/> @@ -62,7 +61,6 @@ <!--<validator name="openableEntity" class="fr.ird.observe.business.validation.field.OpenableFieldValidator"/>--> <validator name="species_length" class="fr.ird.observe.validation.validator.entities.SpeciesLengthFieldValidator"/> <validator name="species_weight" class="fr.ird.observe.validation.validator.entities.SpeciesWeightFieldValidator"/> - <validator name="activitybateau" class="fr.ird.observe.validation.validator.entities.VesselActivityFieldValidator"/> <validator name="activitySpeed" class="fr.ird.observe.validation.validator.entities.ActivitySpeedValidator"/> <validator name="activitySimpleSpeed" class="fr.ird.observe.validation.validator.entities.ActivitySimpleSpeedValidator"/> <validator name="activityFinDeVeilleExists" class="fr.ird.observe.validation.validator.entities.ActivityFinDeVeilleExistsValidator"/> diff --git a/observe-services-topia/src/test/resources/validators.xml b/observe-services-topia/src/test/resources/validators.xml index 1f8667a..c75ce35 100644 --- a/observe-services-topia/src/test/resources/validators.xml +++ b/observe-services-topia/src/test/resources/validators.xml @@ -53,7 +53,6 @@ <validator name="fieldexpressionwithparams" class="org.nuiton.validator.xwork2.field.FieldExpressionWithParamsValidator"/> <!-- les validateurs spécifiques à ObServe --> - <validator name="collectionFieldExpression2" class="fr.ird.observe.validation.validator.CollectionFieldExpressionValidator2"/> <validator name="collectionFieldExpression" class="fr.ird.observe.validation.validator.CollectionFieldExpressionValidator2"/> <validator name="collectionUniqueKey" class="fr.ird.observe.validation.validator.CollectionUniqueKeyValidator2"/> <validator name="observeCollectionUniqueKey" class="fr.ird.observe.validation.validator.ObserveCollectionUniqueKeyValidator"/> @@ -62,7 +61,6 @@ <!--<validator name="openableEntity" class="fr.ird.observe.business.validation.field.OpenableFieldValidator"/>--> <validator name="species_length" class="fr.ird.observe.validation.validator.entities.SpeciesLengthFieldValidator"/> <validator name="species_weight" class="fr.ird.observe.validation.validator.entities.SpeciesWeightFieldValidator"/> - <validator name="activitybateau" class="fr.ird.observe.validation.validator.entities.VesselActivityFieldValidator"/> <validator name="activitySpeed" class="fr.ird.observe.validation.validator.entities.ActivitySpeedValidator"/> <validator name="activitySimpleSpeed" class="fr.ird.observe.validation.validator.entities.ActivitySimpleSpeedValidator"/> <validator name="activityFinDeVeilleExists" class="fr.ird.observe.validation.validator.entities.ActivityFinDeVeilleExistsValidator"/> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 754637f7245585d1be9bb1bafd0aa97b3e70e495 Merge: cb0cdf8 1f8ca0f Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Nov 10 10:36:31 2015 +0100 Merge branch 'feature/7706' into develop .../java/fr/ird/observe/ui/DecoratorService.java | 3 + .../ird/observe/validation/ValidationContext.java | 20 + .../dto/AbstractEspeceFieldDtoValidator.java | 34 +- .../dto/ActivityDebutDePecheSaneDtoValidator.java | 205 ---------- .../dto/ActivityFinDePecheSaneDtoValidator.java | 242 ----------- .../dto/ActivitySimpleSpeedDtoValidator.java | 10 +- .../validator/dto/ActivitySpeedDtoValidator.java | 7 +- .../dto/RouteActivitysFieldDtoValidator.java | 132 ------ .../dto/SetLonglineUniqueHomeIdDtoValidator.java | 50 +-- .../dto/SetLonglineUniqueNumberDtoValidator.java | 57 +-- .../dto/VesselActivityFieldDtoValidator.java | 451 --------------------- ...TargetCatchDto-n1-update-warning-validation.xml | 4 +- ...argetLengthDto-n1-update-warning-validation.xml | 4 +- ...choolEstimateDto-n1-update-error-validation.xml | 2 +- .../src/main/resources/validators.xml | 3 - .../v1/ReferentialServiceController.java | 6 + .../src/main/resources/validators.xml | 2 - .../ActivityDebutDePecheSaneValidator.java | 199 --------- .../entities/ActivityFinDePecheSaneValidator.java | 237 ----------- .../entities/RouteActivitysFieldValidator.java | 135 ------ .../entities/VesselActivityFieldValidator.java | 446 -------------------- .../src/test/resources/validators.xml | 2 - .../services/service/ReferentialService.java | 4 + .../xmi/observe-services-dto-longline.properties | 3 + .../main/xmi/observe-services-dto-longline.zargo | Bin 65285 -> 66568 bytes .../services/dto/ObserveDtosInitializer.java | 5 + .../services/service/ReferentialServiceTopia.java | 12 + .../service/longline/SetLonglineServiceTopia.java | 44 ++ .../src/test/resources/validators.xml | 2 - 29 files changed, 160 insertions(+), 2161 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm