This is an automated email from the git hooks/post-receive script. New commit to branch feature/7595_avertissement_activites_non_cloturees in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 7e14a4aef999b0d32f60c535b8d673237d14b4f1 Author: Samuel Maisonneuve <maisonneuve@codelutin.com> Date: Tue Jul 26 12:15:12 2016 +0200 Fix openable validation on openable entities refs #7595 --- .../validator/dto/OpenableDtoFieldValidator.java | 142 +++++++++++++++++++++ ...ripLonglineDto-n1-update-warning-validation.xml | 12 +- .../RouteDto-n1-update-warning-validation.xml | 6 +- .../TripSeineDto-n1-update-warning-validation.xml | 6 +- .../src/main/resources/validators.xml | 2 +- .../TripLongline-n1-update-warning-validation.xml | 6 +- .../seine/Route-n1-update-warning-validation.xml | 6 +- .../TripSeine-n1-update-warning-validation.xml | 6 +- 8 files changed, 164 insertions(+), 22 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/OpenableDtoFieldValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/OpenableDtoFieldValidator.java new file mode 100644 index 0000000..79745f5 --- /dev/null +++ b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/OpenableDtoFieldValidator.java @@ -0,0 +1,142 @@ +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.validator.ValidationException; +import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; +import fr.ird.observe.ObserveOpenDataManager; +import fr.ird.observe.ObserveSwingApplicationContext; +import fr.ird.observe.services.dto.DataDto; +import fr.ird.observe.services.dto.OpenableDto; +import fr.ird.observe.ui.DecoratorService; +import org.nuiton.decorator.Decorator; + +import java.util.Collection; + +/** + * <!-- START SNIPPET: javadoc --> OpenableFieldValidator verifie qu'un + * objet ou qu'une collection d'objet cloturable est bien + * 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/> + * <p/> + * <pre> + * <!-- START SNIPPET: examples --> + * <validators> + * <!-- Plain-Validator Syntax --> + * <validator type="openable"> + * <param name="fieldName">route</param> + * <message>existing unclosed routes</message> + * </validator> + * <p/> + * <!-- Field-Validator Syntax --> + * <field name="route"> + * <field-validator type="openable"> + * <message>existing unclosed routes</message> + * </field-validator> + * </field> + * </validators> + * <!-- END SNIPPET: examples --> + * </pre> + * + * @author Tony Chemit - chemit@codelutin.com + * @since 1.0 + */ +public class OpenableDtoFieldValidator extends FieldValidatorSupport { + + String openValueAsString; + + public String getOpenValueAsString() { + return openValueAsString; + } + + @Override + public void validate(Object object) throws ValidationException { + String fieldName = getFieldName(); + + Object value = getFieldValue(fieldName, object); + + boolean result = true; + + DataDto dataValue = null; + + ObserveOpenDataManager openDataManager = ObserveSwingApplicationContext.get().getOpenDataManager(); + + if (value != null) { + if (value instanceof Collection<?>) { + // on est sur une collection, + // on regarde si l'un des objets est ouvert + for (Object o : (Collection<?>) value) { + dataValue = (DataDto) o; + result = !openDataManager.isOpen(dataValue.getId()); + + if (!result) { + // on objet ouvert a été trouvé + // on peut arréter le parcours + break; + } + } + } else if (value instanceof OpenableDto) { + dataValue = (DataDto) value; + result = openDataManager.isOpen(dataValue.getId()); + } else { + // pas un type connu pour ce validateur + throw new ValidationException( + "le type " + value.getClass().getName() + + " n'est pas pris en charge pas ce validateur"); + } + } + + + if (!result) { + DecoratorService provider = ObserveSwingApplicationContext.get().getDecoratorService(); + + Decorator<?> decorator = provider.getDecorator(dataValue); + + if (log.isDebugEnabled()) { + log.debug("decorator to use : " + decorator); + } + if (decorator != null) { + openValueAsString = decorator.toString(dataValue); + log.debug("decorator message " + openValueAsString); + } + try { + // on a decouvert au moins un objet non fermé + addFieldError(fieldName, dataValue); + } finally { + openValueAsString = null; + } + } + } + + @Override + public String getValidatorType() { + return "openable"; + } +} diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/TripLonglineDto-n1-update-warning-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/TripLonglineDto-n1-update-warning-validation.xml index c5bbc74..0f8c7da 100644 --- a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/TripLonglineDto-n1-update-warning-validation.xml +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/TripLonglineDto-n1-update-warning-validation.xml @@ -44,14 +44,14 @@ </field> - <!--<field name="activityLongline">--> + <field name="activityLongline"> - <!-- une route est ouverte (interdit la cloture de la maree) --> - <!--<field-validator type="openableEntity">--> - <!--<message>validator.tripLongline.unclosed.activity##${openValueAsString}</message>--> - <!--</field-validator>--> + <!-- une activité est ouverte (interdit la cloture de la maree) --> + <field-validator type="openableDto"> + <message>validator.tripLongline.unclosed.activity##${openValueAsString}</message> + </field-validator> - <!--</field>--> + </field> <field name="captain"> diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/RouteDto-n1-update-warning-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/RouteDto-n1-update-warning-validation.xml index d230be8..d567775 100644 --- a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/RouteDto-n1-update-warning-validation.xml +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/RouteDto-n1-update-warning-validation.xml @@ -90,9 +90,9 @@ <field name="activitySeine"> <!-- activity non fermee --> - <!--<field-validator type="openableEntity">--> - <!--<message>validator.route.unclosed.activity##${openValueAsString}</message>--> - <!--</field-validator>--> + <field-validator type="openableDto"> + <message>validator.route.unclosed.activity##${openValueAsString}</message> + </field-validator> <!-- activity de fin de pêche requise --> <!--field-validator type="routeActivitys"> diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/TripSeineDto-n1-update-warning-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/TripSeineDto-n1-update-warning-validation.xml index a4ecd4b..a3c3ba2 100644 --- a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/TripSeineDto-n1-update-warning-validation.xml +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/TripSeineDto-n1-update-warning-validation.xml @@ -56,9 +56,9 @@ <field name="route"> <!-- une route est ouverte (interdit la cloture de la maree) --> - <!--<field-validator type="openableEntity">--> - <!--<message>validator.tripSeine.unclosed.route##${openValueAsString}</message>--> - <!--</field-validator>--> + <field-validator type="openableDto"> + <message>validator.tripSeine.unclosed.route##${openValueAsString}</message> + </field-validator> <!-- coherence loch des routes --> <field-validator type="collectionFieldExpression"> diff --git a/observe-application-swing/src/main/resources/validators.xml b/observe-application-swing/src/main/resources/validators.xml index 5856328..395d22e 100644 --- a/observe-application-swing/src/main/resources/validators.xml +++ b/observe-application-swing/src/main/resources/validators.xml @@ -68,7 +68,7 @@ <validator name="setLonglineUniqueNumber" class="fr.ird.observe.validation.validator.entities.SetLonglineUniqueNumberValidator"/> <!-- Les validateurs spécifique aux Dto dans observe --> - <!--<validator name="openableEntity" class="fr.ird.observe.business.validation.field.OpenableFieldValidator"/>--> + <validator name="openableDto" class="fr.ird.observe.validation.validator.dto.OpenableDtoFieldValidator"/> <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="activitySpeedDto" class="fr.ird.observe.validation.validator.dto.ActivitySpeedDtoValidator"/> diff --git a/observe-entities/src/main/resources/fr/ird/observe/entities/longline/TripLongline-n1-update-warning-validation.xml b/observe-entities/src/main/resources/fr/ird/observe/entities/longline/TripLongline-n1-update-warning-validation.xml index c5bbc74..4a39387 100644 --- a/observe-entities/src/main/resources/fr/ird/observe/entities/longline/TripLongline-n1-update-warning-validation.xml +++ b/observe-entities/src/main/resources/fr/ird/observe/entities/longline/TripLongline-n1-update-warning-validation.xml @@ -47,9 +47,9 @@ <!--<field name="activityLongline">--> <!-- une route est ouverte (interdit la cloture de la maree) --> - <!--<field-validator type="openableEntity">--> - <!--<message>validator.tripLongline.unclosed.activity##${openValueAsString}</message>--> - <!--</field-validator>--> + <field-validator type="openableEntity"> + <message>validator.tripLongline.unclosed.activity##${openValueAsString}</message> + </field-validator> <!--</field>--> diff --git a/observe-entities/src/main/resources/fr/ird/observe/entities/seine/Route-n1-update-warning-validation.xml b/observe-entities/src/main/resources/fr/ird/observe/entities/seine/Route-n1-update-warning-validation.xml index 0252268..13f67e3 100644 --- a/observe-entities/src/main/resources/fr/ird/observe/entities/seine/Route-n1-update-warning-validation.xml +++ b/observe-entities/src/main/resources/fr/ird/observe/entities/seine/Route-n1-update-warning-validation.xml @@ -90,9 +90,9 @@ <field name="activitySeine"> <!-- activity non fermee --> - <!--<field-validator type="openableEntity">--> - <!--<message>validator.route.unclosed.activity##${openValueAsString}</message>--> - <!--</field-validator>--> + <field-validator type="openableDto"> + <message>validator.route.unclosed.activity##${openValueAsString}</message> + </field-validator> <!-- activity de fin de pêche requise --> <!--field-validator type="routeActivitys"> diff --git a/observe-entities/src/main/resources/fr/ird/observe/entities/seine/TripSeine-n1-update-warning-validation.xml b/observe-entities/src/main/resources/fr/ird/observe/entities/seine/TripSeine-n1-update-warning-validation.xml index 816bcad..5162dae 100644 --- a/observe-entities/src/main/resources/fr/ird/observe/entities/seine/TripSeine-n1-update-warning-validation.xml +++ b/observe-entities/src/main/resources/fr/ird/observe/entities/seine/TripSeine-n1-update-warning-validation.xml @@ -56,9 +56,9 @@ <field name="route"> <!-- une route est ouverte (interdit la cloture de la maree) --> - <!--<field-validator type="openableEntity">--> - <!--<message>validator.tripSeine.unclosed.route##${openValueAsString}</message>--> - <!--</field-validator>--> + <field-validator type="openableEntity"> + <message>validator.tripSeine.unclosed.route##${openValueAsString}</message> + </field-validator> <!-- coherence loch des routes --> <field-validator type="collectionFieldExpression"> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.