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 6062cb57a68f49b73c84d84d455b8355fe219b09 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Feb 15 17:36:58 2015 +0100 validate sample category model --- .../genericformat/GenericFormatImportContext.java | 10 ++-- .../genericformat/GenericFormatImportResult.java | 2 +- .../GenericFormatReferentialImportResult.java | 1 + .../consumer/CsvConsumerForSampleCategory.java | 57 ++++++++++++++++++++++ .../resources/i18n/tutti-service_en_GB.properties | 6 +++ .../resources/i18n/tutti-service_fr_FR.properties | 18 ++++--- 6 files changed, 81 insertions(+), 13 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java index bf21187..bd7a207 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java @@ -12,12 +12,10 @@ import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForOperation; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForParameter; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSampleCategory; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; -import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryRow; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryGear; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryPerson; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryVessel; -import org.nuiton.csv.ImportRow; import java.io.Closeable; import java.io.IOException; @@ -32,14 +30,14 @@ public class GenericFormatImportContext implements Closeable { private final GenericFormatImportRequest importRequest; + private final GenericFormatImportResult importResult; + private final GenericFormatImportEntityParserFactory importEntityParserFactory; - private final GenericFormatImportResult importResult; - public GenericFormatImportContext(GenericFormatImportRequest importRequest, PersistenceService persistenceService) { this.importRequest = importRequest; - this.importEntityParserFactory = new GenericFormatImportEntityParserFactory(persistenceService, importRequest); this.importResult = new GenericFormatImportResult(importRequest); + this.importEntityParserFactory = new GenericFormatImportEntityParserFactory(persistenceService, importRequest, importResult); } public GenericFormatImportRequest getImportRequest() { @@ -73,7 +71,7 @@ public class GenericFormatImportContext implements Closeable { } - public Iterable<ImportRow<SampleCategoryRow>> loadSampleCategories() { + public CsvConsumerForSampleCategory loadSampleCategories() { CsvConsumerForSampleCategory consumer = new CsvConsumerForSampleCategory(importRequest.getArchive().getSampleCategoryModelPath(), importRequest.getCsvSeparator(), importEntityParserFactory); return consumer; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java index a9921f2..b551a79 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java @@ -25,7 +25,6 @@ public class GenericFormatImportResult { private TuttiProtocol protocol; - private GenericFormatReferentialImportResult<Gear, Integer> importedGears; private GenericFormatReferentialImportResult<Person, Integer> importedPersons; @@ -101,4 +100,5 @@ public class GenericFormatImportResult { public void setImportedVessels(GenericFormatReferentialImportResult<Vessel, String> importedVessels) { this.importedVessels = importedVessels; } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java index ee503f9..ff33d81 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java @@ -82,4 +82,5 @@ public class GenericFormatReferentialImportResult<E extends TuttiReferentialEnti return Collections.unmodifiableMap(mergeMap); } + } 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 661bc05..7956793 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 @@ -1,11 +1,19 @@ package fr.ifremer.tutti.service.genericformat.consumer; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryModel; import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryRow; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.csv.ImportRow; import java.nio.file.Path; +import java.util.Objects; + +import static org.nuiton.i18n.I18n.t; /** * Created on 2/11/15. @@ -19,4 +27,53 @@ public class CsvConsumerForSampleCategory extends CsvComsumer<SampleCategoryRow, super(file, SampleCategoryModel.forImport(separator, parserFactory)); } + public void checkRow(ImportRow<SampleCategoryRow> row, GenericFormatImportContext importContext) { + + if (row.isValid()) { + + int categoryIndex = (int) row.getLineNumber(); + 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.genericFormat.import.sampleCategoryModel.error.tooMuchCategories"))); + + } else { + + SampleCategoryRow bean = row.getBean(); + SampleCategoryModelEntry categoryEntry = sampleCategoryModel.getCategoryByIndex(categoryIndex); + + String code = bean.getCode(); + + if (StringUtils.isBlank(code)) { + + addCheckError(row, new IllegalStateException(t("tutti.genericFormat.import.sampleCategoryModel.error.noCode"))); + + } else { + + Caracteristic caracteristic = bean.getCaracteristic(); + if (caracteristic == null) { + + addCheckError(row, new IllegalStateException(t("tutti.genericFormat.import.sampleCategoryModel.error.noCaracteristic"))); + + } else if (!Objects.equals(categoryEntry.getCategoryId(), caracteristic.getIdAsInt())) { + + addCheckError(row, new IllegalStateException(t("tutti.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching", categoryEntry.getCategoryId(), caracteristic.getIdAsInt()))); + + } else if (!Objects.equals(categoryEntry.getCode(), code)) { + + addCheckError(row, new IllegalStateException(t("tutti.genericFormat.import.sampleCategoryModel.error.codeNotMatching", categoryEntry.getCode(), code))); + + } + } + } + + } + + reportError(row); + + } + } \ No newline at end of file diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index f2f5ef5..0b9aa3b 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -24,6 +24,12 @@ tutti.genericFormat.import.operations= tutti.genericFormat.import.parameters= tutti.genericFormat.import.protocol= tutti.genericFormat.import.sampleCategoryModel= +tutti.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching= +tutti.genericFormat.import.sampleCategoryModel.error.codeNotMatching= +tutti.genericFormat.import.sampleCategoryModel.error.missingCategories= +tutti.genericFormat.import.sampleCategoryModel.error.noCaracteristic= +tutti.genericFormat.import.sampleCategoryModel.error.noCode= +tutti.genericFormat.import.sampleCategoryModel.error.tooMuchCategories= tutti.genericFormat.import.temporaryGears= tutti.genericFormat.import.temporaryPersons= tutti.genericFormat.import.temporarySpecies= 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 bad7cf5..f7329ee 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 @@ -4,14 +4,14 @@ tutti.caracteristicType.LENGTH_STEP=Classes de tailles tutti.caracteristicType.VESSEL_USE_FEATURE=Autres caractéristiques tutti.caracteristicType.lengthStep= tutti.csv.import.error.on.field=Colonne %s \: %s -tutti.csv.import.error.on.row=Des erreurs ont été détectées à la ligne %s \: \n%s -tutti.error.messages=Erreurs :\n %s -tutti.fatal.messages=Erreurs critiques :\n %s +tutti.csv.import.error.on.row=Des erreurs ont été détectées à la ligne %s \:\n %s +tutti.error.messages=Erreurs \:\n %s +tutti.fatal.messages=Erreurs critiques \:\n %s tutti.genericFormat.import.accidentalCatches=Import des captures accidentelles tutti.genericFormat.import.catches=Import des captures tutti.genericFormat.import.cruises=Import des campagnes -tutti.genericFormat.import.error.cruiseAlreadyExist= -tutti.genericFormat.import.error.cruiseNotValid= +tutti.genericFormat.import.error.cruiseAlreadyExist=Il existe déjà une campagne avec ce nom %s +tutti.genericFormat.import.error.cruiseNotValid=La camapgne n'est pas valide :\n%s tutti.genericFormat.import.gearCaracteristics=Import des caractéristiques d'engin tutti.genericFormat.import.individualObservations=Import des observations individuelles tutti.genericFormat.import.marineLitters=Import des macro-déchets @@ -19,6 +19,12 @@ tutti.genericFormat.import.operations=Import des traits tutti.genericFormat.import.parameters=Import des paramètres de trait tutti.genericFormat.import.protocol=Import d'un nouveau protocol %s tutti.genericFormat.import.sampleCategoryModel=Import du modèle de catégorisation +tutti.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching=L'identifiant de la caractéristique devrait être %s, mais vaut %s +tutti.genericFormat.import.sampleCategoryModel.error.codeNotMatching=Le code devrait être %s, mais vaut %s +tutti.genericFormat.import.sampleCategoryModel.error.missingCategories=Il manque des catégories +tutti.genericFormat.import.sampleCategoryModel.error.noCaracteristic=La catactéristique est obligatoire +tutti.genericFormat.import.sampleCategoryModel.error.noCode=Le code est obligatoire +tutti.genericFormat.import.sampleCategoryModel.error.tooMuchCategories=Trop de catégorisation tutti.genericFormat.import.temporaryGears=Import des références temporaires d'engins tutti.genericFormat.import.temporaryPersons=Import des références temporaires de personnes tutti.genericFormat.import.temporarySpecies=Import des références temporaires de Taxons @@ -379,4 +385,4 @@ tutti.validator.warning.latitude.outOfBounds=La Latitude doit être comprise ent tutti.validator.warning.longitude.outOfBounds=La longitude doit être comprise entre -180.0 et 180.0 tutti.validator.warning.marineLitter.weight.required=Vous devez saisir la valeur du poids total des déchets<br/>ou le poids de chacune des catégories observées. tutti.validator.warning.species.protocolNotRespected=Espèces - le lot de %s / %s ne suit pas les recommandations du protocole -tutti.warning.messages=Avertissements :\n %s +tutti.warning.messages=Avertissements \:\n %s -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.