This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 99c0502d038e43732a3b33ba1ab15359ed88407e Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 24 19:57:41 2015 +0100 fixes #6794: [IMPORT GENERIQUE] Améliorer les messages de validation lorsque les catégories ne sont pas valides --- .../consumer/CsvConsumerForSampleCategory.java | 17 ++++----- .../ValidateSampleCategoryAction.java | 41 ++++++++++++++++++---- .../resources/i18n/tutti-service_fr_FR.properties | 4 +-- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java index 062b924..8832e58 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java @@ -59,12 +59,7 @@ public class CsvConsumerForSampleCategory extends CsvComsumer<SampleCategoryRow, fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel sampleCategoryModel = importContext.getImportRequest().getSampleCategoryModel(); int nbSampling = sampleCategoryModel.getNbSampling(); - if (nbSampling < categoryIndex) { - - // too much categories - addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.tooMuchCategories"))); - - } else { + if (nbSampling >= categoryIndex) { SampleCategoryRow bean = row.getBean(); SampleCategoryModelEntry categoryEntry = sampleCategoryModel.getCategoryByIndex(categoryIndex); @@ -77,6 +72,12 @@ public class CsvConsumerForSampleCategory extends CsvComsumer<SampleCategoryRow, } else { + if (!Objects.equals(categoryEntry.getCode(), code)) { + + addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.codeNotMatching", categoryEntry.getCode(), code))); + + } + Caracteristic caracteristic = bean.getCaracteristic(); if (caracteristic == null) { @@ -86,10 +87,6 @@ public class CsvConsumerForSampleCategory extends CsvComsumer<SampleCategoryRow, addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching", categoryEntry.getCategoryId(), caracteristic.getIdAsInt()))); - } else if (!Objects.equals(categoryEntry.getCode(), code)) { - - addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.codeNotMatching", categoryEntry.getCode(), code))); - } } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSampleCategoryAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSampleCategoryAction.java index f421145..2c33ae6 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSampleCategoryAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSampleCategoryAction.java @@ -24,6 +24,8 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSampleCategory; @@ -35,6 +37,8 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.LinkedHashSet; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -70,19 +74,44 @@ public class ValidateSampleCategoryAction extends ImportActionSupport { GenericFormatCsvFileResult importFileResult = importContext.getSampleCategoryFileResult(); try (CsvConsumerForSampleCategory consumer = importContext.loadSampleCategories(false)) { - int nbCategories = 0; + SampleCategoryModel sampleCategoryModel = importContext.getImportRequest().getSampleCategoryModel(); + + int nbExpectedSampling = sampleCategoryModel.getNbSampling(); + + Set<String> categoryCodesFromApplication = new LinkedHashSet<>(); + for (SampleCategoryModelEntry sampleCategoryModelEntry : sampleCategoryModel.getCategory()) { + categoryCodesFromApplication.add(sampleCategoryModelEntry.getCode()); + } + + Set<String> categoryCodesFromImport = new LinkedHashSet<>(); for (ImportRow<SampleCategoryRow> row : consumer) { consumer.validateRow(row, importContext); - nbCategories++; + SampleCategoryRow bean = row.getBean(); + categoryCodesFromImport.add(bean.getCode()); } - if (nbCategories != importContext.getImportRequest().getSampleCategoryModel().getNbSampling()) { + importFileResult.flushErrors(consumer); - throw new ImportRuntimeException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.missingCategories")); + int nbActualSampling = categoryCodesFromImport.size(); - } + if (nbActualSampling < nbExpectedSampling) { - importFileResult.flushErrors(consumer); + // Il manque des catégories dans l'import + Set<String> missingCodes = new LinkedHashSet<>(categoryCodesFromApplication); + missingCodes.removeAll(categoryCodesFromImport); + + throw new ImportRuntimeException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.missingCategories", missingCodes)); + + } else if (nbActualSampling > nbExpectedSampling) { + + // Il manque des catégories dans l'application + + Set<String> missingCodes = new LinkedHashSet<>(categoryCodesFromImport); + missingCodes.removeAll(categoryCodesFromApplication); + + throw new ImportRuntimeException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.tooMuchCategories", missingCodes)); + + } } catch (IOException e) { throw new ApplicationTechnicalException("Could not close sampleCategory.csv file", e); diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 1bc9bca..ce8e8b6 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -157,10 +157,10 @@ tutti.service.genericFormat.import.protocol.notValid=Import d'un nouveau protoco tutti.service.genericFormat.import.sampleCategoryModel=Import du modèle de catégorisation tutti.service.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching=L'identifiant de la caractéristique devrait être %s, mais vaut %s tutti.service.genericFormat.import.sampleCategoryModel.error.codeNotMatching=Le code devrait être %s, mais vaut %s -tutti.service.genericFormat.import.sampleCategoryModel.error.missingCategories=Il manque des catégories +tutti.service.genericFormat.import.sampleCategoryModel.error.missingCategories=Dans le fichier d'import, il manque les catégorisations avec les codes suivants %s. Vous devez les supprimer dans l'application (Menu Administration > Configurer les catégorisations). tutti.service.genericFormat.import.sampleCategoryModel.error.noCaracteristic=La catactéristique est obligatoire tutti.service.genericFormat.import.sampleCategoryModel.error.noCode=Le code est obligatoire -tutti.service.genericFormat.import.sampleCategoryModel.error.tooMuchCategories=Trop de catégorisation +tutti.service.genericFormat.import.sampleCategoryModel.error.tooMuchCategories=Dans l'application, il manque les catégories avec les codes suivants %s. Vous devez les ajouter dans l'application (Menu Administration > Configurer les catégorisations). tutti.service.genericFormat.import.temporaryGears=Import des références temporaires d'engins tutti.service.genericFormat.import.temporaryPersons=Import des références temporaires de personnes tutti.service.genericFormat.import.temporarySpecies=Import des références temporaires de Taxons -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.