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 ac1f0ff87befbce5364014fd63069bd4cad29d43 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>.