r1185 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch tutti-persistence/src/main/resources/i18n tutti-ui-swing/src/main/resources/i18n
Author: tchemit Date: 2013-09-18 08:10:16 +0200 (Wed, 18 Sep 2013) New Revision: 1185 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1185 Log: fixes #3265: [TRAIT] V?\195?\169rifier que l'ordre de saisie des captures est bien celui de la configuration de cat?\195?\169gorisation Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java 2013-09-18 05:20:33 UTC (rev 1184) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java 2013-09-18 06:10:16 UTC (rev 1185) @@ -33,6 +33,7 @@ import fr.ifremer.tutti.persistence.entities.data.BatchContainer; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.service.CatchBatchPersistenceService; @@ -94,12 +95,31 @@ List<CatchBatchValidationError> errors = Lists.newArrayList(); + Integer[] categoryIds = + sampleCategoryModel.getSamplingOrder().toArray(new Integer[sampleCategoryModel.getSamplingOrder().size()]); + for (SpeciesBatch speciesBatch : species.getChildren()) { - validateBatch(sampleCategoryModel, - errors, - speciesBatch, - n_("tutti.persistence.batch.validation.invalid.species.sampleCategoryId")); + // check all sample categories are accepted + validateSampleCategoriesUniverse( + sampleCategoryModel, + errors, + speciesBatch, + n_("tutti.persistence.batch.validation.invalid.species.sampleCategoryId")); + + + if (errors.isEmpty()) { + + // check sample categories order is ok + + validateSampleCategoriesOrder( + sampleCategoryModel, + errors, + speciesBatch, + categoryIds, + 0, + n_("tutti.persistence.batch.validation.invalid.species.sampleCategoryId.order")); + } } return errors; } @@ -110,12 +130,30 @@ List<CatchBatchValidationError> errors = Lists.newArrayList(); + Integer[] categoryIds = + sampleCategoryModel.getSamplingOrder().toArray(new Integer[sampleCategoryModel.getSamplingOrder().size()]); + for (BenthosBatch benthosBatch : benthos.getChildren()) { - validateBatch(sampleCategoryModel, - errors, - benthosBatch, - n_("tutti.persistence.batch.validation.invalid.benthos.sampleCategoryId")); + // check all sample categories are accepted + validateSampleCategoriesUniverse( + sampleCategoryModel, + errors, + benthosBatch, + n_("tutti.persistence.batch.validation.invalid.benthos.sampleCategoryId")); + + if (errors.isEmpty()) { + + // check sample categories order is ok + + validateSampleCategoriesOrder( + sampleCategoryModel, + errors, + benthosBatch, + categoryIds, + 0, + n_("tutti.persistence.batch.validation.invalid.benthos.sampleCategoryId.order")); + } } return errors; } @@ -287,16 +325,17 @@ } } - protected void validateBatch(SampleCategoryModel sampleCategoryModel, - List<CatchBatchValidationError> errors, - SpeciesAbleBatch aBatch, - String messageKey) { + protected void validateSampleCategoriesUniverse(SampleCategoryModel sampleCategoryModel, + List<CatchBatchValidationError> errors, + SpeciesAbleBatch aBatch, + String messageKey) { Integer sampleCategoryId = aBatch.getSampleCategoryId(); if (!sampleCategoryModel.containsCategoryId(sampleCategoryId)) { // invalid sample category id + addError(errors, messageKey, aBatch.getId(), @@ -308,14 +347,59 @@ for (SpeciesAbleBatch speciesAbleBatch : aBatch.getChildBatchs()) { - validateBatch(sampleCategoryModel, - errors, - speciesAbleBatch, - messageKey); + validateSampleCategoriesUniverse(sampleCategoryModel, + errors, + speciesAbleBatch, + messageKey); } } } + protected void validateSampleCategoriesOrder(SampleCategoryModel sampleCategoryModel, + List<CatchBatchValidationError> errors, + SpeciesAbleBatch aBatch, + Integer[] categoryIds, + int level, + String messageKey) { + + Integer sampleCategoryId = aBatch.getSampleCategoryId(); + + Integer exceptedCategoryId = categoryIds[level]; + + + if (!exceptedCategoryId.equals(sampleCategoryId)) { + + // bad sample category id + + SampleCategoryModelEntry actualCategory = sampleCategoryModel.getCategoryById(sampleCategoryId); + SampleCategoryModelEntry exceptedCategory = sampleCategoryModel.getCategoryById(exceptedCategoryId); + + addError(errors, + messageKey, + aBatch.getId(), + aBatch.getSpecies().getName(), + actualCategory.getLabel(), + exceptedCategory.getLabel()); + + // no need to continue, we got a bad order + return; + } + + if (!aBatch.isChildBatchsEmpty()) { + + for (SpeciesAbleBatch speciesAbleBatch : aBatch.getChildBatchs()) { + + validateSampleCategoriesOrder( + sampleCategoryModel, + errors, + speciesAbleBatch, + categoryIds, + level + 1, + messageKey); + } + } + } + protected void addError(List<CatchBatchValidationError> errors, String messageKey) { CatchBatchValidationError error = new CatchBatchValidationError( Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-09-18 05:20:33 UTC (rev 1184) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-09-18 06:10:16 UTC (rev 1185) @@ -27,7 +27,9 @@ tutti.persistence.batch.validation.horsVracNotFound= tutti.persistence.batch.validation.horsVracSpeciesNotFound= tutti.persistence.batch.validation.invalid.benthos.sampleCategoryId= +tutti.persistence.batch.validation.invalid.benthos.sampleCategoryId.order= tutti.persistence.batch.validation.invalid.species.sampleCategoryId= +tutti.persistence.batch.validation.invalid.species.sampleCategoryId.order= tutti.persistence.batch.validation.unkonwn.taxon= tutti.persistence.batch.validation.unsortedNotFound= tutti.persistence.batch.validation.vracBenthosAliveItemizedNotFound= Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-09-18 05:20:33 UTC (rev 1184) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-09-18 06:10:16 UTC (rev 1185) @@ -26,8 +26,10 @@ tutti.persistence.batch.validation.horsVracMarineLitterNotFound=Lot 'Hors Vrac > Macro-déchet' non trouvé, ou configuré avec d'autres critères de classement. tutti.persistence.batch.validation.horsVracNotFound=Lot 'Hors Vrac' non trouvé ou configuré avec d'autres critères de classement. tutti.persistence.batch.validation.horsVracSpeciesNotFound=Lot 'Hors Vrac > Espèces' non trouvé ou configuré avec d'autres critères de classement. -tutti.persistence.batch.validation.invalid.benthos.sampleCategoryId=Le lot benthos %s (espèce %s) utilise une caractéristique (id %s) de catégorisation non reconnue -tutti.persistence.batch.validation.invalid.species.sampleCategoryId=Le lot espèce %s (espèce %s) utilise une caractéristique (id %s) de catégorisation non reconnue +tutti.persistence.batch.validation.invalid.benthos.sampleCategoryId=Le lot benthos %s (espèce %s) utilise une catégorie (id %s) non reconnue +tutti.persistence.batch.validation.invalid.benthos.sampleCategoryId.order=Le lot benthos %s (espèce %s) ne respecte pas l'ordre des catégories, utilisation de la catégorie <strong>%s</strong> au lieu de <strong>%s</strong> +tutti.persistence.batch.validation.invalid.species.sampleCategoryId=Le lot espèce %s (espèce %s) utilise une catégorise (id %s) non reconnue +tutti.persistence.batch.validation.invalid.species.sampleCategoryId.order=Le lot espèce %s (espèce %s) ne respecte pas l'ordre des catégories, utilisation de la catégorie <strong>%s</strong> au lieu de <strong>%s</strong> tutti.persistence.batch.validation.unkonwn.taxon=Le lot (%s) utilise une espèce de code inconnu (%s). tutti.persistence.batch.validation.unsortedNotFound=Lot 'Hors Vrac > Espèces' non trouvé ou configuré avec d'autres critères de classement. tutti.persistence.batch.validation.vracBenthosAliveItemizedNotFound=Lot 'Vrac > Benthos > Vivant Trié' non trouvé, ou configuré avec d'autres critères de classement. Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-09-18 05:20:33 UTC (rev 1184) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-09-18 06:10:16 UTC (rev 1185) @@ -989,7 +989,7 @@ tutti.fishingOperations.info.no.fishingOperation.selected=< Aucun trait sélectionné > tutti.fishingOperations.title.edit.operations=Saisie des opérations de pêches (%s) tutti.fishingOperations.title.validate.operations=Validation des opérations de pêches (%s) -tutti.fishingOperations.warn.catchBatch.invalidSampleCategoryModel=L'arbre d’échantillonnage n'est pas compatible (utilisation de catégories non configurées). Les captures ne seront pas visibles. +tutti.fishingOperations.warn.catchBatch.invalidSampleCategoryModel=L'arbre d’échantillonnage n'est pas compatible (utilisation de catégories non configurées ou dans un mauvais ordre). Les captures ne seront pas visibles. tutti.fishingOperations.warn.catchBatch.notFound=Pas d'arbre d’échantillonnage associé à l'opération de pêche. tutti.fishingOperations.warn.invalid.batch.model=L'arbre d’échantillonnage n'est pas compatible. Les captures ne seront pas visibles. tutti.flash.info.all.caractristic.exported=Toutes les caractéristiques exportées dans le fichier <strong>%s</strong>.
participants (1)
-
tchemit@users.forge.codelutin.com