branch feature/7493 updated (e1bf9df -> 8c3e049)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7493 in repository observe. See http://git.codelutin.com/observe.git from e1bf9df Fix validation test (See #7493) new 2002972 recupération des différents types de dto new 8c3e049 Renommage de certains objets Simplificiation du détecteur de messages (on n'utilise plus les références sur entités) See #7493 The 2 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 8c3e04987014f35fedf483ecd5888d89ac6307ce Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Sep 3 14:12:55 2015 +0200 Renommage de certains objets Simplificiation du détecteur de messages (on n'utilise plus les références sur entités) See #7493 commit 20029729d2ed6d41227b1405cab7eb6775d9b6a5 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Sep 3 11:13:14 2015 +0200 recupération des différents types de dto Summary of changes: .../actions/validate/ValidateDataRequest.java | 12 - .../actions/validate/ValidateDataResult.java | 10 +- .../validate/ValidateReferentialsRequest.java | 13 - .../validate/ValidateReferentialsResult.java | 10 +- .../service/actions/validate/ValidateService.java | 25 + .../actions/validate/ValidationService.java | 14 - .../ird/observe/services/ObserveServiceTopia.java | 33 + .../service/actions/validate/ObserveValidator.java | 22 +- ...ServiceTopia.java => ValidateServiceTopia.java} | 29 +- ...tionContext.java => ValidationDataContext.java} | 2 +- .../validate/ValidationMessageDetector.java | 730 ++++++++++----------- .../actions/validate/ValidateServiceTopiaTest.java | 207 ++++++ .../validate/ValidationServiceTopiaTest.java | 111 ---- .../field/ActivitySimpleSpeedValidator.java | 2 + .../validation/field/ActivitySpeedValidator.java | 2 + 15 files changed, 659 insertions(+), 563 deletions(-) create mode 100644 observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateService.java delete mode 100644 observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationService.java rename observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/{ValidationServiceTopia.java => ValidateServiceTopia.java} (90%) rename observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/{ValidationContext.java => ValidationDataContext.java} (99%) create mode 100644 observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/validate/ValidateServiceTopiaTest.java delete mode 100644 observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/validate/ValidationServiceTopiaTest.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 feature/7493 in repository observe. See http://git.codelutin.com/observe.git commit 20029729d2ed6d41227b1405cab7eb6775d9b6a5 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Sep 3 11:13:14 2015 +0200 recupération des différents types de dto --- .../ird/observe/services/ObserveServiceTopia.java | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java index de21753..7d2e310 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java @@ -91,6 +91,17 @@ public class ObserveServiceTopia implements ObserveService { public static <E extends TopiaEntity, M extends IdDto> Class<M> getDtoType(Class<E> entityType) { Class<?> modelType = ENTITY_TO_DTO_TYPES.get(entityType); + if (modelType == null && TopiaEntity.class.isAssignableFrom(entityType)) { + // Pour gérer le cas des proxy hibernate qui ne sont pas égale à la classe proxifiée + //FIXME Trouver une meilleure solution + String name = entityType.getName(); + for (Map.Entry<Class<?>, Class<?>> entry : ENTITY_TO_DTO_TYPES.entrySet()) { + if (name.startsWith(entry.getKey().getName())) { + modelType = entry.getKey(); + break; + } + } + } return (Class<M>) modelType; } @@ -98,6 +109,28 @@ public class ObserveServiceTopia implements ObserveService { return DTO_TO_ENTITY_TYPES.entrySet(); } + public static ImmutableSet<Class<? extends ReferentialDto>> getReferentialDtoTypes() { + ImmutableSet.Builder<Class<? extends ReferentialDto>> builder = new ImmutableSet.Builder<>(); + for (Map.Entry<Class<?>, Class<?>> entry : getDtoTypes()) { + Class<?> dtoType = entry.getKey(); + if (ReferentialDto.class.isAssignableFrom(dtoType)) { + builder.add((Class<? extends ReferentialDto>) dtoType); + } + } + return builder.build(); + } + + public static ImmutableSet<Class<? extends IdDto>> getDataDtoTypes() { + ImmutableSet.Builder<Class<? extends IdDto>> builder = new ImmutableSet.Builder<>(); + for (Map.Entry<Class<?>, Class<?>> entry : getDtoTypes()) { + Class<?> dtoType = entry.getKey(); + if (!ReferentialDto.class.isAssignableFrom(dtoType)) { + builder.add((Class<? extends IdDto>) dtoType); + } + } + return builder.build(); + } + public ReferenceLocale getReferenceLocale() { ReferentialLocale referentialLocale = serviceContext.getReferentialLocale(); Locale locale = referentialLocale.getLocale(); -- 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 feature/7493 in repository observe. See http://git.codelutin.com/observe.git commit 8c3e04987014f35fedf483ecd5888d89ac6307ce Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Sep 3 14:12:55 2015 +0200 Renommage de certains objets Simplificiation du détecteur de messages (on n'utilise plus les références sur entités) See #7493 --- .../actions/validate/ValidateDataRequest.java | 12 - .../actions/validate/ValidateDataResult.java | 10 +- .../validate/ValidateReferentialsRequest.java | 13 - .../validate/ValidateReferentialsResult.java | 10 +- .../service/actions/validate/ValidateService.java | 25 + .../actions/validate/ValidationService.java | 14 - .../service/actions/validate/ObserveValidator.java | 22 +- ...ServiceTopia.java => ValidateServiceTopia.java} | 29 +- ...tionContext.java => ValidationDataContext.java} | 2 +- .../validate/ValidationMessageDetector.java | 730 ++++++++++----------- .../actions/validate/ValidateServiceTopiaTest.java | 207 ++++++ .../validate/ValidationServiceTopiaTest.java | 111 ---- .../field/ActivitySimpleSpeedValidator.java | 2 + .../validation/field/ActivitySpeedValidator.java | 2 + 14 files changed, 626 insertions(+), 563 deletions(-) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateDataRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateDataRequest.java index ebcbfb3..03c31f7 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateDataRequest.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateDataRequest.java @@ -27,11 +27,6 @@ public class ValidateDataRequest { */ protected ImmutableSet<String> dataIds; - /** - * Pour générer un rapport de la validation. - */ - protected boolean generateReport; - public ImmutableSet<NuitonValidatorScope> getScopes() { return scopes; } @@ -56,11 +51,4 @@ public class ValidateDataRequest { this.dataIds = dataIds; } - public boolean isGenerateReport() { - return generateReport; - } - - public void setGenerateReport(boolean generateReport) { - this.generateReport = generateReport; - } } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateDataResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateDataResult.java index 1d584a8..0489c75 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateDataResult.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateDataResult.java @@ -1,6 +1,5 @@ package fr.ird.observe.services.service.actions.validate; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import fr.ird.observe.services.dto.IdDto; @@ -17,12 +16,9 @@ public class ValidateDataResult { protected final ImmutableMap<Class<? extends IdDto>, ValidateResultForDtoType> resultByType; - protected final Optional<String> optionalReport; - - public ValidateDataResult(ValidateDataRequest validateDataRequest, ImmutableMap<Class<? extends IdDto>, ValidateResultForDtoType> resultByType, Optional<String> optionalReport) { + public ValidateDataResult(ValidateDataRequest validateDataRequest, ImmutableMap<Class<? extends IdDto>, ValidateResultForDtoType> resultByType) { this.validateDataRequest = validateDataRequest; this.resultByType = resultByType; - this.optionalReport = optionalReport; } public ValidateDataRequest getValidateDataRequest() { @@ -33,8 +29,4 @@ public class ValidateDataResult { return resultByType; } - public Optional<String> getOptionalReport() { - return optionalReport; - } - } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateReferentialsRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateReferentialsRequest.java index b0055e5..8507926 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateReferentialsRequest.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateReferentialsRequest.java @@ -28,11 +28,6 @@ public class ValidateReferentialsRequest { */ protected ImmutableSet<Class<? extends ReferentialDto>> referentialTypes; - /** - * Pour générer un rapport de la validation. - */ - protected boolean generateReport; - public String getValidationContext() { return validationContext; } @@ -57,12 +52,4 @@ public class ValidateReferentialsRequest { this.referentialTypes = referentialTypes; } - public boolean isGenerateReport() { - return generateReport; - } - - public void setGenerateReport(boolean generateReport) { - this.generateReport = generateReport; - } - } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateReferentialsResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateReferentialsResult.java index 6c2a1e2..cf6f397 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateReferentialsResult.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateReferentialsResult.java @@ -1,6 +1,5 @@ package fr.ird.observe.services.service.actions.validate; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import fr.ird.observe.services.dto.referential.ReferentialDto; @@ -17,12 +16,9 @@ public class ValidateReferentialsResult { protected final ImmutableMap<Class<? extends ReferentialDto>, ValidateResultForDtoType> resultByType; - protected final Optional<String> optionalReport; - - public ValidateReferentialsResult(ValidateReferentialsRequest validateReferentialsRequest, ImmutableMap<Class<? extends ReferentialDto>, ValidateResultForDtoType> resultByType, Optional<String> optionalReport) { + public ValidateReferentialsResult(ValidateReferentialsRequest validateReferentialsRequest, ImmutableMap<Class<? extends ReferentialDto>, ValidateResultForDtoType> resultByType) { this.validateReferentialsRequest = validateReferentialsRequest; this.resultByType = resultByType; - this.optionalReport = optionalReport; } public ValidateReferentialsRequest getValidateReferentialsRequest() { @@ -33,8 +29,4 @@ public class ValidateReferentialsResult { return resultByType; } - public Optional<String> getOptionalReport() { - return optionalReport; - } - } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateService.java new file mode 100644 index 0000000..8901341 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateService.java @@ -0,0 +1,25 @@ +package fr.ird.observe.services.service.actions.validate; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.ObserveService; +import fr.ird.observe.services.spi.NoDataAccess; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public interface ValidateService extends ObserveService { + + String N1_CREATE_CONTEXT = "n1-create"; + + String N1_UPDATE_CONTEXT = "n1-update"; + + ImmutableSet<String> AVAILABLE_CONTEXT_NAMES = ImmutableSet.of(N1_CREATE_CONTEXT, N1_UPDATE_CONTEXT); + + @NoDataAccess + ImmutableSet<String> getAvailableContextNames(); + + ValidateReferentialsResult validate(ValidateReferentialsRequest request); + + ValidateDataResult validate(ValidateDataRequest request); + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationService.java deleted file mode 100644 index a444967..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationService.java +++ /dev/null @@ -1,14 +0,0 @@ -package fr.ird.observe.services.service.actions.validate; - -import fr.ird.observe.services.ObserveService; - -/** - * @author Sylvain Bavencoff - bavencoff@codelutin.com - */ -public interface ValidationService extends ObserveService { - - ValidateReferentialsResult validate(ValidateReferentialsRequest request); - - ValidateDataResult validate(ValidateDataRequest request); - -} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ObserveValidator.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ObserveValidator.java index 8b6bc61..e2bf106 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ObserveValidator.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ObserveValidator.java @@ -49,7 +49,7 @@ public class ObserveValidator<B> extends SimpleBeanValidator<B> { /** un etat pour initialiser la stack une unique fois la stack */ private static boolean init; - private static ValidationContext validationContext; + private static ValidationDataContext validationDataContext; public static <B> ObserveValidator<B> newObserveValidator(Class<B> type, String context, @@ -98,7 +98,7 @@ public class ObserveValidator<B> extends SimpleBeanValidator<B> { // on positionne dans la stack de dataContext pour pouvoir faire de la // validation sur des objets dans le scope. - ValidationContext dataContext = getValidationContext(); + ValidationDataContext dataContext = getValidationDataContext(); reloadDataContext(dataContext, true); @@ -109,12 +109,12 @@ public class ObserveValidator<B> extends SimpleBeanValidator<B> { } - public static void reloadDataContext(ValidationContext validationContext, boolean strict) { + public static void reloadDataContext(ValidationDataContext validationDataContext, boolean strict) { - if (validationContext != ObserveValidator.validationContext) { + if (validationDataContext != ObserveValidator.validationDataContext) { // keep this validation context - setValidationContext(validationContext); + setValidationDataContext(validationDataContext); } @@ -135,21 +135,21 @@ public class ObserveValidator<B> extends SimpleBeanValidator<B> { if (valueStack != null) { if (log.isDebugEnabled()) { - log.debug("Enregistrement du context de validation [" + validationContext + "] dans la valueStack de " + + log.debug("Enregistrement du context de validation [" + validationDataContext + "] dans la valueStack de " + "validation (" + valueStack + ')'); } - valueStack.push(validationContext); + valueStack.push(validationDataContext); } } - public static ValidationContext getValidationContext() { - return validationContext; + public static ValidationDataContext getValidationDataContext() { + return validationDataContext; } - public static void setValidationContext(ValidationContext validationContext) { - ObserveValidator.validationContext = validationContext; + public static void setValidationDataContext(ValidationDataContext validationDataContext) { + ObserveValidator.validationDataContext = validationDataContext; // a chaque fois qu'on change le contexte de validation il faudra reinitiliser la stack setInit(false); } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateServiceTopia.java similarity index 90% rename from observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationServiceTopia.java rename to observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateServiceTopia.java index aa4fff4..cc8354b 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateServiceTopia.java @@ -26,14 +26,19 @@ import java.util.Set; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com */ -public class ValidationServiceTopia extends ObserveServiceTopia implements ValidationService { +public class ValidateServiceTopia extends ObserveServiceTopia implements ValidateService { - private static final Log log = LogFactory.getLog(ValidationServiceTopia.class); + private static final Log log = LogFactory.getLog(ValidateServiceTopia.class); + + @Override + public ImmutableSet<String> getAvailableContextNames() { + return AVAILABLE_CONTEXT_NAMES; + } @Override public ValidateReferentialsResult validate(ValidateReferentialsRequest request) { - ValidationContext validationContext = new ValidationContext(); + ValidationDataContext validationDataContext = new ValidationDataContext(); ValidatorsMap validators = getValidators(request.getValidationContext(), request.getScopes(), @@ -42,9 +47,9 @@ public class ValidationServiceTopia extends ObserveServiceTopia implements Valid //FIXME On ne peut pas charger cela avant d'avoir détecter un premier validateur //FIXME Il faudrait mieux initialier de manière explicite le ActionContext - ObserveValidator.reloadDataContext(validationContext, false); + ObserveValidator.reloadDataContext(validationDataContext, false); - ValidationMessageDetector detector = new ValidationMessageDetector(validators, validationContext); + ValidationMessageDetector detector = new ValidationMessageDetector(validators, validationDataContext); for (Class<? extends ReferentialDto> referentialType : request.getReferentialTypes()) { @@ -53,7 +58,7 @@ public class ValidationServiceTopia extends ObserveServiceTopia implements Valid } ImmutableMap validateResultForDtoTypeMap = buildResultForDtoTypes(detector); - ValidateReferentialsResult result = new ValidateReferentialsResult(request, validateResultForDtoTypeMap, null); + ValidateReferentialsResult result = new ValidateReferentialsResult(request, validateResultForDtoTypeMap); return result; } @@ -61,7 +66,7 @@ public class ValidationServiceTopia extends ObserveServiceTopia implements Valid @Override public ValidateDataResult validate(ValidateDataRequest request) { - ValidationContext validationContext = new ValidationContext(); + ValidationDataContext validationDataContext = new ValidationDataContext(); ValidatorsMap validators = getValidators(request.getValidationContext(), request.getScopes(), @@ -70,9 +75,9 @@ public class ValidationServiceTopia extends ObserveServiceTopia implements Valid //FIXME On ne peut pas charger cela avant d'avoir détecter un premier validateur //FIXME Il faudrait mieux initialier de manière explicite le ActionContext - ObserveValidator.reloadDataContext(validationContext, false); + ObserveValidator.reloadDataContext(validationDataContext, false); - ValidationMessageDetector detector = new ValidationMessageDetector(validators, validationContext); + ValidationMessageDetector detector = new ValidationMessageDetector(validators, validationDataContext); for (String dataId : request.getDataIds()) { @@ -81,7 +86,7 @@ public class ValidationServiceTopia extends ObserveServiceTopia implements Valid } ImmutableMap<Class<? extends IdDto>, ValidateResultForDtoType> validateResultForDtoTypeMap = buildResultForDtoTypes(detector); - ValidateDataResult result = new ValidateDataResult(request, validateResultForDtoTypeMap, null); + ValidateDataResult result = new ValidateDataResult(request, validateResultForDtoTypeMap); return result; } @@ -136,7 +141,7 @@ public class ValidationServiceTopia extends ObserveServiceTopia implements Valid for (TopiaEntity entity : loadEntities(referentialType)) { - detector.detectMessages(entity); + detector.detectValidationMessages(entity); } @@ -156,7 +161,7 @@ public class ValidationServiceTopia extends ObserveServiceTopia implements Valid } - detector.detectMessages(trip); + detector.detectValidationMessages(trip); } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationContext.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationDataContext.java similarity index 99% rename from observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationContext.java rename to observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationDataContext.java index 6675eae..341bec2 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationContext.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationDataContext.java @@ -42,7 +42,7 @@ import java.util.List; * @author Tony Chemit - chemit@codelutin.com * @since 1.4 */ -public class ValidationContext { +public class ValidationDataContext { protected List<?> editingReferentielList; diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationMessageDetector.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationMessageDetector.java index ede05cd..aeef8ef 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationMessageDetector.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/validate/ValidationMessageDetector.java @@ -37,7 +37,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaEntityVisitor; -import org.nuiton.topia.persistence.util.TopiaEntityRef; import org.nuiton.validator.bean.simple.SimpleBeanValidatorEvent; import org.nuiton.validator.bean.simple.SimpleBeanValidatorListener; @@ -55,40 +54,38 @@ import java.util.Set; * @author Tony Chemit - chemit@codelutin.com * @since 1.3 */ -public class ValidationMessageDetector implements TopiaEntityVisitor, - SimpleBeanValidatorListener { +public class ValidationMessageDetector { /** Logger */ - private static final Log log = - LogFactory.getLog(ValidationMessageDetector.class); - - public static final String SEPARATOR = "/"; - - /** le path courant depuis le depart */ - protected Deque<TopiaEntity> path; + private static final Log log = LogFactory.getLog(ValidationMessageDetector.class); + /** + * Le dictionnaire des messages détectés pour chaque entité visitée. + */ protected final Multimap<TopiaEntity, ValidationMessage> detectedMessages; - protected StringBuilder accessorExpression; + /** + * Le visiteur d'entités pour lancer la validation sur l'enveloppe d'une entité. + */ + protected final MyTopiaEntityVisitor entityVisitor; - protected TopiaEntity root; + public ValidationMessageDetector(ValidatorsMap validators, ValidationDataContext validationDataContext) { + this.detectedMessages = HashMultimap.create(); + this.entityVisitor = new MyTopiaEntityVisitor(validators, validationDataContext); + } - protected TopiaEntityRef currentRef; + public void detectValidationMessages(TopiaEntity entity) { - protected Set<TopiaEntity> explored; + if (log.isDebugEnabled()) { + log.debug("start for entity " + entity); + } - /** le dictionnaire des validateurs utilisables */ - protected final ValidatorsMap validators; + // détection sur l'entité e + entity.accept(entityVisitor); - protected final ValidationContext validationContext; + // on vide le visiteur + entityVisitor.clear(); - public ValidationMessageDetector(ValidatorsMap validators, ValidationContext validationContext) { - this.validators = validators; - this.validationContext = validationContext; - this.path = new LinkedList<>(); - this.explored = new HashSet<>(); - this.detectedMessages = HashMultimap.create(); - this.accessorExpression = new StringBuilder(); } public Set<Class<? extends TopiaEntity>> getDetectedEntityTypes() { @@ -99,7 +96,7 @@ public class ValidationMessageDetector implements TopiaEntityVisitor, contractAndImplementationTypes.add(topiaEntity.getClass()); } - // Seconde pass pour ne conserver que les contrats + // Seconde passe pour ne conserver que les contrats Set<Class<? extends TopiaEntity>> result = new LinkedHashSet<>(); for (Class<? extends TopiaEntity> type : contractAndImplementationTypes) { Class<? extends TopiaEntity> contract = ObserveEntityEnum.valueOf(type).getContract(); @@ -110,392 +107,383 @@ public class ValidationMessageDetector implements TopiaEntityVisitor, } - public void detectMessages(TopiaEntity e) { + public <E extends TopiaEntity> Map<TopiaEntity, Collection<ValidationMessage>> getDetectedMessages(final Class<E> entityType) { + return Multimaps.filterEntries(detectedMessages, new Predicate<Map.Entry<TopiaEntity, ValidationMessage>>() { - // on vide le contexte de validation - validationContext.clear(); + @Override + public boolean apply(Map.Entry<TopiaEntity, ValidationMessage> input) { + return entityType.isAssignableFrom(input.getKey().getClass()); + } + }).asMap(); + } - // on reinitialise tous les validateurs - for (ObserveValidator<?> v : validators.values()) { - v.setBean(null); - } + protected class MyTopiaEntityVisitor implements TopiaEntityVisitor, SimpleBeanValidatorListener { - if (log.isDebugEnabled()) { - log.debug("start for entity " + e); - } + /** + * Le dictionnaire des validateurs utilisables. + */ + protected final ValidatorsMap validators; - // détection sur l'entité e - e.accept(this); + /** + * Le contexte de données injecté dans le contexte de validation. + */ + protected final ValidationDataContext validationDataContext; - } + /** + * La pile d'entités en cours de validation (le haut est l'entitié courante). + */ + protected final Deque<TopiaEntity> path; - @Override - public void start(TopiaEntity e) { - if (root == null) { - // start come in start method since last clear method invocation - root = e; - addPath(e, "$root", -1); - } - explored.add(e); - ObserveValidator validator = getValidator(e.getClass()); - if (log.isDebugEnabled()) { - log.debug("with entity " + e.getTopiaId() + " : " + accessorExpression); + /** + * La liste des entités déjà visitées (pour éviter de les parcourir plusieurs fois). + */ + protected final Set<TopiaEntity> explored; + + protected TopiaEntity currentEntity; + + protected MyTopiaEntityVisitor(ValidatorsMap validators, ValidationDataContext validationDataContext) { + this.validators = validators; + this.validationDataContext = validationDataContext; + this.path = new LinkedList<>(); + this.explored = new HashSet<>(); } - if (validator != null) { - - validator.addSimpleBeanValidatorListener(this); - addEntityInContext(e); - try { - currentRef = new TopiaEntityRef(root, e, accessorExpression.toString(), path.toArray(new TopiaEntity[path.size()])); - validator.setBean(e); - } finally { - validator.removeSimpleBeanValidatorListener(this); - validator.setBean(null); + + @Override + public void start(TopiaEntity e) { + if (path.isEmpty()) { + // start come in start method since last clear method invocation + addPath(e); + } + explored.add(e); + ObserveValidator validator = getValidator(e.getClass()); + if (validator != null) { + + validator.addSimpleBeanValidatorListener(this); + addEntityInContext(e); + try { + validator.setBean(e); + } finally { + validator.removeSimpleBeanValidatorListener(this); + validator.setBean(null); + } } } - } - @Override - public void end(TopiaEntity e) { - if (root != null && root.equals(e)) { - // global visit is done - root = null; - removePath(); + @Override + public void end(TopiaEntity e) { + if (path.size() == 1) { + // global visit is done + removePath(); + } + removeEntityFromContext(e); } - removeEntityFromContext(e); - } - @Override - public void visit(TopiaEntity e, String name, Class<?> type, Object value) { - TopiaEntity e1 = getTopiaValue(value); - if (e1 != null) { - addPath(e1, name, -1); - try { - e1.accept(this); - } finally { - removePath(); + @Override + public void visit(TopiaEntity e, String name, Class<?> type, Object value) { + TopiaEntity e1 = getTopiaValue(value); + if (e1 != null) { + addPath(e1); + try { + e1.accept(this); + } finally { + removePath(); + } } } - } - @Override - public void visit(TopiaEntity e, String name, Class<?> collectionType, Class<?> type, int index, Object value) { - TopiaEntity e1 = getTopiaValue(value); - if (e1 != null) { - addPath(e1, name, index); - try { - e1.accept(this); - } finally { - removePath(); + @Override + public void visit(TopiaEntity e, String name, Class<?> collectionType, Class<?> type, int index, Object value) { + TopiaEntity e1 = getTopiaValue(value); + if (e1 != null) { + addPath(e1); + try { + e1.accept(this); + } finally { + removePath(); + } } } - } - @Override - public void visit(TopiaEntity e, String name, Class<?> collectionType, Class<?> type, Object value) { - Collection<?> cValue = (Collection<?>) value; - if (TopiaEntity.class.isAssignableFrom(type) && - cValue != null && !cValue.isEmpty()) { - int i = 0; - for (Object currentValue : cValue) { - visit(e, name, collectionType, type, i++, currentValue); + @Override + public void visit(TopiaEntity e, String name, Class<?> collectionType, Class<?> type, Object value) { + Collection<?> cValue = (Collection<?>) value; + if (TopiaEntity.class.isAssignableFrom(type) && + cValue != null && !cValue.isEmpty()) { + int i = 0; + for (Object currentValue : cValue) { + visit(e, name, collectionType, type, i++, currentValue); + } } } - } - @Override - public void clear() { - path.clear(); - detectedMessages.clear(); - root = null; - explored.clear(); - accessorExpression.setLength(0); - } + @Override + public void clear() { + explored.clear(); + validationDataContext.clear(); - protected void addEntityInContext(TopiaEntity e) { - - ObserveEntityEnum anEnum = ObserveEntityEnum.valueOf(e); - switch (anEnum) { - case Route: - validationContext.setCurrentRoute((Route) e); - break; - case TripSeine: - validationContext.setCurrentTripSeine((TripSeine) e); - break; - case ActivitySeine: - validationContext.setCurrentActivitySeine((ActivitySeine) e); - break; - case SetSeine: - validationContext.setCurrentSetSeine((SetSeine) e); - break; - case TripLongline: - validationContext.setCurrentTripSeine((TripSeine) e); - break; - case ActivityLongline: - validationContext.setCurrentActivityLongline((ActivityLongline) e); - break; - case SetLongline: - validationContext.setCurrentSetLongline((SetLongline) e); - break; - case FloatingObject: - validationContext.setCurrentFloatingObject((FloatingObject) e); - break; - case NonTargetLength: - break; - case TargetLength: - break; - case TransmittingBuoy: - break; - case NonTargetCatch: - break; - case TargetCatch: - break; - case NonTargetSample: - break; - case TargetSample: - break; - case ObjectObservedSpecies: - break; - case SchoolEstimate: - break; - case ObjectSchoolEstimate: - break; - case VesselActivitySeine: - break; - case SurroundingActivity: - break; - case Vessel: - break; - case VesselSizeCategory: - break; - case WeightCategory: - break; - case ReasonForNullSet: - break; - case ReasonForNoFishing: - break; - case SpeciesFate: - break; - case ObjectFate: - break; - case Species: - break; - case SpeciesGroup: - break; - case DetectionMode: - break; - case Person: - break; - case Ocean: - break; - case TransmittingBuoyOperation: - break; - case ObjectOperation: - break; - case Organism: - break; - case LengthWeightParameter: - break; - case Country: - break; - case Program: - break; - case ReasonForDiscard: - break; - case SpeciesStatus: - break; - case ObservedSystem: - break; - case TransmittingBuoyType: - break; - case VesselType: - break; - case ObjectType: - break; - case Wind: - break; + // on reinitialise tous les validateurs + for (ObserveValidator<?> v : validators.values()) { + v.setBean(null); + } } - } - protected void removeEntityFromContext(TopiaEntity e) { - - ObserveEntityEnum anEnum = ObserveEntityEnum.valueOf(e); - switch (anEnum) { - case Route: - validationContext.setCurrentRoute(null); - break; - case TripSeine: - validationContext.setCurrentTripSeine(null); - break; - case ActivitySeine: - validationContext.setCurrentActivitySeine(null); - break; - case SetSeine: - validationContext.setCurrentSetSeine(null); - break; - case TripLongline: - validationContext.setCurrentTripLongline(null); - break; - case ActivityLongline: - validationContext.setCurrentActivityLongline(null); - break; - case SetLongline: - validationContext.setCurrentSetLongline(null); - break; - case FloatingObject: - validationContext.setCurrentFloatingObject(null); - break; - case NonTargetLength: - break; - case TargetLength: - break; - case TransmittingBuoy: - break; - case NonTargetCatch: - break; - case TargetCatch: - break; - case NonTargetSample: - break; - case TargetSample: - break; - case ObjectObservedSpecies: - break; - case SchoolEstimate: - break; - case ObjectSchoolEstimate: - break; - case VesselActivitySeine: - break; - case SurroundingActivity: - break; - case Vessel: - break; - case VesselSizeCategory: - break; - case WeightCategory: - break; - case ReasonForNullSet: - break; - case ReasonForNoFishing: - break; - case SpeciesFate: - break; - case ObjectFate: - break; - case Species: - break; - case SpeciesGroup: - break; - case DetectionMode: - break; - case Person: - break; - case Ocean: - break; - case TransmittingBuoyOperation: - break; - case ObjectOperation: - break; - case Organism: - break; - case LengthWeightParameter: - break; - case Country: - break; - case Program: - break; - case ReasonForDiscard: - break; - case SpeciesStatus: - break; - case ObservedSystem: - break; - case TransmittingBuoyType: - break; - case VesselType: - break; - case ObjectType: - break; - case Wind: - break; - } - } + @Override + public void onFieldChanged(SimpleBeanValidatorEvent event) { - protected TopiaEntity getTopiaValue(Object value) { - TopiaEntity topiaEntity = (TopiaEntity) (value != null && value instanceof TopiaEntity ? value : null); - if (topiaEntity != null && explored.contains(topiaEntity)) { - // entite deja visitee - topiaEntity = null; - } - return topiaEntity; - } + // on ne traite que les messages a ajouter + String[] messagesToAdd = event.getMessagesToAdd(); - protected <T extends TopiaEntity> ObserveValidator<T> getValidator(Class<T> entityType) { - return validators.getValidator(entityType); - } + if (messagesToAdd != null) { - protected void addPath(TopiaEntity entity, String name, int index) { - path.add(entity); - if (accessorExpression.length() > 0) { - accessorExpression.append(SEPARATOR); - } - accessorExpression.append(name); - if (index > -1) { - accessorExpression.append("[@topiaId=\""); - accessorExpression.append(entity.getTopiaId()); - accessorExpression.append("\"]"); - } - if (log.isTraceEnabled()) { - log.trace("add to stack : " + entity.getTopiaId() + ", new size : " + path.size() + ", path : " + accessorExpression); - } - } + for (String messageToAdd : messagesToAdd) { + + ValidationMessage validationMessage = new ValidationMessage(event.getScope(), event.getField(), messageToAdd); + detectedMessages.put(currentEntity, validationMessage); + if (log.isDebugEnabled()) { + log.debug(String.format("On entity %s add message %s", currentEntity.getTopiaId(), validationMessage)); + } + } - protected void removePath() { - TopiaEntity e = path.removeLast(); - if (path.isEmpty()) { - accessorExpression.setLength(0); - } else { - int index = accessorExpression.lastIndexOf(SEPARATOR); - if (index > -1) { - accessorExpression.delete(index, accessorExpression.length()); } + } - if (log.isTraceEnabled()) { - log.trace("remove from stack : " + e.getTopiaId() + ", new size : " + path.size() + ", path : " + accessorExpression); + + protected TopiaEntity getTopiaValue(Object value) { + TopiaEntity entity = (TopiaEntity) (value != null && value instanceof TopiaEntity ? value : null); + if (entity != null && explored.contains(entity)) { + // entite deja visitee + entity = null; + } + return entity; } - } - @Override - public void onFieldChanged(SimpleBeanValidatorEvent event) { + protected void addPath(TopiaEntity entity) { + path.add(entity); + currentEntity = entity; + } - // on ne traite que les messages a ajouter - String[] messagesToAdd = event.getMessagesToAdd(); + protected void removePath() { + path.removeLast(); + if (!path.isEmpty()) { + currentEntity = path.peek(); + } + } - if (messagesToAdd != null) { + protected <T extends TopiaEntity> ObserveValidator<T> getValidator(Class<T> entityType) { + return validators.getValidator(entityType); + } - TopiaEntity currentEntity = currentRef.getRef(); + protected void addEntityInContext(TopiaEntity entity) { + + ObserveEntityEnum anEnum = ObserveEntityEnum.valueOf(entity); + switch (anEnum) { + case Route: + validationDataContext.setCurrentRoute((Route) entity); + break; + case TripSeine: + validationDataContext.setCurrentTripSeine((TripSeine) entity); + break; + case ActivitySeine: + validationDataContext.setCurrentActivitySeine((ActivitySeine) entity); + break; + case SetSeine: + validationDataContext.setCurrentSetSeine((SetSeine) entity); + break; + case TripLongline: + validationDataContext.setCurrentTripSeine((TripSeine) entity); + break; + case ActivityLongline: + validationDataContext.setCurrentActivityLongline((ActivityLongline) entity); + break; + case SetLongline: + validationDataContext.setCurrentSetLongline((SetLongline) entity); + break; + case FloatingObject: + validationDataContext.setCurrentFloatingObject((FloatingObject) entity); + break; + case NonTargetLength: + break; + case TargetLength: + break; + case TransmittingBuoy: + break; + case NonTargetCatch: + break; + case TargetCatch: + break; + case NonTargetSample: + break; + case TargetSample: + break; + case ObjectObservedSpecies: + break; + case SchoolEstimate: + break; + case ObjectSchoolEstimate: + break; + case VesselActivitySeine: + break; + case SurroundingActivity: + break; + case Vessel: + break; + case VesselSizeCategory: + break; + case WeightCategory: + break; + case ReasonForNullSet: + break; + case ReasonForNoFishing: + break; + case SpeciesFate: + break; + case ObjectFate: + break; + case Species: + break; + case SpeciesGroup: + break; + case DetectionMode: + break; + case Person: + break; + case Ocean: + break; + case TransmittingBuoyOperation: + break; + case ObjectOperation: + break; + case Organism: + break; + case LengthWeightParameter: + break; + case Country: + break; + case Program: + break; + case ReasonForDiscard: + break; + case SpeciesStatus: + break; + case ObservedSystem: + break; + case TransmittingBuoyType: + break; + case VesselType: + break; + case ObjectType: + break; + case Wind: + break; + } + } - for (String messageToAdd : messagesToAdd) { - ValidationMessage validationMessage = new ValidationMessage(event.getScope(), event.getField(), messageToAdd); - detectedMessages.put(currentEntity, validationMessage); - if (log.isDebugEnabled()) { - log.debug(String.format("On entity %s add message %s", currentEntity.getTopiaId(), validationMessage)); - } + protected void removeEntityFromContext(TopiaEntity entity) { + + ObserveEntityEnum anEnum = ObserveEntityEnum.valueOf(entity); + switch (anEnum) { + case Route: + validationDataContext.setCurrentRoute(null); + break; + case TripSeine: + validationDataContext.setCurrentTripSeine(null); + break; + case ActivitySeine: + validationDataContext.setCurrentActivitySeine(null); + break; + case SetSeine: + validationDataContext.setCurrentSetSeine(null); + break; + case TripLongline: + validationDataContext.setCurrentTripLongline(null); + break; + case ActivityLongline: + validationDataContext.setCurrentActivityLongline(null); + break; + case SetLongline: + validationDataContext.setCurrentSetLongline(null); + break; + case FloatingObject: + validationDataContext.setCurrentFloatingObject(null); + break; + case NonTargetLength: + break; + case TargetLength: + break; + case TransmittingBuoy: + break; + case NonTargetCatch: + break; + case TargetCatch: + break; + case NonTargetSample: + break; + case TargetSample: + break; + case ObjectObservedSpecies: + break; + case SchoolEstimate: + break; + case ObjectSchoolEstimate: + break; + case VesselActivitySeine: + break; + case SurroundingActivity: + break; + case Vessel: + break; + case VesselSizeCategory: + break; + case WeightCategory: + break; + case ReasonForNullSet: + break; + case ReasonForNoFishing: + break; + case SpeciesFate: + break; + case ObjectFate: + break; + case Species: + break; + case SpeciesGroup: + break; + case DetectionMode: + break; + case Person: + break; + case Ocean: + break; + case TransmittingBuoyOperation: + break; + case ObjectOperation: + break; + case Organism: + break; + case LengthWeightParameter: + break; + case Country: + break; + case Program: + break; + case ReasonForDiscard: + break; + case SpeciesStatus: + break; + case ObservedSystem: + break; + case TransmittingBuoyType: + break; + case VesselType: + break; + case ObjectType: + break; + case Wind: + break; } - } } - public <E extends TopiaEntity> Map<TopiaEntity, Collection<ValidationMessage>> getDetectedMessages(final Class<E> entityType) { - return Multimaps.filterEntries(detectedMessages, new Predicate<Map.Entry<TopiaEntity, ValidationMessage>>() { - - @Override - public boolean apply(Map.Entry<TopiaEntity, ValidationMessage> input) { - return entityType.isAssignableFrom(input.getKey().getClass()); - } - }).asMap(); - } } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/validate/ValidateServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/validate/ValidateServiceTopiaTest.java new file mode 100644 index 0000000..6702b8d --- /dev/null +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/validate/ValidateServiceTopiaTest.java @@ -0,0 +1,207 @@ +package fr.ird.observe.services.service.actions.validate; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.service.AbstractServiceTopiaTest; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.validator.NuitonValidatorScope; + +import java.util.Set; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ValidateServiceTopiaTest extends AbstractServiceTopiaTest { + + protected ValidateService service; + + @Override + public Set<String> getTestNamesChangeDataBase() { + return ImmutableSet.of(); + } + + @Override + public String getScriptName() { + return "dataForTestSeine"; + } + + @Override + public void setUp() throws Exception { + super.setUp(); + service = newService(ValidateService.class); + } + + @Test + public void testValidateReferantials() throws Exception { + + ValidateReferentialsRequest request = new ValidateReferentialsRequest(); + + request.setValidationContext(ValidateService.N1_UPDATE_CONTEXT); + request.setScopes(ImmutableSet.copyOf(NuitonValidatorScope.values())); + request.setReferentialTypes(ObserveServiceTopia.getReferentialDtoTypes()); + + ValidateReferentialsResult result = service.validate(request); + Assert.assertNotNull(result); + ImmutableMap<Class<? extends ReferentialDto>, ValidateResultForDtoType> resultByType = result.getResultByType(); + Assert.assertNotNull(resultByType); + Assert.assertEquals(59, resultByType.size()); + +// for (Map.Entry<Class<? extends ReferentialDto>, ValidateResultForDtoType> entry : resultByType.entrySet()) { +// System.out.println("assertValidateResultForReferentialDtoType(resultByType, " + entry.getKey().getName() + ".class, " + entry.getValue().getValidationResultForDto().size() + ");"); +// } + + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.CountryDto.class, 53); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.FpaZoneDto.class, 41); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.GearCaracteristicDto.class, 22); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.GearCaracteristicTypeDto.class, 6); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.GearDto.class, 26); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.HarbourDto.class, 74); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.LengthWeightParameterDto.class, 352); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.OceanDto.class, 3); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.OrganismDto.class, 8); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.PersonDto.class, 390); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.ProgramDto.class, 27); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.SexDto.class, 5); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.SpeciesDto.class, 275); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.SpeciesGroupDto.class, 8); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.SpeciesListDto.class, 5); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.VesselDto.class, 977); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.VesselSizeCategoryDto.class, 13); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.VesselTypeDto.class, 14); + + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.BaitHaulingStatusDto.class, 5); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.BaitSettingStatusDto.class, 5); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.BaitTypeDto.class, 16); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.CatchFateLonglineDto.class, 5); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.EncounterTypeDto.class, 12); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.HealthnessDto.class, 6); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.HookPositionDto.class, 13); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.HookSizeDto.class, 22); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.HookTypeDto.class, 13); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.ItemHorizontalPositionDto.class, 3); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.ItemVerticalPositionDto.class, 3); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.LightsticksColorDto.class, 7); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.LightsticksTypeDto.class, 2); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.LineTypeDto.class, 8); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.MaturityStatusDto.class, 12); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.MitigationTypeDto.class, 15); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.SensorBrandDto.class, 4); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.SensorDataFormatDto.class, 2); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.SensorTypeDto.class, 4); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.SettingShapeDto.class, 6); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.SizeMeasureTypeDto.class, 17); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.StomacFullnessDto.class, 7); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.TripTypeDto.class, 3); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.VesselActivityLonglineDto.class, 5); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.longline.WeightMeasureTypeDto.class, 3); + + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.DetectionModeDto.class, 10); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.ObjectFateDto.class, 9); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.ObjectOperationDto.class, 4); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.ObjectTypeDto.class, 23); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.ObservedSystemDto.class, 21); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.ReasonForDiscardDto.class, 5); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.ReasonForNoFishingDto.class, 13); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.ReasonForNullSetDto.class, 10); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.SpeciesFateDto.class, 9); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.SpeciesStatusDto.class, 3); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.SurroundingActivityDto.class, 8); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.TransmittingBuoyOperationDto.class, 3); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.TransmittingBuoyTypeDto.class, 12); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.VesselActivitySeineDto.class, 23); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.WeightCategoryDto.class, 101); + assertValidateResultForReferentialDtoType(resultByType, fr.ird.observe.services.dto.referential.seine.WindDto.class, 13); + + } + + @Test + public void testValidateTripSeinesCreate() throws Exception { + + ValidateDataRequest request = new ValidateDataRequest(); + + request.setValidationContext(ValidateService.N1_CREATE_CONTEXT); + request.setScopes(ImmutableSet.copyOf(NuitonValidatorScope.values())); + request.setDataIds(ImmutableSet.of(TRIP_SEINE_ID_1, TRIP_SEINE_ID_2)); + + ValidateDataResult result = service.validate(request); + Assert.assertNotNull(result); + ImmutableMap<Class<? extends IdDto>, ValidateResultForDtoType> resultByType = result.getResultByType(); + Assert.assertNotNull(resultByType); + Assert.assertEquals(5, resultByType.size()); + +// for (Map.Entry<Class<? extends IdDto>, ValidateResultForDtoType> entry : resultByType.entrySet()) { +// System.out.println("assertValidateResultForDtoType(resultByType, " + entry.getKey().getName() + ".class, " + entry.getValue().getValidationResultForDto().size() + ");"); +// } + + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.TripSeineDto.class, 2); + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.RouteDto.class, 80); + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.ActivitySeineDto.class, 1519); + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.FloatingObjectDto.class, 99); + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.SetSeineDto.class, 77); + + } + + @Test + public void testValidateTripSeinesUdpate() throws Exception { + + ValidateDataRequest request = new ValidateDataRequest(); + + request.setValidationContext(ValidateService.N1_UPDATE_CONTEXT); + request.setScopes(ImmutableSet.copyOf(NuitonValidatorScope.values())); + request.setDataIds(ImmutableSet.of(TRIP_SEINE_ID_1, TRIP_SEINE_ID_2)); + + ValidateDataResult result = service.validate(request); + Assert.assertNotNull(result); + + ImmutableMap<Class<? extends IdDto>, ValidateResultForDtoType> resultByType = result.getResultByType(); + Assert.assertNotNull(resultByType); + Assert.assertEquals(8, resultByType.size()); + +// for (Map.Entry<Class<? extends IdDto>, ValidateResultForDtoType> entry : resultByType.entrySet()) { +// System.out.println("assertValidateResultForDtoType(resultByType, " + entry.getKey().getName() + ".class, " + entry.getValue().getValidationResultForDto().size() + ");"); +// } + + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.TripSeineDto.class, 2); + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.RouteDto.class, 80); + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.ActivitySeineDto.class, 1519); + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.FloatingObjectDto.class, 99); + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.TransmittingBuoyDto.class, 42); + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.SetSeineDto.class, 77); + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.NonTargetCatchDto.class, 3); + assertValidateResultForDtoType(resultByType, fr.ird.observe.services.dto.seine.SchoolEstimateDto.class, 27); + + } + + protected <D extends ReferentialDto> void assertValidateResultForReferentialDtoType(ImmutableMap<Class<? extends ReferentialDto>, ValidateResultForDtoType> resultByType, Class<D> dtoType, int expectedCount) { + + ValidateResultForDtoType<D> validateResultForDtoType = resultByType.get(dtoType); + Assert.assertNotNull(validateResultForDtoType); + ImmutableSet<ValidationResultForDto<D>> validationResultForDtos = validateResultForDtoType.getValidationResultForDto(); + Assert.assertNotNull(validationResultForDtos); + Assert.assertEquals(expectedCount, validationResultForDtos.size()); + for (ValidationResultForDto<D> validationResultForDto : validationResultForDtos) { + Assert.assertNotNull(validationResultForDto.getMessages()); + Assert.assertFalse(validationResultForDto.getMessages().isEmpty()); + } + + } + + protected <D extends IdDto> void assertValidateResultForDtoType(ImmutableMap<Class<? extends IdDto>, ValidateResultForDtoType> resultByType, Class<D> dtoType, int expectedCount) { + + ValidateResultForDtoType<D> validateResultForDtoType = resultByType.get(dtoType); + Assert.assertNotNull(validateResultForDtoType); + ImmutableSet<ValidationResultForDto<D>> validationResultForDtos = validateResultForDtoType.getValidationResultForDto(); + Assert.assertNotNull(validationResultForDtos); + Assert.assertEquals(expectedCount, validationResultForDtos.size()); + for (ValidationResultForDto<D> validationResultForDto : validationResultForDtos) { + Assert.assertNotNull(validationResultForDto.getMessages()); + Assert.assertFalse(validationResultForDto.getMessages().isEmpty()); + } + + } + +} diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/validate/ValidationServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/validate/ValidationServiceTopiaTest.java deleted file mode 100644 index 7d2f2e1..0000000 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/validate/ValidationServiceTopiaTest.java +++ /dev/null @@ -1,111 +0,0 @@ -package fr.ird.observe.services.service.actions.validate; - -import com.google.common.collect.ImmutableSet; -import fr.ird.observe.services.dto.referential.PersonDto; -import fr.ird.observe.services.dto.referential.ProgramDto; -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.service.AbstractServiceTopiaTest; -import org.junit.Assert; -import org.junit.Test; -import org.nuiton.validator.NuitonValidatorScope; - -import java.util.Set; - -/** - * @author Sylvain Bavencoff - bavencoff@codelutin.com - */ -public class ValidationServiceTopiaTest extends AbstractServiceTopiaTest { - - protected ValidationService service; - - @Override - public Set<String> getTestNamesChangeDataBase() { - return ImmutableSet.of(); - } - - @Override - public String getScriptName() { - return "dataForTestSeine"; - } - - @Override - public void setUp() throws Exception { - super.setUp(); - service = newService(ValidationService.class); - } - - @Test - public void testValidateReferantials() throws Exception { - - ValidateReferentialsRequest request = new ValidateReferentialsRequest(); - - request.setValidationContext("n1-update"); - request.setScopes(ImmutableSet.copyOf(NuitonValidatorScope.values())); - ImmutableSet<Class<? extends ReferentialDto>> of = ImmutableSet.of( - ProgramDto.class, PersonDto.class); - request.setReferentialTypes(of); - - ValidateReferentialsResult result = service.validate(request); - Assert.assertNotNull(result); - } - - @Test - public void testValidateTripSeines() throws Exception { - - ValidateDataRequest request = new ValidateDataRequest(); - - request.setValidationContext("n1-create"); - request.setScopes(ImmutableSet.copyOf(NuitonValidatorScope.values())); - request.setDataIds(ImmutableSet.of(TRIP_SEINE_ID_1, TRIP_SEINE_ID_2)); - - ValidateDataResult result = service.validate(request); - Assert.assertNotNull(result); - -// List<ValidationResultForDtoType> validationResults = service.validate(request); -// -// Assert.assertNotNull(validationResults); -// Assert.assertEquals(5, validationResults.size()); -// -// Assert.assertEquals(ActivitySeineDto.class, validationResults.get(0).getDtoType()); -// Assert.assertEquals(SetSeineDto.class, validationResults.get(1).getDtoType()); -// Assert.assertEquals(TripSeineDto.class, validationResults.get(2).getDtoType()); -// Assert.assertEquals(FloatingObjectDto.class, validationResults.get(3).getDtoType()); -// Assert.assertEquals(RouteDto.class, validationResults.get(4).getDtoType()); -// -// ValidationResultForDtoType tripValidationResult = validationResults.get(2); -// -// List<ValidationResultForDto> validationResultForDtos = tripValidationResult.getValidationResultForDtos(); -// Assert.assertNotNull(validationResultForDtos); -// Assert.assertEquals(2, validationResultForDtos.size()); -// Assert.assertEquals(TRIP_SEINE_ID_1, validationResultForDtos.get(0).getDto().getId()); -// Assert.assertEquals(TRIP_SEINE_ID_2, validationResultForDtos.get(1).getDto().getId()); -// -// List<ValidationMessage> messages = validationResultForDtos.get(0).getMessages(); -// -// Assert.assertNotNull(messages); -// Assert.assertEquals(5, messages.size()); -// -// Assert.assertEquals(ValidationScope.ERROR, messages.get(0).getScope()); -// Assert.assertEquals("Port de départ", messages.get(0).getFieldName()); -// Assert.assertEquals("La sélection d'un port de départ est obligatoire.", messages.get(0).getMessage()); -// -// Assert.assertEquals(ValidationScope.ERROR, messages.get(1).getScope()); -// Assert.assertEquals("Bateau", messages.get(1).getFieldName()); -// Assert.assertEquals("Le bateau sélectionné est désactivé.", messages.get(1).getMessage()); -// -// Assert.assertEquals(ValidationScope.WARNING, messages.get(2).getScope()); -// Assert.assertEquals("Capitaine", messages.get(2).getFieldName()); -// Assert.assertEquals("Pas de capitaine sélectionné.", messages.get(2).getMessage()); -// -// Assert.assertEquals(ValidationScope.WARNING, messages.get(3).getScope()); -// Assert.assertEquals("Saisisseur", messages.get(3).getFieldName()); -// Assert.assertEquals("Pas de saisisseur sélectionné.", messages.get(3).getMessage()); -// -// Assert.assertEquals(ValidationScope.WARNING, messages.get(4).getScope()); -// Assert.assertEquals("Port d'arrivée", messages.get(4).getFieldName()); -// Assert.assertEquals("Pas de port d'arrivé sélectionné.", messages.get(4).getMessage()); - - - } - -} 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 25136f5..8750114 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 @@ -170,10 +170,12 @@ public class ActivitySimpleSpeedValidator extends FieldValidatorSupport { return "activitySimpleSpeed"; } + //FIXME protected String decorate(ActivitySeine activitySeine) { return activitySeine.toString(); } + //FIXME 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 3df46cb..858242b 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 @@ -96,10 +96,12 @@ public class ActivitySpeedValidator extends FieldValidatorSupport { return invalidActivity; } + //FIXME protected String decorate(ActivitySeine activitySeine) { return activitySeine.toString(); } + //FIXME protected String decorate(GPSPoint currentPoint) { return currentPoint.toString(); } -- 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