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 73d72d003bc2ffa49b6c82d70b7b5e04b10d81b1 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Sep 3 00:14:07 2015 +0200 Debut d'intégration des validateurs d'entités (See #7493) --- .../ird/observe/entities/seine/ActivitySeines.java | 160 +++++++++++++++++++++ observe-services-topia/pom.xml | 5 + observe-validation/pom.xml | 4 +- .../field/ActivityDebutDePecheSaneValidator.java | 9 +- .../field/ActivityFinDePecheSaneValidator.java | 11 +- .../field/ActivityFinDeVeilleExistsValidator.java | 3 +- .../field/ActivitySimpleSpeedValidator.java | 25 ++-- .../validation/field/ActivitySpeedValidator.java | 28 ++-- .../validation/field/OpenableFieldValidator.java | 138 ------------------ .../field/RouteActivitysFieldValidator.java | 7 +- .../field/SetLonglineUniqueHomeIdValidator.java | 14 +- .../field/SetLonglineUniqueNumberValidator.java | 14 +- .../field/VesselActivityFieldValidator.java | 49 +++---- .../TripLongline-n1-update-warning-validation.xml | 6 +- .../seine/Route-n1-update-warning-validation.xml | 6 +- .../TripSeine-n1-update-warning-validation.xml | 6 +- .../src/main/resources/validators.xml | 2 +- .../validation/BeanValidatorDetectorTest.java | 4 +- .../field/ActivitySeineSpeedValidatorTest.java | 3 +- .../field/OpenableEntityFieldValidatorTest.java | 82 ----------- .../seine/TripSeine-testOpen-error-validation.xml | 32 ----- pom.xml | 2 +- 22 files changed, 266 insertions(+), 344 deletions(-) diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java index a48ced4..21435f8 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java @@ -22,14 +22,18 @@ package fr.ird.observe.entities.seine; * #L% */ +import com.google.common.collect.Lists; import fr.ird.observe.entities.constants.ReferenceLocale; import fr.ird.observe.entities.constants.seine.SchoolType; import fr.ird.observe.entities.referentiel.seine.ObservedSystem; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Date; +import java.util.Iterator; import java.util.List; /** @@ -65,6 +69,12 @@ public class ActivitySeines { } + public static ActivitySeine getPreviousActivity(Route route, ActivitySeine activitySeine) { + + List<ActivitySeine> activitySeines = Lists.newArrayList(route.getActivitySeine()); + return getPreviousActivity(activitySeines, activitySeine); + } + public static ActivitySeine getPreviousActivity(List<ActivitySeine> activitySeines, ActivitySeine activitySeine) { if (activitySeine == null) { @@ -141,4 +151,154 @@ public class ActivitySeines { } return type; } + + public static ActivitySeine getLastActivityDebutDePechePositiveBefore(Route route, Date actitiveDebut) { + + if (route.isActivitySeineEmpty()) { + + // pas d'actitive dans la route + return null; + } + + int position = getLastActivityBefore(route, actitiveDebut); + + if (position == -1) { + + // activity avant toute les autres ou non trouvee + return null; + } + + List<ActivitySeine> activitySeine = Lists.newArrayList(route.getActivitySeine()); + // on parcours en ordre inverse depuis la position jusqu'à trouver + // de debut de peche positive + ActivitySeine result = null; + for (int i = position; i > -1; i--) { + ActivitySeine a = activitySeine.get(i); + if (a.isActivityDebutDePechePositive()) { + + // on a trouve une activity de debut de peche positive + result = a; + break; + } + } + return result; + } + + public static ActivitySeine getNextActivityFinDePeche(Route route, ActivitySeine actitiveDebut) { + if (route.isActivitySeineEmpty()) { + + // pas d'actitive dans la route + return null; + } + List<ActivitySeine> activitySeine = Lists.newArrayList(route.getActivitySeine()); + + int position = activitySeine.indexOf(actitiveDebut); + if (position == -1) { + + // activity de debut non trouvee + return null; + } + + for (int i = position + 1, max = route.sizeActivitySeine(); i < max; i++) { + ActivitySeine a = activitySeine.get(i); + if (a.isActivityFinDePeche()) { + + // activity de fin de peche trouvee + return a; + } + } + return null; + } + + public static ActivitySeine getNextActivityDebutDePechePositive(Route route, ActivitySeine actitiveDebut) { + if (route.isActivitySeineEmpty()) { + + // pas d'actitive dans la route + return null; + } + List<ActivitySeine> activitySeine = Lists.newArrayList(route.getActivitySeine()); + int position = activitySeine.indexOf(actitiveDebut); + if (position == -1) { + + // activity de debut non trouvee + return null; + } + + for (int i = position + 1, max = route.sizeActivitySeine(); i < max; i++) { + ActivitySeine a = activitySeine.get(i); + if (a.isActivityDebutDePechePositive()) { + + // activity de fin de peche trouvee + return a; + } + } + return null; + } + + public static List<ActivitySeine> getActivityDebutDePechePositive(Route route) { + List<ActivitySeine> result = new ArrayList<ActivitySeine>(); + if (!route.isActivitySeineEmpty()) { + for (ActivitySeine a : route.getActivitySeine()) { + if (a.isActivityDebutDePechePositive()) { + + // activity de debut de peche positive + result.add(a); + } + } + } + return result; + } + + public static List<ActivitySeine> getActivityFinDePeche(Route route) { + List<ActivitySeine> result = new ArrayList<ActivitySeine>(); + if (!route.isActivitySeineEmpty()) { + for (ActivitySeine a : route.getActivitySeine()) { + if (a.isActivityFinDePeche()) { + + // activity de debut de peche positive + result.add(a); + } + } + } + return result; + } + + public static boolean isActivityFindDeVeilleFound(Route route) { + return getActivityFinDeVeille(route) != null; + } + + public static ActivitySeine getActivityFinDeVeille(Route route) { + if (route.isActivitySeineEmpty()) { + return null; + } + ActivitySeine result = null; + for (ActivitySeine a : route.getActivitySeine()) { + if (a.isActivityFinDeVeille()) { + + // il existe bien une activity de fin de veille + result = a; + break; + } + } + return result; + } + + protected static int getLastActivityBefore(Route route, Date currentTime) { + if (route.isActivitySeineEmpty()) { + + // pas d'actitive dans la route + return -1; + } + Iterator<ActivitySeine> itr = route.getActivitySeine().iterator(); + int i = -1; + while (itr.hasNext()) { + ActivitySeine a = itr.next(); + if (currentTime.before(a.getTime()) || + currentTime.equals(a.getTime())) { + break; + } + i++; + } + return i; + } } diff --git a/observe-services-topia/pom.xml b/observe-services-topia/pom.xml index 822c29a..bd6aed4 100644 --- a/observe-services-topia/pom.xml +++ b/observe-services-topia/pom.xml @@ -45,6 +45,11 @@ </dependency> <dependency> <groupId>${project.groupId}</groupId> + <artifactId>observe-validation</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> <artifactId>observe-test-data</artifactId> <version>${project.version}</version> <scope>test</scope> diff --git a/observe-validation/pom.xml b/observe-validation/pom.xml index 51e2c98..4a5b290 100644 --- a/observe-validation/pom.xml +++ b/observe-validation/pom.xml @@ -44,11 +44,11 @@ <artifactId>observe-entities</artifactId> <version>${project.version}</version> </dependency> - <dependency> + <!--dependency> <groupId>${project.groupId}</groupId> <artifactId>observe-business</artifactId> <version>${project.version}</version> - </dependency> + </dependency--> <dependency> <groupId>org.nuiton.topia</groupId> diff --git a/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityDebutDePecheSaneValidator.java b/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityDebutDePecheSaneValidator.java index baabafb..db12299 100644 --- a/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityDebutDePecheSaneValidator.java +++ b/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityDebutDePecheSaneValidator.java @@ -26,6 +26,7 @@ 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; @@ -75,7 +76,7 @@ public class ActivityDebutDePecheSaneValidator extends FieldValidatorSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ActivityDebutDePecheSaneValidator.class); - + private ValueStack stack; @Override @@ -152,7 +153,7 @@ public class ActivityDebutDePecheSaneValidator extends FieldValidatorSupport { // recuperation de l'activity de debut de peche juste avant la nouvelle // activity ActivitySeine openSet = - route.getLastActivityDebutDePechePositiveBefore(currentTime); + ActivitySeines.getLastActivityDebutDePechePositiveBefore(route, currentTime); if (openSet == null) { @@ -163,7 +164,7 @@ public class ActivityDebutDePecheSaneValidator extends FieldValidatorSupport { // on cherche la fin de pêche associée à l'actitivé retenue ActivitySeine closeSet = - route.getNextActivityFinDePeche(openSet); + ActivitySeines.getNextActivityFinDePeche(route, openSet); return closeSet != null && currentTime.after(closeSet.getTime()); @@ -173,7 +174,7 @@ public class ActivityDebutDePecheSaneValidator extends FieldValidatorSupport { // on recupere l'activity de fermeture de l'activite de peche ActivitySeine closeSet = - route.getNextActivityFinDePeche(activitySeine); + ActivitySeines.getNextActivityFinDePeche(route, activitySeine); if (closeSet == null) { // pas d'activity de fin, cela est possible ? diff --git a/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityFinDePecheSaneValidator.java b/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityFinDePecheSaneValidator.java index db0639e..93d77c6 100644 --- a/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityFinDePecheSaneValidator.java +++ b/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityFinDePecheSaneValidator.java @@ -26,6 +26,7 @@ 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; @@ -74,7 +75,7 @@ public class ActivityFinDePecheSaneValidator extends FieldValidatorSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ActivityFinDePecheSaneValidator.class); - + private ValueStack stack; @Override @@ -155,7 +156,7 @@ public class ActivityFinDePecheSaneValidator extends FieldValidatorSupport { // recuperation de l'activity de debut de peche juste avant la nouvelle // activity ActivitySeine openSet = - route.getLastActivityDebutDePechePositiveBefore(currentTime); + ActivitySeines.getLastActivityDebutDePechePositiveBefore(route, currentTime); if (openSet == null) { @@ -165,7 +166,7 @@ public class ActivityFinDePecheSaneValidator extends FieldValidatorSupport { } // on cherche la fin de pêche associée à l'actitivé retenue - ActivitySeine closeSet = route.getNextActivityFinDePeche(openSet); + ActivitySeine closeSet = ActivitySeines.getNextActivityFinDePeche(route, openSet); if (closeSet == null) { @@ -185,7 +186,7 @@ public class ActivityFinDePecheSaneValidator extends FieldValidatorSupport { // on recupere le debut de peche de cette activity de fin de peche ActivitySeine openSet = - route.getLastActivityDebutDePechePositiveBefore(currentTime); + ActivitySeines.getLastActivityDebutDePechePositiveBefore(route, currentTime); if (openSet == null) { @@ -201,7 +202,7 @@ public class ActivityFinDePecheSaneValidator extends FieldValidatorSupport { // on recupere la prochaine activity de peche openSet = - route.getNextActivityDebutDePechePositive(activitySeine); + ActivitySeines.getNextActivityDebutDePechePositive(route, activitySeine); if (openSet == null) { // pas de set apres cell-ci, donc pas de probleme diff --git a/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityFinDeVeilleExistsValidator.java b/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityFinDeVeilleExistsValidator.java index 2506b58..43b1ad2 100644 --- a/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityFinDeVeilleExistsValidator.java +++ b/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivityFinDeVeilleExistsValidator.java @@ -26,6 +26,7 @@ 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; @@ -164,7 +165,7 @@ public class ActivityFinDeVeilleExistsValidator extends FieldValidatorSupport { + "sur " + route.sizeActivitySeine() + " activity(s)."); } - boolean detected = route.isActivityFindDeVeilleFound(); + boolean detected = ActivitySeines.isActivityFindDeVeilleFound(route); boolean valid = required ? detected : !detected; if (log.isDebugEnabled()) { log.debug("detected activity fin de veille " + detected); diff --git a/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivitySimpleSpeedValidator.java b/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivitySimpleSpeedValidator.java index 64293ca..25136f5 100644 --- a/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivitySimpleSpeedValidator.java +++ b/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivitySimpleSpeedValidator.java @@ -25,9 +25,8 @@ package fr.ird.observe.validation.field; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.DecoratorService; -import fr.ird.observe.ObserveServiceHelper; import fr.ird.observe.entities.seine.ActivitySeine; +import fr.ird.observe.entities.seine.ActivitySeines; import fr.ird.observe.entities.seine.Route; import fr.ird.observe.gps.GPSPoint; import fr.ird.observe.gps.GpsPoints; @@ -102,15 +101,13 @@ public class ActivitySimpleSpeedValidator extends FieldValidatorSupport { return; } - DecoratorService decoratorService = ObserveServiceHelper.getDecoratorService(); - ActivitySeine activity = (ActivitySeine) object; if (activity.getTime() == null) { // heure d'observation non encore positionne, on ne peut pas valider if (log.isDebugEnabled()) { - log.debug("Missing time on current activity : " + decoratorService.decorate(activity) + ", skip speed computation"); + log.debug("Missing time on current activity : " + decorate(activity) + ", skip speed computation"); } return; } @@ -121,20 +118,20 @@ public class ActivitySimpleSpeedValidator extends FieldValidatorSupport { // pas de position, on ne peut pas valider if (log.isDebugEnabled()) { - log.debug("Missing latitude or longitude on current activity : " + decoratorService.decorate(activity) + ", skip speed computation"); + log.debug("Missing latitude or longitude on current activity : " + decorate(activity) + ", skip speed computation"); } return; } Route route = (Route) stack.findValue("currentRoute"); - ActivitySeine previousActivity = route.getPreviousActivity(activity); + ActivitySeine previousActivity = ActivitySeines.getPreviousActivity(route, activity); if (previousActivity == null) { // pas d'activity avant, rien à valider if (log.isDebugEnabled()) { - log.debug("No previous activity for current activity : " + decoratorService.decorate(activity) + ", skip speed computation"); + log.debug("No previous activity for current activity : " + decorate(activity) + ", skip speed computation"); } return; } @@ -144,7 +141,7 @@ public class ActivitySimpleSpeedValidator extends FieldValidatorSupport { // pas de position, on ne peut pas valider if (log.isDebugEnabled()) { - log.debug("Missing latitude or longitude on previous activity : " + decoratorService.decorate(previousActivity) + ", skip speed computation"); + log.debug("Missing latitude or longitude on previous activity : " + decorate(previousActivity) + ", skip speed computation"); } return; } @@ -155,7 +152,7 @@ public class ActivitySimpleSpeedValidator extends FieldValidatorSupport { float computedSpeed = GpsPoints.getSpeed(previousPoint, currentPoint); if (log.isDebugEnabled()) { - log.debug("Speed computed between previous activity point " + decoratorService.decorate(previousPoint) + " to current activity point " + decoratorService.decorate(currentPoint) + ", speed is : " + computedSpeed); + log.debug("Speed computed between previous activity point " + decorate(previousPoint) + " to current activity point " + decorate(currentPoint) + ", speed is : " + computedSpeed); } boolean b = computedSpeed <= speed; @@ -173,4 +170,12 @@ public class ActivitySimpleSpeedValidator extends FieldValidatorSupport { return "activitySimpleSpeed"; } + protected String decorate(ActivitySeine activitySeine) { + return activitySeine.toString(); + } + + protected String decorate(GPSPoint currentPoint) { + return currentPoint.toString(); + } + } diff --git a/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivitySpeedValidator.java b/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivitySpeedValidator.java index b58ffee..3df46cb 100644 --- a/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivitySpeedValidator.java +++ b/observe-validation/src/main/java/fr/ird/observe/validation/field/ActivitySpeedValidator.java @@ -25,8 +25,6 @@ package fr.ird.observe.validation.field; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.DecoratorService; -import fr.ird.observe.ObserveServiceHelper; import fr.ird.observe.entities.seine.ActivitySeine; import fr.ird.observe.entities.seine.Route; import fr.ird.observe.gps.GPSPoint; @@ -98,7 +96,15 @@ public class ActivitySpeedValidator extends FieldValidatorSupport { return invalidActivity; } - public CollectionFieldExpressionValidator getDelegate(final DecoratorService decoratorService, final Route route) { + protected String decorate(ActivitySeine activitySeine) { + return activitySeine.toString(); + } + + protected String decorate(GPSPoint currentPoint) { + return currentPoint.toString(); + } + + public CollectionFieldExpressionValidator getDelegate(final Route route) { if (delegate == null) { delegate = new CollectionFieldExpressionValidator() { @@ -112,7 +118,7 @@ public class ActivitySpeedValidator extends FieldValidatorSupport { if (previousActivity == null) { if (LOG.isDebugEnabled()) { - LOG.debug("No previous activity for current activity : " + decoratorService.decorate(currentActivity) + ", skip speed computation"); + LOG.debug("No previous activity for current activity : " + decorate(currentActivity) + ", skip speed computation"); } return true; } @@ -121,7 +127,7 @@ public class ActivitySpeedValidator extends FieldValidatorSupport { // cas limite (pas de précédent ou position non renseigne) if (LOG.isDebugEnabled()) { - LOG.debug("Missing latitude or longitude on previous activity : " + decoratorService.decorate(previousActivity) + ", skip speed computation"); + LOG.debug("Missing latitude or longitude on previous activity : " + decorate(previousActivity) + ", skip speed computation"); } return true; @@ -130,7 +136,7 @@ public class ActivitySpeedValidator extends FieldValidatorSupport { if (currentActivity.getLongitude() == null || currentActivity.getLatitude() == null) { // cas limite (pas de précédent ou position non renseigne) if (LOG.isDebugEnabled()) { - LOG.debug("Missing latitude or longitude on current activity : " + decoratorService.decorate(currentActivity) + ", skip speed computation"); + LOG.debug("Missing latitude or longitude on current activity : " + decorate(currentActivity) + ", skip speed computation"); } return true; } @@ -141,7 +147,7 @@ public class ActivitySpeedValidator extends FieldValidatorSupport { float computedSpeed = GpsPoints.getSpeed(previousPoint, currentPoint); if (LOG.isDebugEnabled()) { - LOG.debug("Speed computed between previous activity point " + decoratorService.decorate(previousPoint) + " to current activity point " + decoratorService.decorate(currentPoint) + ", speed is : " + computedSpeed); + LOG.debug("Speed computed between previous activity point " + decorate(previousPoint) + " to current activity point " + decorate(currentPoint) + ", speed is : " + computedSpeed); } boolean valid = computedSpeed <= speed; @@ -149,11 +155,11 @@ public class ActivitySpeedValidator extends FieldValidatorSupport { if (!valid) { stack.set("foundSpeed", computedSpeed); - invalidActivity = decoratorService.decorate(currentActivity); + invalidActivity = decorate(currentActivity); if (LOG.isInfoEnabled()) { LOG.info("Speed from " + - decoratorService.decorate(previousActivity) + + decorate(previousActivity) + " to " + invalidActivity + " is " + computedSpeed + " which is more thant authorized one " + @@ -204,9 +210,7 @@ public class ActivitySpeedValidator extends FieldValidatorSupport { invalidActivity = null; - DecoratorService decoratorService = ObserveServiceHelper.getDecoratorService(); - - getDelegate(decoratorService, (Route) object).validate(object); + getDelegate((Route) object).validate(object); } @Override diff --git a/observe-validation/src/main/java/fr/ird/observe/validation/field/OpenableFieldValidator.java b/observe-validation/src/main/java/fr/ird/observe/validation/field/OpenableFieldValidator.java deleted file mode 100644 index c0b8651..0000000 --- a/observe-validation/src/main/java/fr/ird/observe/validation/field/OpenableFieldValidator.java +++ /dev/null @@ -1,138 +0,0 @@ -package fr.ird.observe.validation.field; - -/* - * #%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.DecoratorService; -import fr.ird.observe.ObserveServiceHelper; -import fr.ird.observe.entities.OpenableEntity; -import org.nuiton.decorator.Decorator; - -import java.util.Collection; - -/** - * <!-- START SNIPPET: javadoc --> OpenableFieldValidator verifie qu'une - * propriété de type {@link OpenableEntity} ou qu'une collection de ce type 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 OpenableFieldValidator 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; - - OpenableEntity openValue = null; - - 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) { - openValue = (OpenableEntity) o; - result = !openValue.isOpen(); - - if (!result) { - // on objet ouvert a été trouvé - // on peut arréter le parcours - break; - } - } - } else if (value instanceof OpenableEntity) { - openValue = (OpenableEntity) value; - result = !openValue.isOpen(); - } 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 = ObserveServiceHelper.getDecoratorService(); - - Decorator<?> decorator = provider.getDecorator(openValue); - - if (log.isDebugEnabled()) { - log.debug("decorator to use : " + decorator); - } - if (decorator != null) { - openValueAsString = decorator.toString(openValue); - log.debug("decorator message " + openValueAsString); - } - try { - // on a decouvert au moins un objet non fermé - addFieldError(fieldName, openValue); - } finally { - openValueAsString = null; - } - } - } - - @Override - public String getValidatorType() { - return "openable"; - } -} diff --git a/observe-validation/src/main/java/fr/ird/observe/validation/field/RouteActivitysFieldValidator.java b/observe-validation/src/main/java/fr/ird/observe/validation/field/RouteActivitysFieldValidator.java index a6aa64b..7a78f02 100644 --- a/observe-validation/src/main/java/fr/ird/observe/validation/field/RouteActivitysFieldValidator.java +++ b/observe-validation/src/main/java/fr/ird/observe/validation/field/RouteActivitysFieldValidator.java @@ -26,6 +26,7 @@ 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; @@ -74,7 +75,7 @@ public class RouteActivitysFieldValidator extends FieldValidatorSupport { /** Logger. */ private static final Log log = LogFactory.getLog(RouteActivitysFieldValidator.class); - + private ValueStack stack; @Override @@ -117,9 +118,9 @@ public class RouteActivitysFieldValidator extends FieldValidatorSupport { } // récupération des activités de pêche positive sur la route - List<ActivitySeine> positiveSet = route.getActivityDebutDePechePositive(); + List<ActivitySeine> positiveSet = ActivitySeines.getActivityDebutDePechePositive(route); - List<ActivitySeine> closedSet = route.getActivityFinDePeche(); + List<ActivitySeine> closedSet = ActivitySeines.getActivityFinDePeche(route); if (positiveSet.size() < closedSet.size()) { diff --git a/observe-validation/src/main/java/fr/ird/observe/validation/field/SetLonglineUniqueHomeIdValidator.java b/observe-validation/src/main/java/fr/ird/observe/validation/field/SetLonglineUniqueHomeIdValidator.java index a6dd774..18b4244 100644 --- a/observe-validation/src/main/java/fr/ird/observe/validation/field/SetLonglineUniqueHomeIdValidator.java +++ b/observe-validation/src/main/java/fr/ird/observe/validation/field/SetLonglineUniqueHomeIdValidator.java @@ -26,14 +26,11 @@ import com.google.common.base.Objects; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.DecoratorService; -import fr.ird.observe.ObserveServiceHelper; import fr.ird.observe.entities.longline.ActivityLongline; import fr.ird.observe.entities.longline.SetLongline; import fr.ird.observe.entities.longline.TripLongline; -import org.nuiton.decorator.Decorator; -import java.util.List; +import java.util.Set; /** * Created on 12/7/14. @@ -61,7 +58,7 @@ public class SetLonglineUniqueHomeIdValidator extends FieldValidatorSupport { TripLongline tripLongline = (TripLongline) stack.findValue("currentTrip"); - List<ActivityLongline> activityLonglines = tripLongline.getActivityLongline(); + Set<ActivityLongline> activityLonglines = tripLongline.getActivityLongline(); boolean notValid = false; @@ -76,10 +73,11 @@ public class SetLonglineUniqueHomeIdValidator extends FieldValidatorSupport { notValid = true; - DecoratorService provider = ObserveServiceHelper.getDecoratorService(); - Decorator<?> decorator = provider.getDecorator(activityLongline); + //FIXME +// DecoratorService provider = ObserveServiceHelper.getDecoratorService(); +// Decorator<?> decorator = provider.getDecorator(activityLongline); - stack.set("duplicatedActivity", decorator.toString(activityLongline)); + stack.set("duplicatedActivity", activityLongline); break; diff --git a/observe-validation/src/main/java/fr/ird/observe/validation/field/SetLonglineUniqueNumberValidator.java b/observe-validation/src/main/java/fr/ird/observe/validation/field/SetLonglineUniqueNumberValidator.java index 0e87383..90005bd 100644 --- a/observe-validation/src/main/java/fr/ird/observe/validation/field/SetLonglineUniqueNumberValidator.java +++ b/observe-validation/src/main/java/fr/ird/observe/validation/field/SetLonglineUniqueNumberValidator.java @@ -26,14 +26,11 @@ import com.google.common.base.Objects; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.DecoratorService; -import fr.ird.observe.ObserveServiceHelper; import fr.ird.observe.entities.longline.ActivityLongline; import fr.ird.observe.entities.longline.SetLongline; import fr.ird.observe.entities.longline.TripLongline; -import org.nuiton.decorator.Decorator; -import java.util.List; +import java.util.Set; /** * Created on 12/7/14. @@ -61,7 +58,7 @@ public class SetLonglineUniqueNumberValidator extends FieldValidatorSupport { TripLongline tripLongline = (TripLongline) stack.findValue("currentTrip"); - List<ActivityLongline> activityLonglines = tripLongline.getActivityLongline(); + Set<ActivityLongline> activityLonglines = tripLongline.getActivityLongline(); boolean notValid = false; @@ -76,10 +73,11 @@ public class SetLonglineUniqueNumberValidator extends FieldValidatorSupport { notValid = true; - DecoratorService provider = ObserveServiceHelper.getDecoratorService(); - Decorator<?> decorator = provider.getDecorator(activityLongline); + //FIXME +// DecoratorService provider = ObserveServiceHelper.getDecoratorService(); +// Decorator<?> decorator = provider.getDecorator(activityLongline); - stack.set("duplicatedActivity", decorator.toString(activityLongline)); + stack.set("duplicatedActivity", activityLongline); break; diff --git a/observe-validation/src/main/java/fr/ird/observe/validation/field/VesselActivityFieldValidator.java b/observe-validation/src/main/java/fr/ird/observe/validation/field/VesselActivityFieldValidator.java index 83872ba..1aa0c90 100644 --- a/observe-validation/src/main/java/fr/ird/observe/validation/field/VesselActivityFieldValidator.java +++ b/observe-validation/src/main/java/fr/ird/observe/validation/field/VesselActivityFieldValidator.java @@ -22,14 +22,15 @@ package fr.ird.observe.validation.field; * #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.TripSeine; import fr.ird.observe.entities.seine.Route; -import fr.ird.observe.entities.referentiel.seine.VesselActivitySeine; +import fr.ird.observe.entities.seine.TripSeine; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -75,7 +76,7 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { /** Logger. */ private static final Log log = LogFactory.getLog(VesselActivityFieldValidator.class); - + private ValueStack stack; private String code; @@ -113,7 +114,7 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { VesselActivitySeine property; property = (VesselActivitySeine) getFieldValue(ActivitySeine.PROPERTY_VESSEL_ACTIVITY_SEINE, - object); + object); if (property == null) { // si pas de valeur, on ne fait rien if (log.isDebugEnabled()) { @@ -202,11 +203,11 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { * - 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) + * @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, @@ -222,7 +223,7 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { //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 = route.getActivitySeine(); + 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; @@ -257,11 +258,11 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { * - 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) + * @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, @@ -272,7 +273,7 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { // aucune activity : donc pas possible return false; } - List<ActivitySeine> activitySeines = route.getActivitySeine(); + 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; @@ -336,13 +337,13 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { * - 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. + * @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, @@ -357,7 +358,7 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { if (is16) { // on est sur une activity de fin de veille - List<ActivitySeine> activitySeines = route.getActivitySeine(); + 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) { diff --git a/observe-validation/src/main/resources/fr/ird/observe/entities/longline/TripLongline-n1-update-warning-validation.xml b/observe-validation/src/main/resources/fr/ird/observe/entities/longline/TripLongline-n1-update-warning-validation.xml index 3a3dd33..da5561f 100644 --- a/observe-validation/src/main/resources/fr/ird/observe/entities/longline/TripLongline-n1-update-warning-validation.xml +++ b/observe-validation/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-validation/src/main/resources/fr/ird/observe/entities/seine/Route-n1-update-warning-validation.xml b/observe-validation/src/main/resources/fr/ird/observe/entities/seine/Route-n1-update-warning-validation.xml index 0e9ca15..e982526 100644 --- a/observe-validation/src/main/resources/fr/ird/observe/entities/seine/Route-n1-update-warning-validation.xml +++ b/observe-validation/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="openableEntity">--> + <!--<message>validator.route.unclosed.activity##${openValueAsString}</message>--> + <!--</field-validator>--> <!-- activity de fin de pêche requise --> <!--field-validator type="routeActivitys"> diff --git a/observe-validation/src/main/resources/fr/ird/observe/entities/seine/TripSeine-n1-update-warning-validation.xml b/observe-validation/src/main/resources/fr/ird/observe/entities/seine/TripSeine-n1-update-warning-validation.xml index 5162dae..816bcad 100644 --- a/observe-validation/src/main/resources/fr/ird/observe/entities/seine/TripSeine-n1-update-warning-validation.xml +++ b/observe-validation/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"> diff --git a/observe-validation/src/main/resources/validators.xml b/observe-validation/src/main/resources/validators.xml index 1d9252b..5d5d68d 100644 --- a/observe-validation/src/main/resources/validators.xml +++ b/observe-validation/src/main/resources/validators.xml @@ -53,7 +53,7 @@ <validator name="fieldexpressionwithparams" class="org.nuiton.validator.xwork2.field.FieldExpressionWithParamsValidator"/> <!-- les validateurs spécifiques à ObServe --> - <validator name="openableEntity" class="fr.ird.observe.validation.field.OpenableFieldValidator"/> + <!--<validator name="openableEntity" class="fr.ird.observe.validation.field.OpenableFieldValidator"/>--> <validator name="species_length" class="fr.ird.observe.validation.field.SpeciesLengthFieldValidator"/> <validator name="species_weight" class="fr.ird.observe.validation.field.SpeciesWeightFieldValidator"/> <validator name="activitybateau" class="fr.ird.observe.validation.field.VesselActivityFieldValidator"/> diff --git a/observe-validation/src/test/java/fr/ird/observe/validation/BeanValidatorDetectorTest.java b/observe-validation/src/test/java/fr/ird/observe/validation/BeanValidatorDetectorTest.java index cc0cee7..d925ae2 100644 --- a/observe-validation/src/test/java/fr/ird/observe/validation/BeanValidatorDetectorTest.java +++ b/observe-validation/src/test/java/fr/ird/observe/validation/BeanValidatorDetectorTest.java @@ -21,7 +21,7 @@ */ package fr.ird.observe.validation; -import fr.ird.observe.ObserveDAOHelper; +import fr.ird.observe.ObserveEntityEnum; import fr.ird.observe.entities.longline.ActivityLongline; import fr.ird.observe.entities.longline.BaitsComposition; import fr.ird.observe.entities.longline.Basket; @@ -142,7 +142,7 @@ public class BeanValidatorDetectorTest extends AbstractValidatorDetectorTest { @BeforeClass public static void setUpClass() throws Exception { - ALL_TYPES = ObserveDAOHelper.getContractClasses(); + ALL_TYPES = ObserveEntityEnum.getContractClasses(); } @Override diff --git a/observe-validation/src/test/java/fr/ird/observe/validation/field/ActivitySeineSpeedValidatorTest.java b/observe-validation/src/test/java/fr/ird/observe/validation/field/ActivitySeineSpeedValidatorTest.java index 65c2e14..a82304a 100644 --- a/observe-validation/src/test/java/fr/ird/observe/validation/field/ActivitySeineSpeedValidatorTest.java +++ b/observe-validation/src/test/java/fr/ird/observe/validation/field/ActivitySeineSpeedValidatorTest.java @@ -28,7 +28,6 @@ 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.RouteImpl; -import fr.ird.observe.test.TestHelper; import org.apache.commons.lang3.time.DateUtils; import org.junit.After; import org.junit.AfterClass; @@ -62,7 +61,7 @@ public class ActivitySeineSpeedValidatorTest { Locale.setDefault(Locale.FRENCH); - TestHelper.createApplicationContext(); +// TestHelper.createApplicationContext(); vesselActivitySeine = new VesselActivitySeineImpl(); diff --git a/observe-validation/src/test/java/fr/ird/observe/validation/field/OpenableEntityFieldValidatorTest.java b/observe-validation/src/test/java/fr/ird/observe/validation/field/OpenableEntityFieldValidatorTest.java deleted file mode 100644 index 8b5d691..0000000 --- a/observe-validation/src/test/java/fr/ird/observe/validation/field/OpenableEntityFieldValidatorTest.java +++ /dev/null @@ -1,82 +0,0 @@ -package fr.ird.observe.validation.field; - -/* - * #%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 fr.ird.observe.entities.seine.TripSeine; -import fr.ird.observe.entities.seine.TripSeineImpl; -import fr.ird.observe.entities.seine.Route; -import fr.ird.observe.entities.seine.RouteImpl; -import fr.ird.observe.test.TestHelper; -import org.junit.After; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.nuiton.validator.NuitonValidator; -import org.nuiton.validator.NuitonValidatorFactory; -import org.nuiton.validator.NuitonValidatorResult; - -import java.util.Date; - -/** @author Tony Chemit - chemit@codelutin.com */ -public class OpenableEntityFieldValidatorTest { - - NuitonValidatorResult messages; - - @BeforeClass - public static void beforeTest() { - TestHelper.createApplicationContext(); - } - - @After - public void tearDonw() { - if (messages != null) { - messages = null; - } - } - - @Test - public void testValidate() { - - NuitonValidator<TripSeine> validator = - NuitonValidatorFactory.newValidator(TripSeine.class, "testOpen"); - - TripSeine m = new TripSeineImpl(); - - m.setStartDate(new Date()); - - messages = validator.validate(m); - Assert.assertTrue(messages.isValid()); - - Route r = new RouteImpl(); - r.setDate(new Date()); - r.setOpen(false); - m.addRoute(r); - - messages = validator.validate(m); - Assert.assertTrue(messages.isValid()); - - r.setOpen(true); - messages = validator.validate(m); - Assert.assertFalse(messages.isValid()); - } -} diff --git a/observe-validation/src/test/resources/fr/ird/observe/entities/seine/TripSeine-testOpen-error-validation.xml b/observe-validation/src/test/resources/fr/ird/observe/entities/seine/TripSeine-testOpen-error-validation.xml deleted file mode 100644 index f5b386c..0000000 --- a/observe-validation/src/test/resources/fr/ird/observe/entities/seine/TripSeine-testOpen-error-validation.xml +++ /dev/null @@ -1,32 +0,0 @@ -<!-- - #%L - ObServe :: Validation - %% - Copyright (C) 2008 - 2010 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% - --> -<!DOCTYPE validators PUBLIC - "-//Apache Struts//XWork Validator 1.0.3//EN" - "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> -<validators> - - <field name="route"> - <field-validator type="openableEntity"> - <message>validator.trip.contains.open.route##${openValueAsString}</message> - </field-validator> - </field> -</validators> diff --git a/pom.xml b/pom.xml index f154559..a85426f 100644 --- a/pom.xml +++ b/pom.xml @@ -87,7 +87,7 @@ <module>observe-test-data</module> <module>observe-entities</module> <!--<module>observe-business</module>--> - <!--<module>observe-validation</module>--> + <module>observe-validation</module> <module>observe-services-configuration-topia</module> <module>observe-services-topia</module> <module>observe-services-configuration-rest</module> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.