This is an automated email from the git hooks/post-receive script. New commit to branch feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit 91e36e3cfece8094fceaefe7e55ca551e9392b9c Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Mar 2 08:51:33 2015 +0100 continue import validation + add more tests on it --- .../genericformat/GenericFormatImportService.java | 235 +++++++++++----- .../ftl/genericFormatValidateReport_fr.ftl | 247 +++++++++++------ .../resources/i18n/tutti-service_fr_FR.properties | 11 +- .../GenericFormatImportServiceValidTest.java | 303 +++++++++++++++++---- .../badProtocolFormat/protocol.tuttiProtocol | 81 ++++++ .../badProtocolImport/protocol.tuttiProtocol | 81 ++++++ .../genericFormat/badSurveyFormat/survey.csv | 2 + .../genericFormat/badSurveyImport/survey.csv | 2 + .../temporaryPersons.csv | 4 + .../temporaryPersons.csv | 6 + .../temporarySpecies.csv | 9 + .../temporarySpecies.csv | 13 + .../temporaryVessels.csv | 5 + .../temporaryVessels.csv | 9 + 14 files changed, 798 insertions(+), 210 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java index 88a22d2..8b4b3f4 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java @@ -54,6 +54,7 @@ import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.File; import java.io.IOException; import java.util.LinkedHashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -215,13 +216,13 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { File reportFile = result.getReportFile(); - progressionModel.increments(t("tutti.service.genericFormat.validate.computeReport", reportFile)); + progressionModel.increments(t("tutti.service.genericFormat.validate.computeReport")); pdfGeneratorService.generatePdf(reportFile, context.getConfig().getI18nLocale(), "genericFormatValidateReport.ftl", result); } - protected void validateArchiveLayout(GenericFormatValidateFileContext importContext) { + protected void validateArchiveLayout(GenericFormatImportContext importContext) { try { importContext.getImportRequest().getArchive().validateArchiveLayout(); @@ -248,14 +249,18 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { importTemporaryVessels(importContext, false); importProtocol(importContext); - validateCruises(importContext); - validateGearCaracteristics(importContext); - validateOperations(importContext); - validateParameters(importContext); - validateCatches(importContext); - validateMarineLitters(importContext); - validateIndividualObservations(importContext); - validateAccidentalCatches(importContext); + if (importContext.isTechnicalFilesValid()) { + + validateCruises(importContext); + validateGearCaracteristics(importContext); + validateOperations(importContext); + validateParameters(importContext); + validateCatches(importContext); + validateMarineLitters(importContext); + validateIndividualObservations(importContext); + validateAccidentalCatches(importContext); + + } } @@ -270,26 +275,36 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { try (GenericFormatImportContext importContext = new GenericFormatImportContext(request, progressionModel, persistenceService, cruiseDecorator, fishingOperationDecorator)) { - GenericformatImportPersitenceHelper persitenceHelper = new GenericformatImportPersitenceHelper(importContext, persistenceService, cruiseDecorator, fishingOperationDecorator); + validateArchiveLayout(importContext); + + if (importContext.isArchiveLayoutValid()) { + + GenericformatImportPersitenceHelper persitenceHelper = new GenericformatImportPersitenceHelper(importContext, persistenceService, cruiseDecorator, fishingOperationDecorator); + + checkSampleCategoryModel(importContext); + importTemporaryGears(importContext, true); + importTemporaryPersons(importContext, true); + importTemporarySpecies(importContext, true); + importTemporaryVessels(importContext, true); + importProtocol(importContext); + + if (importContext.isTechnicalFilesValid()) { + + importCruises(importContext, persitenceHelper); + importGearCaracteristics(importContext, persitenceHelper); + importOperations(importContext, persitenceHelper); + importParameters(importContext, persitenceHelper); + importCatches(importContext, persitenceHelper); + importMarineLitters(importContext, persitenceHelper); + importIndividualObservations(importContext, persitenceHelper); + importAccidentalCatches(importContext, persitenceHelper); - checkSampleCategoryModel(importContext); - importTemporaryGears(importContext, true); - importTemporaryPersons(importContext, true); - importTemporarySpecies(importContext, true); - importTemporaryVessels(importContext, true); - importProtocol(importContext); + doCleanWeights(importContext); + doCheckWeights(importContext); - importCruises(importContext, persitenceHelper); - importGearCaracteristics(importContext, persitenceHelper); - importOperations(importContext, persitenceHelper); - importParameters(importContext, persitenceHelper); - importCatches(importContext, persitenceHelper); - importMarineLitters(importContext, persitenceHelper); - importIndividualObservations(importContext, persitenceHelper); - importAccidentalCatches(importContext, persitenceHelper); + } - doCleanWeights(importContext); - doCheckWeights(importContext); + } GenericFormatImportResult result = new GenericFormatImportResult(importContext); return result; @@ -348,7 +363,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } importContext.increments(t("tutti.service.genericFormat.import.sampleCategoryModel")); - GenericFormatFileResult importFileResult = importContext.getSampleCategoryFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getSampleCategoryFileResult(); try (CsvConsumerForSampleCategory consumer = importContext.loadSampleCategories(false)) { int nbCategories = 0; @@ -405,12 +420,23 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } - ReferentialImportResult<Gear> referentialImportResult = referentialTemporaryGearService.executeImportRequest(referentialImportRequest); - importFileResult.flushResult(referentialImportRequest, referentialImportResult); - if (log.isInfoEnabled()) { - log.info("Temporary gears import result: " + importFileResult.getReport()); + if (importFileResult.isValid()) { + + ReferentialImportResult<Gear> referentialImportResult = referentialTemporaryGearService.executeImportRequest(referentialImportRequest); + importFileResult.flushResult(referentialImportRequest, referentialImportResult); + if (log.isInfoEnabled()) { + log.info("Temporary gears import result: " + importFileResult.getReport()); + } + + } else { + + if (log.isWarnEnabled()) { + log.warn("Do not import temporary gears (the incoming file is not valid)"); + } + } + } else { if (log.isInfoEnabled()) { @@ -449,12 +475,21 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } - ReferentialImportResult<Person> referentialImportResult = referentialTemporaryPersonService.executeImportRequest(referentialImportRequest); - importFileResult.flushResult(referentialImportRequest, referentialImportResult); - if (log.isInfoEnabled()) { - log.info("Temporary persons import result: " + importFileResult.getReport()); - } + if (importFileResult.isValid()) { + ReferentialImportResult<Person> referentialImportResult = referentialTemporaryPersonService.executeImportRequest(referentialImportRequest); + importFileResult.flushResult(referentialImportRequest, referentialImportResult); + if (log.isInfoEnabled()) { + log.info("Temporary persons import result: " + importFileResult.getReport()); + } + + } else { + + if (log.isWarnEnabled()) { + log.warn("Do not import temporary persons (the incoming file is not valid)"); + } + + } } else { if (log.isInfoEnabled()) { @@ -494,12 +529,23 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } - ReferentialImportResult<Species> referentialImportResult = referentialTemporarySpeciesService.executeImportRequest(referentialImportRequest); - importFileResult.flushResult(referentialImportRequest, referentialImportResult); + if (importFileResult.isValid()) { + + ReferentialImportResult<Species> referentialImportResult = referentialTemporarySpeciesService.executeImportRequest(referentialImportRequest); + importFileResult.flushResult(referentialImportRequest, referentialImportResult); + + if (log.isInfoEnabled()) { + log.info("Temporary species import result: " + importFileResult.getReport()); + } + + } else { + + if (log.isWarnEnabled()) { + log.warn("Do not import temporary species (the incoming file is not valid)"); + } - if (log.isInfoEnabled()) { - log.info("Temporary species import result: " + importFileResult.getReport()); } + } else { if (log.isInfoEnabled()) { @@ -539,11 +585,21 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } - ReferentialImportResult<Vessel> referentialImportResult = referentialTemporaryVesselService.executeImportRequest(referentialImportRequest); - importFileResult.flushResult(referentialImportRequest, referentialImportResult); + if (importFileResult.isValid()) { + + ReferentialImportResult<Vessel> referentialImportResult = referentialTemporaryVesselService.executeImportRequest(referentialImportRequest); + importFileResult.flushResult(referentialImportRequest, referentialImportResult); + + if (log.isInfoEnabled()) { + log.info("Temporary vessels import result: " + importFileResult.getReport()); + } + + } else { + + if (log.isWarnEnabled()) { + log.warn("Do not import temporary vessels (the incoming file is not valid)"); + } - if (log.isInfoEnabled()) { - log.info("Temporary vessels import result: " + importFileResult.getReport()); } } else { @@ -564,21 +620,60 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { if (log.isInfoEnabled()) { log.info("Import protocol."); } + GenericFormatFileResult fileResult = importContext.getProtocolFileResult(); + fileResult.setImported(true); + + try { + + TuttiProtocol tuttiProtocol = protocolImportExportService.importProtocol(archive.getProtocolPath().toFile()); + + Map<String, String> idTranslationMap = importContext.getReferentialTemporarySpeciesFileResult().getIdTranslationMap(); + TuttiProtocols.translateReferenceTaxonIds(tuttiProtocol, idTranslationMap); - TuttiProtocol tuttiProtocol = protocolImportExportService.importProtocol(archive.getProtocolPath().toFile()); + String newName = persistenceService.getFirstAvailableName(tuttiProtocol.getName()); + tuttiProtocol.setName(newName); - Map<String, String> idTranslationMap = importContext.getReferentialTemporarySpeciesFileResult().getIdTranslationMap(); - TuttiProtocols.translateReferenceTaxonIds(tuttiProtocol, idTranslationMap); + List<Species> referentSpecies = persistenceService.getAllReferentSpecies(); - String newName = persistenceService.getFirstAvailableName(tuttiProtocol.getName()); - tuttiProtocol.setName(newName); + // Check missing species + Map<Integer, String> missingSpecies = TuttiProtocols.detectMissingSpecies(tuttiProtocol, referentSpecies); + if (!missingSpecies.isEmpty()) { - importContext.increments(t("tutti.service.genericFormat.import.protocol", tuttiProtocol.getName())); + String message = TuttiProtocols.getBadSpeciesMessage(missingSpecies); + fileResult.addGlobalError(message); + } + + // Check missing benthos + Map<Integer, String> missingBenthos = TuttiProtocols.detectMissingBenthos(tuttiProtocol, referentSpecies); + if (!missingBenthos.isEmpty()) { + + String message = TuttiProtocols.getBadBenthosMessage(missingBenthos); + fileResult.addGlobalError(message); + + } + + // TODO Check lenghtClassPmfm ? + + if (fileResult.isValid()) { + + importContext.increments(t("tutti.service.genericFormat.import.protocol", tuttiProtocol.getName())); - tuttiProtocol = persistenceService.createProtocol(tuttiProtocol); - persistenceService.setProtocol(tuttiProtocol); + tuttiProtocol = persistenceService.createProtocol(tuttiProtocol); + persistenceService.setProtocol(tuttiProtocol); - importContext.setImportedProtocol(tuttiProtocol); + importContext.setImportedProtocol(tuttiProtocol); + + } else { + + importContext.increments(t("tutti.service.genericFormat.import.protocol.notValid", tuttiProtocol.getName())); + + } + + } catch (ApplicationTechnicalException e) { + + fileResult.addGlobalError(e.getCause().getMessage()); + + } } else { @@ -598,7 +693,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Validate survey.csv file."); } - GenericFormatFileResult importFileResult = importContext.getSurveyFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getSurveyFileResult(); try (CsvConsumerForSurvey consumer = importContext.loadSurveys(false)) { for (ImportRow<SurveyRow> row : consumer) { @@ -632,7 +727,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Validate gearCaracteristics.csv file."); } - GenericFormatFileResult importFileResult = importContext.getGearCaracteristicFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getGearCaracteristicFileResult(); try (CsvConsumerForGearCaracteristic consumer = importContext.loadGearCaracteristics(false)) { for (ImportRow<GearCaracteristicRow> row : consumer) { @@ -661,7 +756,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Validate operation.csv file."); } - GenericFormatFileResult importFileResult = importContext.getOperationFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getOperationFileResult(); try (CsvConsumerForOperation consumer = importContext.loadOperations(false)) { for (ImportRow<OperationRow> row : consumer) { @@ -697,7 +792,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Validate parameter.csv file."); } - GenericFormatFileResult importFileResult = importContext.getParameterFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getParameterFileResult(); try (CsvConsumerForParameter consumer = importContext.loadParameters(false)) { for (ImportRow<ParameterRow> row : consumer) { @@ -726,7 +821,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Validate catch.csv file."); } - GenericFormatFileResult importFileResult = importContext.getCatchFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getCatchFileResult(); try (CsvConsumerForCatch consumer = importContext.loadCatches(false)) { for (ImportRow<CatchRow> row : consumer) { @@ -755,7 +850,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Validate marineLitter.csv file."); } - GenericFormatFileResult importFileResult = importContext.getMarineLitterFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getMarineLitterFileResult(); try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters(false)) { for (ImportRow<MarineLitterRow> row : consumer) { @@ -784,7 +879,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Validate individualObservation.csv file."); } - GenericFormatFileResult importFileResult = importContext.getIndividualObservationFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getIndividualObservationFileResult(); try (CsvConsumerForIndividualObservation consumer = importContext.loadIndividualObservations(false)) { for (ImportRow<IndividualObservationRow> row : consumer) { @@ -813,7 +908,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Validate accidentalCatch.csv file."); } - GenericFormatFileResult importFileResult = importContext.getAccidentalCatchFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getAccidentalCatchFileResult(); try (CsvConsumerForAccidentalCatch consumer = importContext.loadAccidentalCatches(false)) { for (ImportRow<AccidentalCatchRow> row : consumer) { @@ -842,7 +937,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Import survey.csv file."); } importContext.increments(t("tutti.service.genericFormat.import.cruises")); - GenericFormatFileResult importFileResult = importContext.getSurveyFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getSurveyFileResult(); try (CsvConsumerForSurvey consumer = importContext.loadSurveys(true)) { for (ImportRow<SurveyRow> row : consumer) { @@ -868,7 +963,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Import gearCaracteristics.csv file."); } importContext.increments(t("tutti.service.genericFormat.import.gearCaracteristics")); - GenericFormatFileResult importFileResult = importContext.getGearCaracteristicFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getGearCaracteristicFileResult(); try (CsvConsumerForGearCaracteristic consumer = importContext.loadGearCaracteristics(true)) { for (ImportRow<GearCaracteristicRow> row : consumer) { @@ -894,7 +989,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Import operation.csv file."); } importContext.increments(t("tutti.service.genericFormat.import.operations")); - GenericFormatFileResult importFileResult = importContext.getOperationFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getOperationFileResult(); try (CsvConsumerForOperation consumer = importContext.loadOperations(true)) { for (ImportRow<OperationRow> row : consumer) { @@ -925,7 +1020,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Import parameter.csv file."); } importContext.increments(t("tutti.service.genericFormat.import.parameters")); - GenericFormatFileResult importFileResult = importContext.getParameterFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getParameterFileResult(); try (CsvConsumerForParameter consumer = importContext.loadParameters(true)) { for (ImportRow<ParameterRow> row : consumer) { @@ -951,7 +1046,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Import catch.csv file."); } importContext.increments(t("tutti.service.genericFormat.import.catches")); - GenericFormatFileResult importFileResult = importContext.getCatchFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getCatchFileResult(); try (CsvConsumerForCatch consumer = importContext.loadCatches(true)) { for (ImportRow<CatchRow> row : consumer) { @@ -978,7 +1073,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Import marineLitter.csv file."); } importContext.increments(t("tutti.service.genericFormat.import.marineLitters")); - GenericFormatFileResult importFileResult = importContext.getMarineLitterFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getMarineLitterFileResult(); try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters(true)) { for (ImportRow<MarineLitterRow> row : consumer) { @@ -1004,7 +1099,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Import individualObservation.csv file."); } importContext.increments(t("tutti.service.genericFormat.import.individualObservations")); - GenericFormatFileResult importFileResult = importContext.getIndividualObservationFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getIndividualObservationFileResult(); try (CsvConsumerForIndividualObservation consumer = importContext.loadIndividualObservations(true)) { for (ImportRow<IndividualObservationRow> row : consumer) { @@ -1030,7 +1125,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { log.info("Import accidentalCatch.csv file."); } importContext.increments(t("tutti.service.genericFormat.import.accidentalCatches")); - GenericFormatFileResult importFileResult = importContext.getAccidentalCatchFileResult(); + GenericFormatCsvFileResult importFileResult = importContext.getAccidentalCatchFileResult(); try (CsvConsumerForAccidentalCatch consumer = importContext.loadAccidentalCatches(true)) { for (ImportRow<AccidentalCatchRow> row : consumer) { diff --git a/tutti-service/src/main/resources/ftl/genericFormatValidateReport_fr.ftl b/tutti-service/src/main/resources/ftl/genericFormatValidateReport_fr.ftl index 672289f..13b12c4 100644 --- a/tutti-service/src/main/resources/ftl/genericFormatValidateReport_fr.ftl +++ b/tutti-service/src/main/resources/ftl/genericFormatValidateReport_fr.ftl @@ -30,17 +30,41 @@ <tr> <td>${entry.key}</td> <td> - <pre class="error"> + <ul> <#list entry.value as error> - ${error} - </#list> - </pre> + <li class="error"> + ${error} + </li> + </#list> + </ul> </td> </tr> </#list> </table> </#macro> +<#macro renderSimpleImportFile fileResult> + <#assign errorsEntries = fileResult.errorsEntries> +<ul> + <li>Nom du fichier : <span class="bold">${fileResult.filename}</span></li> + <#if !fileResult.imported> + <li class="error">Fichier non importé</li> + </ul> + <#return> + </#if> + <#if !fileResult.valid> + <li class="error">Fichier non valide</li> + </#if> + <#if errorsEntries?size != 0> + <li class="error">Nombre de lignes en erreurs : ${errorsEntries?size}</li> + </#if> +</ul> + <#if errorsEntries?size == 0> + <#return> + </#if> + <@renderErrors errorsEntries=errorsEntries/> +</#macro> + <#macro renderImportFile fileResult> <#assign errorsEntries = fileResult.errorsEntries> <ul> @@ -51,6 +75,9 @@ <#return> </#if> <li>Nombre de lignes à importer : ${fileResult.linesCount}</li> + <#if !fileResult.valid> + <li class="error">Fichier non valide</li> + </#if> <#if errorsEntries?size != 0> <li class="error">Nombre de lignes en erreurs : ${errorsEntries?size}</li> </#if> @@ -66,13 +93,17 @@ <ul> <li>Nom du fichier : <span class="bold">${fileResult.filename}</span></li> <#if !fileResult.imported> - <li class="error">Fichier non importé</li> + <li>Fichier non importé</li> </ul> <#return> </#if> <li>Nombre de lignes à importer : ${fileResult.linesCount}</li> -<li>Nombre de lignes importées : ${fileResult.entitiesAddedEntries?size}</li> -<li>Nombre de lignes associées : ${fileResult.entitiesLinkedEntries?size}</li> + <#if fileResult.valid> + <li>Nombre de lignes importées : ${fileResult.entitiesAddedEntries?size}</li> + <li>Nombre de lignes associées : ${fileResult.entitiesLinkedEntries?size}</li> + <#else> + <li class="error">Fichier non valide</li> + </#if> <#if errorsEntries?size != 0> <li class="error">Nombre de lignes en erreurs : ${errorsEntries?size}</li> </#if> @@ -190,12 +221,31 @@ size: A4 landscape; } + .center { + text-align: center; + } + h1 { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKEAAAAeCAYAAABEzX4WAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gsYESwznZhaYQAAC8VJREFUeNrtnHmQHPV1xz+vu+fanZm9b2l1YFlCSGBkkI3DYQpwqrI7rFwuK44ph8QmcQyuUCQYl3EO4xg7wQaDBSZCMahQIiiBjXZWoiiIywIZZbkMiAAxhyWxOliJPbTH3N0vf/x6tKPdjQMY5BGaV9PVU7/+Xb2/7+/73vd1zwrHmW3ZsoXu7m6SyeRFIhIHxgBUNSsiu4GDIpLv7u52i20eeeQRLrroonc95ubNm1m1ahUVe39MjkMQ1qtqN3CBqp4sIiuAw0BaVV8BBkTkGeBRVd0nIqOJRKKQTCarLMuyuru7JwCSyWRMRCw [...] width: 100%; text-align: center; } + .valid { + width: 100px; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLvZPZLkNhFIV75zjvYm7VGFNCqoZUJ+roKUUpjRuqp61Wq0NKDMelGGqOxBSUIBKXWtWGZxAvobr8lWjChRgSF//dv9be+9trCwAI/vIE/26gXmviW5bqnb8yUK028qZjPfoPWEj4Ku5HBspgAz941IXZeze8N1bottSo8BTZviVWrEh546EO03EXpuJOdG63otJbjBKHkEp/Ml6yNYYzpuezWL4s5VMtT8acCMQcb5XL3eJE8VgBlR7BeMGW9Z4yT9y1CeyucuhdTGDxfftaBO7G4L+zg91UocxVmCiy51NpiP3n2treUPujL8x [...] + } + + .notValid { + width: 100px; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHdSURBVDjLpZNraxpBFIb3a0ggISmmNISWXmOboKihxpgUNGWNSpvaS6RpKL3Ry//Mh1wgf6PElaCyzq67O09nVjdVlJbSDy8Lw77PmfecMwZg/I/GDw3DCo8HCkZl/RlgGA0e3Yfv7+DbAfLrW+SXOvLTG+SHV/gPbuMZRnsyIDL/OASziMxkkKkUQTJJsLaGn8/iHz6nd+8mQv87Ahg2H9Th/BxZqxEkEgSrq/iVCvLsDK9awtvfxb2zjD2ARID+lVVlbabTgWYTv1rFL5fBUtHbbeTJCb3EQ3ovCnRC6xAgzJtOE+ztheYIEkqbFaS3vY2 [...] + } + + .unkwon { + width: 100px; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BPaK3matVqndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjhVbPt6o01nMvZWge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOmPfaZArWT5sw60iFP+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36IxpyoH1lHF7EBgyMKV4jCJ5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRIrVCuhmD3JdA [...] + } + .bold { font-weight: bold; } @@ -227,7 +277,7 @@ } td, th { - padding: 1pt 5pt; + /*padding: 1pt 5pt;*/ border-left: 1px solid #ccc; border-right: 1px solid #ccc; } @@ -240,177 +290,214 @@ background: #fff; } + .nextPage { + page-break-after: always; + } + </style> </head> <body> <h1>Rapport de validation avant import générique</h1> -<h2>Méta-données</h2> +<h2>Informations générales</h2> <ul> - <li>Fichier: ${importConfiguration.importFile.name}</li> + <li>Fichier : ${importConfiguration.importFile.name}</li> <li>Date - heure : ${startingDate?date?string.full} ${startingDate?time?string.short}</li> <li>Série de campagne: ${program.name}</li> </ul> -<h2>Format de l'archive</h2> - -<#if archiveLayoutValid> -<p>Le format de l'archive est correcte.</p> - -<p>Liste des fichiers à valider:</p> -<ul> - <#list archiveFiles as file> - <li>${file}</li> - </#list> -</ul> -<#else> -<p>Le format de l'archive n'est pas valide.</p> +<#macro renderImportFileResult fileResult anchorName> +<tr> + <td>${fileResult.filename}</td> + <td>${fileResult.mandatory?string('Oui', 'Non')}</td> + <#if fileResult.found> + <td class="valid"></td> + <#if fileResult.imported> + <td class="valid"></td> + <#if fileResult.valid> + <td class="valid"></td> + <#else> + <td class="notValid"></td> + </#if> + <#else> + <td class="notValid"></td> + <td class="unkwon"></td> + </#if> + <#else> + <td class="notValid"></td> + <td class="unkwon"></td> + <td class="unkwon"></td> + </#if> + <td><a href="#${anchorName}">Détails</a></td> +</tr> +</#macro> -<p>Liste des erreurs détectées:</p> -<ul> - <#list archiveLayoutErrors as error> - <li class="error">${error}</li> - </#list> -</ul> -</#if> +<table align="center"> + <thead> + <tr> + <th>Fichier</th> + <th>Obligatoire</th> + <th>Présent</th> + <th>Importé</th> + <th>Valide</th> + <th>Détail</th> + </tr> + </thead> + <tbody> + <@renderImportFileResult fileResult=sampleCategoryFileResult anchorName="sampleCategoryFileResult"/> + <@renderImportFileResult fileResult=referentialTemporaryGearFileResult anchorName="referentialTemporaryGearFileResult"/> + <@renderImportFileResult fileResult=referentialTemporaryPersonFileResult anchorName="referentialTemporaryPersonFileResult"/> + <@renderImportFileResult fileResult=referentialTemporarySpeciesFileResult anchorName="referentialTemporarySpeciesFileResult"/> + <@renderImportFileResult fileResult=referentialTemporaryVesselFileResult anchorName="referentialTemporaryVesselFileResult"/> + <@renderImportFileResult fileResult=protocolFileResult anchorName="protocolFileResult"/> + <@renderImportFileResult fileResult=surveyFileResult anchorName="surveyFileResult"/> + <@renderImportFileResult fileResult=gearCaracteristicFileResult anchorName="gearCaracteristicFileResult"/> + <@renderImportFileResult fileResult=operationFileResult anchorName="operationFileResult"/> + <@renderImportFileResult fileResult=parameterFileResult anchorName="parameterFileResult"/> + <@renderImportFileResult fileResult=catchFileResult anchorName="catchFileResult"/> + <@renderImportFileResult fileResult=marineLitterFileResult anchorName="marineLitterFileResult"/> + <@renderImportFileResult fileResult=accidentalCatchFileResult anchorName="accidentalCatchFileResult"/> + <@renderImportFileResult fileResult=individualObservationFileResult anchorName="individualObservationFileResult"/> + </tbody> +</table> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Modèle de catégorisation</h2> -<#assign fileResult = sampleCategoryFileResult> -<@renderImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0> -<p>Le modèle de catégorisation est valide.</p> -</#if> +<h2>Modèle de catégorisation <a name="sampleCategoryFileResult"></a></h2> +<@renderImportFile fileResult=sampleCategoryFileResult/> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Référentiel temporaire Engin</h2> +<h2>Référentiel temporaire Engin <a name="referentialTemporaryGearFileResult"></a></h2> <#assign fileResult = referentialTemporaryGearFileResult> <@renderReferentialImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0> +<#if fileResult.imported && fileResult.valid> <p>Des engins temporaires ont été importés.</p> <@renderReferentialGearList title="Engins ajoutés" entries=fileResult.entitiesAddedEntries/> <@renderReferentialGearList title="Engins associés" entries=fileResult.entitiesLinkedEntries/> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage" style="width: 100%"></h2> -<h2>Référentiel temporaire Personne</h2> +<h2>Référentiel temporaire Personne <a name="referentialTemporaryPersonFileResult"></a></h2> <#assign fileResult = referentialTemporaryPersonFileResult> <@renderReferentialImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0><p>Des personnes temporaires ont été importées.</p> +<#if fileResult.imported && fileResult.valid> +<p>Des personnes temporaires ont été importées.</p> <@renderReferentialPersonList title="Personnes ajoutées" entries=fileResult.entitiesAddedEntries/> <@renderReferentialPersonList title="Personnes associées" entries=fileResult.entitiesLinkedEntries/> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Référentiel temporaire Espèce</h2> +<h2>Référentiel temporaire Taxon <a name="referentialTemporarySpeciesFileResult"></a></h2> <#assign fileResult = referentialTemporarySpeciesFileResult> <@renderReferentialImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0><p>Des espèces temporaires ont été importées.</p> - <@renderReferentialSpeciesList title="Espèces ajoutées" entries=fileResult.entitiesAddedEntries/> - <@renderReferentialSpeciesList title="Espèces associées" entries=fileResult.entitiesLinkedEntries/> +<#if fileResult.imported && fileResult.valid> +<p>Des taxons temporaires ont été importées.</p> + <@renderReferentialSpeciesList title="Taxons ajoutés" entries=fileResult.entitiesAddedEntries/> + <@renderReferentialSpeciesList title="Taxons associés" entries=fileResult.entitiesLinkedEntries/> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Référentiel temporaire Navire</h2> +<h2>Référentiel temporaire Navire <a name="referentialTemporaryVesselFileResult"></a></h2> <#assign fileResult = referentialTemporaryVesselFileResult> <@renderReferentialImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0><p>Des navires temporaires ont été importés.</p> +<#if fileResult.imported && fileResult.valid> +<p>Des navires temporaires ont été importés.</p> <@renderReferentialVesselList title="Navires ajoutés" entries=fileResult.entitiesAddedEntries/> <@renderReferentialVesselList title="Navires associés" entries=fileResult.entitiesLinkedEntries/> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> + +<h2>Protocole <a name="protocolFileResult"></a></h2> +<#assign fileResult = protocolFileResult> +<@renderSimpleImportFile fileResult=fileResult/> -<h2>Protocole</h2> -<#if protocolImported> +<#if fileResult.valid> <p>Un protocol nommé ${protocol.name} a été importé et sélectionné pour l'import.</p> -<#else> -<p>Pas de protocole utilisé.</p> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Fichier des campagnes</h2> +<h2>Fichier des campagnes <a name="surveyFileResult"></a></h2> <#assign fileResult = surveyFileResult> <@renderImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0> +<#if fileResult.valid> <p>Des campagnes ont été validées.</p> <strong>TODO</strong> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Fichier des mises en oeuvre d'engin</h2> +<h2>Fichier des mises en oeuvre d'engin <a name="gearCaracteristicFileResult"></a></h2> <#assign fileResult = gearCaracteristicFileResult> <@renderImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0> +<#if fileResult.valid> <p>Des mises en oeuvre d'engin ont été validées.</p> <strong>TODO</strong> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Fichier des traits</h2> +<h2>Fichier des traits <a name="operationFileResult"></a></h2> <#assign fileResult = operationFileResult> <@renderImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0> +<#if fileResult.valid> <p>Des traits ont été validés.</p> <strong>TODO</strong> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Fichier des caractéristiques de trait</h2> +<h2>Fichier des caractéristiques de trait <a name="parameterFileResult"></a></h2> <#assign fileResult = parameterFileResult> <@renderImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0> +<#if fileResult.valid> <p>Des caractéristiques de trait ont été validées.</p> <strong>TODO</strong> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Fichier des lôts capture</h2> +<h2>Fichier des lôts capture <a name="catchFileResult"></a></h2> <#assign fileResult = catchFileResult> <@renderImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0> +<#if fileResult.valid> <p>Des lôts capture ont été validées.</p> <strong>TODO</strong> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Fichier des macro déchets</h2> +<h2>Fichier des macro déchets <a name="marineLitterFileResult"></a></h2> <#assign fileResult = marineLitterFileResult> <@renderImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0> +<#if fileResult.valid> <p>Des macro déchets ont été validés.</p> <strong>TODO</strong> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Fichier des captures accidentelles</h2> +<h2>Fichier des captures accidentelles <a name="accidentalCatchFileResult"></a></h2> <#assign fileResult = accidentalCatchFileResult> <@renderImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0> +<#if fileResult.valid> <p>Des captures accidentelles ont été validées.</p> <strong>TODO</strong> </#if> -<h2 style="page-break-after:always"/> +<h2 class="nextPage"></h2> -<h2>Fichier des observations individuelles</h2> +<h2>Fichier des observations individuelles <a name="individualObservationFileResult"></a></h2> <#assign fileResult = individualObservationFileResult> <@renderImportFile fileResult=fileResult/> -<#if fileResult.linesCount != 0> +<#if fileResult.valid> <p>Des observations individuelles ont été validées.</p> <strong>TODO</strong> </#if> 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 9c131a6..4053ecf 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 @@ -11,6 +11,14 @@ tutti.io.mkDir.error=Erreur à la création du dossier %s tutti.pdf.export.missing.species.code=Une espèce (referenceId %s, nom scientifique %s) n'a ni code campagne, ni code refTax. tutti.property.attachment=Pièce jointe tutti.property.caracteristic=Caractéristique +tutti.service.referential.import.gear.error.name.alreaydAdded=Un engin a déjà été importé avec ce nom %s +tutti.service.referential.import.gear.error.id.alreaydAdded=Un engin a déjà été importé avec cet identifiant %s +tutti.service.referential.import.person.error.id.alreaydAdded=Une personne a déjà été importée avec cet identifiant %s +tutti.service.referential.import.person.error.name.alreaydAdded=Une personne a déjà été importée avec ce prénom - nom %s +tutti.service.referential.import.species.error.name.alreaydAdded=Un taxon a déjà été importé avec ce nom %s +tutti.service.referential.import.species.error.id.alreaydAdded=Un taxon a déjà été importé avec cet identifiant %s +tutti.service.referential.import.vessel.error.id.alreaydAdded=Un navire a déjà été importé avec cet identifiant %s +tutti.service.referential.import.vessel.error.name.alreaydAdded=Un navire a déjà été importé avec cette immatriculation %s tutti.property.country=Pays tutti.property.cruise=Campagne tutti.property.date=Date @@ -149,6 +157,7 @@ tutti.service.genericFormat.import.marineLitters=Import des macro-déchets tutti.service.genericFormat.import.operations=Import des traits tutti.service.genericFormat.import.parameters=Import des paramètres de trait tutti.service.genericFormat.import.protocol=Import d'un nouveau protocol %s +tutti.service.genericFormat.import.protocol.notValid=Import d'un nouveau protocol %s annulé (protocol non valide) 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 @@ -179,7 +188,7 @@ tutti.service.genericFormat.reuse.protocol=Réutilisation du protocol existant % tutti.service.genericFormat.skip.import.protocol=Pas de protocole à importer tutti.service.genericFormat.validate.accidentalCatches=Validation du fichier <strong>accidentalCatch.csv</strong> - ligne %s tutti.service.genericFormat.validate.catches=Validation du fichier <strong>catch.csv</strong> - ligne %s -tutti.service.genericFormat.validate.computeReport= +tutti.service.genericFormat.validate.computeReport=Générigation du rapport de validation tutti.service.genericFormat.validate.cruises=Validation du fichier <strong>survey.csv</strong> - ligne %s tutti.service.genericFormat.validate.gearCaracteristics=Validation du fichier <strong>gearCaracteristic.csv</strong> - ligne %s tutti.service.genericFormat.validate.individualObservations=Validation du fichier <strong>individualObservation.csv</strong> - ligne %s diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceValidTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceValidTest.java index 5734516..875dbd6 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceValidTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceValidTest.java @@ -1,115 +1,300 @@ package fr.ifremer.tutti.service.genericformat; +import com.google.common.base.Joiner; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.service.ServiceDbResource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.junit.AfterClass; import org.junit.Assert; -import org.junit.Rule; +import org.junit.ClassRule; import org.junit.Test; import java.io.File; import java.io.IOException; +import java.util.HashSet; +import java.util.Set; /** * Created on 2/26/15. * * @author Tony Chemit - chemit@codelutin.com - * @since XXX + * @since 3.14 */ public class GenericFormatImportServiceValidTest extends GenericFormatImportServiceTestSupport { /** Logger. */ private static final Log log = LogFactory.getLog(GenericFormatImportServiceTest.class); - @Rule - public final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbGenericFormatImport"); + @ClassRule + public static final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbGenericFormatImport"); + + private final static Set<String> builder = new HashSet<>(); @Override protected ServiceDbResource getServiceDbResource() { return dbResource; } - @Test - public void testValidateLimitCases() throws IOException { + @AfterClass + public static void afterClass() throws Exception { dbResource.setDestroyResources(false); - ServiceDbResource.DataContext dataContext = getServiceDbResource().loadContext(PROGRAM_ID); + if (log.isInfoEnabled()) { + log.info("Report files:\n" + Joiner.on("\n").join(builder)); + } + + } - StringBuilder builder = new StringBuilder(); + @Test + public void testArchiveLayoutNotValid() throws IOException { + + GenericFormatValidateFileResult result = doValidate("ArchiveLayoutNotValid", PROGRAM_ID); + Assert.assertFalse(result.isArchiveLayoutValid()); + Assert.assertFalse(result.isValid()); + Assert.assertFalse(result.getSampleCategoryFileResult().isImported()); + Assert.assertFalse(result.getSampleCategoryFileResult().isValid()); + Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryPersonFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporarySpeciesFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryVesselFileResult().isImported()); - String programId = dataContext.program.getId(); + } - // missing files in archive - { + @Test + public void testBadSampleCategoryFormat() throws IOException { + + GenericFormatValidateFileResult result = doValidate("badSampleCategoryFormat", PROGRAM_ID, + "empty", "badSampleCategoryFormat"); + Assert.assertTrue(result.isArchiveLayoutValid()); + Assert.assertFalse(result.isValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertFalse(result.getSampleCategoryFileResult().isValid()); + Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryPersonFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporarySpeciesFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryVesselFileResult().isImported()); - GenericFormatValidateFileResult result = doValidate(builder, "ArchiveLayoutNotValid", programId); - Assert.assertFalse(result.isArchiveLayoutValid()); - Assert.assertFalse(result.getSampleCategoryFileResult().isImported()); -// Assert.assertFalse(result.getSampleCategoryFileResult().isValid()); - Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isImported()); -// Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isValid()); + } - } + @Test + public void testSampleCategoryMismatch() throws IOException { + + GenericFormatValidateFileResult result = doValidate("sampleCategoryMismatch", PROGRAM_ID, + "empty", "sampleCategoryFormatMismatch"); + Assert.assertTrue(result.isArchiveLayoutValid()); + Assert.assertFalse(result.isValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertFalse(result.getSampleCategoryFileResult().isValid()); + Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryPersonFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporarySpeciesFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryVesselFileResult().isImported()); + + Assert.assertFalse(result.getProtocolFileResult().isImported()); + Assert.assertTrue(result.getProtocolFileResult().isValid()); - // sample categories file format is bad - { + } - GenericFormatValidateFileResult result = doValidate(builder, "badSampleCategoryFormat", programId, "empty", "badSampleCategoryFormat"); - Assert.assertTrue(result.isArchiveLayoutValid()); - Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); - Assert.assertFalse(result.getSampleCategoryFileResult().isValid()); - Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isImported()); -// Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isValid()); + @Test + public void badTemporaryReferentialFormat() throws IOException { + + GenericFormatValidateFileResult result = doValidate("badTemporaryReferentialFormat", PROGRAM_ID, + "empty", "sampleCategory", + "badTemporaryReferentialGearFormat", + "badTemporaryReferentialPersonFormat", + "badTemporaryReferentialSpeciesFormat", + "badTemporaryReferentialVesselFormat"); + Assert.assertTrue(result.isArchiveLayoutValid()); + Assert.assertFalse(result.isValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryPersonFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporarySpeciesFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryVesselFileResult().isValid()); + + Assert.assertFalse(result.getProtocolFileResult().isImported()); + Assert.assertTrue(result.getProtocolFileResult().isValid()); - } + } - // mismatch sample categories - { + @Test + public void testBadTemporaryReferentialImport() throws IOException { + + GenericFormatValidateFileResult result = doValidate("testBadTemporaryReferentialImport", PROGRAM_ID, + "empty", "sampleCategory", + "badTemporaryReferentialGearImport", + "badTemporaryReferentialPersonImport", + "badTemporaryReferentialSpeciesImport", + "badTemporaryReferentialVesselImport"); + Assert.assertTrue(result.isArchiveLayoutValid()); + Assert.assertFalse(result.isValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryPersonFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporarySpeciesFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isImported()); + Assert.assertFalse(result.getReferentialTemporaryVesselFileResult().isValid()); + + Assert.assertFalse(result.getProtocolFileResult().isImported()); + Assert.assertTrue(result.getProtocolFileResult().isValid()); - GenericFormatValidateFileResult result = doValidate(builder, "sampleCategoryFormatMismatch", programId, "empty", "sampleCategoryFormatMismatch"); - Assert.assertTrue(result.isArchiveLayoutValid()); - Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); - Assert.assertFalse(result.getSampleCategoryFileResult().isValid()); - Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isImported()); -// Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isValid()); + } - } + @Test + public void testTemporaryReferentialImport() throws IOException { + + GenericFormatValidateFileResult result = doValidate("testBadTemporaryReferentialImport", PROGRAM_ID, + "empty", "sampleCategory", "referentials", "protocol"); + + Assert.assertTrue(result.isArchiveLayoutValid()); + Assert.assertTrue(result.isValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isValid()); + + Assert.assertFalse(result.getProtocolFileResult().isImported()); + Assert.assertTrue(result.getProtocolFileResult().isValid()); - // bad temporary referential gear format - { + } - GenericFormatValidateFileResult result = doValidate(builder, "badTemporaryReferentialGearFormat", programId, "empty", "sampleCategory", "badTemporaryReferentialGearFormat"); - Assert.assertTrue(result.isArchiveLayoutValid()); - Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); - Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + @Test + public void testBadProtocolFormat() throws IOException { + + GenericFormatValidateFileResult result = doValidate("testSurveyImportLimitCases", PROGRAM_ID, + "empty", "sampleCategory", "referentials", "badProtocolFormat"); + + Assert.assertTrue(result.isArchiveLayoutValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isValid()); + + Assert.assertTrue(result.getProtocolFileResult().isImported()); + Assert.assertFalse(result.getProtocolFileResult().isValid()); + + Assert.assertFalse(result.isValid()); - Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isImported()); - Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isValid()); + } - } + @Test + public void testBadProtocolImport() throws IOException { + + GenericFormatValidateFileResult result = doValidate("testSurveyImportLimitCases", PROGRAM_ID, + "empty", "sampleCategory", "referentials", "badProtocolImport"); + + Assert.assertTrue(result.isArchiveLayoutValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isValid()); + + Assert.assertTrue(result.getProtocolFileResult().isImported()); + Assert.assertFalse(result.getProtocolFileResult().isValid()); + + Assert.assertFalse(result.isValid()); - // error while importing temporary referential gear - { + } - GenericFormatValidateFileResult result = doValidate(builder, "badTemporaryReferentialGearImport", programId, "empty", "sampleCategory", "badTemporaryReferentialGearImport"); - Assert.assertTrue(result.isArchiveLayoutValid()); - Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); - Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); - Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isImported()); - Assert.assertFalse(result.getReferentialTemporaryGearFileResult().isValid()); - } + @Test + public void testBadSurveyFormat() throws IOException { + + GenericFormatValidateFileResult result = doValidate("testSurveyImportLimitCases", PROGRAM_ID, + "empty", "sampleCategory", "referentials", "protocol", "badSurveyFormat"); + + Assert.assertTrue(result.isArchiveLayoutValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isValid()); + Assert.assertTrue(result.getProtocolFileResult().isImported()); + Assert.assertTrue(result.getProtocolFileResult().isValid()); + + Assert.assertFalse(result.isValid()); + + Assert.assertTrue(result.getSurveyFileResult().isImported()); + Assert.assertFalse(result.getSurveyFileResult().isValid()); - if (log.isInfoEnabled()) { - log.info("Report files:" + builder.toString()); - } + } + @Test + public void testBadSurveyImport() throws IOException { + + GenericFormatValidateFileResult result = doValidate("testSurveyImportLimitCases", PROGRAM_ID, + "empty", "sampleCategory", "referentials", "protocol", "badSurveyImport"); + + Assert.assertTrue(result.isArchiveLayoutValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + Assert.assertTrue(result.getSampleCategoryFileResult().isImported()); + Assert.assertTrue(result.getSampleCategoryFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryGearFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryPersonFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporarySpeciesFileResult().isValid()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isImported()); + Assert.assertTrue(result.getReferentialTemporaryVesselFileResult().isValid()); + Assert.assertTrue(result.getProtocolFileResult().isImported()); + Assert.assertTrue(result.getProtocolFileResult().isValid()); + + Assert.assertFalse(result.isValid()); + + Assert.assertTrue(result.getSurveyFileResult().isImported()); + Assert.assertFalse(result.getSurveyFileResult().isValid()); } - protected GenericFormatValidateFileResult doValidate(StringBuilder builder, String archivName, String programId, String... directoryies) throws IOException { + protected GenericFormatValidateFileResult doValidate(String archivName, String programId, String... directoryies) throws IOException { File archiveFile = createArchive(archivName + ".zip", directoryies); @@ -125,7 +310,7 @@ public class GenericFormatImportServiceValidTest extends GenericFormatImportServ GenericFormatValidateFileResult result = service.validateImportFile(importConfiguration, progressionModel); - builder.append("\n").append(archivName).append(" :\n evince ").append(reportFile); + builder.add("evince " + reportFile); return result; diff --git a/tutti-service/src/test/resources/genericFormat/badProtocolFormat/protocol.tuttiProtocol b/tutti-service/src/test/resources/genericFormat/badProtocolFormat/protocol.tuttiProtocol new file mode 100644 index 0000000..cb6fa2c --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/badProtocolFormat/protocol.tuttiProtocol @@ -0,0 +1,81 @@ +tktktktkid: 2b5f8ccd-1a91-4902-93db-c209f02b6e1a +name: Protocole EVHOE 2014 +benthos: +- !SpeciesProtocol + id: d315e520-dfb8-47e5-bad9-8bb9a7e13692 + countIfNoFrequencyEnabled: true + speciesReferenceTaxonId: -3 + speciesSurveyCode: MELANGE + weightEnabled: true +- !SpeciesProtocol + id: ea6c48e3-d7d9-4482-996c-637c9c34ccc0 + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + mandatorySampleCategoryId: + - 198 + - 196 + speciesReferenceTaxonId: 4001 + speciesSurveyCode: SAGASCH + weightEnabled: true +caracteristicMapping: +- !CaracteristicMappingRow + pmfmId: 828 + tab: GEAR_USE_FEATURE +comment: "Protocole en pr\u00e9paration pour EVHOE 2014" +lengthClassesPmfmId: +- 306 +- 622 +- 307 +- 302 +- 299 +- 1394 +- 1417 +- 1425 +- 1426 +- 1427 +- 284 +- 285 +- 294 +- 295 +- 300 +- 301 +- 304 +- 318 +- 319 +- 322 +- 323 +- 661 +- 662 +species: +- !SpeciesProtocol + id: 609eb1b2-7d9f-4277-91fb-0b18cf5a81f9 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + speciesReferenceTaxonId: -4 + speciesSurveyCode: DIVE-RS1 + weightEnabled: true +- !SpeciesProtocol + id: f5f7c134-55dd-4c4c-a635-ae8d8fc2ff75 + countIfNoFrequencyEnabled: true + speciesReferenceTaxonId: -5 + speciesSurveyCode: DIVE-RS1 + weightEnabled: true +- !SpeciesProtocol + id: d7006c1f-8cca-4c0e-92ae-492e40941c44 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 196 + speciesReferenceTaxonId: 1055 + speciesSurveyCode: CANC-BEL + weightEnabled: true +- !SpeciesProtocol + id: 06957d3a-7677-47bd-b953-454f752b5ec6 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 198 + speciesReferenceTaxonId: 1663 + speciesSurveyCode: TRAC-MED + weightEnabled: true +version: 3 diff --git a/tutti-service/src/test/resources/genericFormat/badProtocolImport/protocol.tuttiProtocol b/tutti-service/src/test/resources/genericFormat/badProtocolImport/protocol.tuttiProtocol new file mode 100644 index 0000000..a2208f4 --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/badProtocolImport/protocol.tuttiProtocol @@ -0,0 +1,81 @@ +id: 2b5f8ccd-1a91-4902-93db-c209f02b6e1a +name: Protocole EVHOE 2014 +benthos: +- !SpeciesProtocol + id: d315e520-dfb8-47e5-bad9-8bb9a7e13692 + countIfNoFrequencyEnabled: true + speciesReferenceTaxonId: -13 + speciesSurveyCode: MELANGE + weightEnabled: true +- !SpeciesProtocol + id: ea6c48e3-d7d9-4482-996c-637c9c34ccc0 + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + mandatorySampleCategoryId: + - 198 + - 196 + speciesReferenceTaxonId: 4001 + speciesSurveyCode: SAGASCH + weightEnabled: true +caracteristicMapping: +- !CaracteristicMappingRow + pmfmId: 828 + tab: GEAR_USE_FEATURE +comment: "Protocole en pr\u00e9paration pour EVHOE 2014" +lengthClassesPmfmId: +- 306 +- 622 +- 307 +- 302 +- 299 +- 1394 +- 1417 +- 1425 +- 1426 +- 1427 +- 284 +- 285 +- 294 +- 295 +- 300 +- 301 +- 304 +- 318 +- 319 +- 322 +- 323 +- 661 +- 662 +species: +- !SpeciesProtocol + id: 609eb1b2-7d9f-4277-91fb-0b18cf5a81f9 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + speciesReferenceTaxonId: -44 + speciesSurveyCode: DIVE-RS1 + weightEnabled: true +- !SpeciesProtocol + id: f5f7c134-55dd-4c4c-a635-ae8d8fc2ff75 + countIfNoFrequencyEnabled: true + speciesReferenceTaxonId: -5 + speciesSurveyCode: DIVE-RS1 + weightEnabled: true +- !SpeciesProtocol + id: d7006c1f-8cca-4c0e-92ae-492e40941c44 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 196 + speciesReferenceTaxonId: 1055 + speciesSurveyCode: CANC-BEL + weightEnabled: true +- !SpeciesProtocol + id: 06957d3a-7677-47bd-b953-454f752b5ec6 + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 306 + mandatorySampleCategoryId: + - 198 + speciesReferenceTaxonId: 1663 + speciesSurveyCode: TRAC-MED + weightEnabled: true +version: 3 diff --git a/tutti-service/src/test/resources/genericFormat/badSurveyFormat/survey.csv b/tutti-service/src/test/resources/genericFormat/badSurveyFormat/survey.csv new file mode 100644 index 0000000..277cb7a --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/badSurveyFormat/survey.csv @@ -0,0 +1,2 @@ +ZZZAnnee;Serie;Serie_Partielle;Navire;Nombre_Poches;Pays;Zone_Etude;Campagne;Id_Sismer;Date_Deb_Campagne;Port_Deb_Campagne;Date_Fin_Campagne;Port_Fin_Campagne;Chef_Mission;Resp_Salle_Tri;Commentaire;Serie_Id;Navire_Id;Engin_Id;Port_Deb_Campagne_Id;Port_Fin_Campagne_Id;Chef_Mission_Id;Resp_Salle_Tri_Id +2014;Campagne EVHOE;1;868095;1;FRA;EVHOE - Golfe de Gascogne / Mer Celtique;Campagne EVHOE 2014;;17/10/2014 07:00:00;Brest;01/12/2014 07:00:00;Brest;Jean-Pierre LEAUTE|Michele SALAUN|Lionel PAWLOWSKI;Erwan DUHAMEL|Nicolas CAROFF;;CAM-EVHOE;868095;379|381|64;530;530;143|70|2332;128|59 \ No newline at end of file diff --git a/tutti-service/src/test/resources/genericFormat/badSurveyImport/survey.csv b/tutti-service/src/test/resources/genericFormat/badSurveyImport/survey.csv new file mode 100644 index 0000000..987c9f4 --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/badSurveyImport/survey.csv @@ -0,0 +1,2 @@ +Annee;Serie;Serie_Partielle;Navire;Nombre_Poches;Pays;Zone_Etude;Campagne;Id_Sismer;Date_Deb_Campagne;Port_Deb_Campagne;Date_Fin_Campagne;Port_Fin_Campagne;Chef_Mission;Resp_Salle_Tri;Commentaire;Serie_Id;Navire_Id;Engin_Id;Port_Deb_Campagne_Id;Port_Fin_Campagne_Id;Chef_Mission_Id;Resp_Salle_Tri_Id +2014;Campagne EVHOE;1;868095;1;FRA;EVHOE - Golfe de Gascogne / Mer Celtique;Campagne EVHOE 2014;;17/10/2014 07:00:00;Brest;01/12/2014 07:00:00;Brest;Jean-Pierre LEAUTE|Michele SALAUN|Lionel PAWLOWSKI;Erwan DUHAMEL|Nicolas CAROFF;;CAM-EVHOE33;868095;379|381|64;530;530;143|70|2332;128|59 \ No newline at end of file diff --git a/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialPersonFormat/temporaryPersons.csv b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialPersonFormat/temporaryPersons.csv new file mode 100644 index 0000000..9ef6cca --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialPersonFormat/temporaryPersons.csv @@ -0,0 +1,4 @@ +Aid;firstName;lastName;toDelete +-1;Léo;Paul; +-2;Paul;Valery; +-3;Valery;François; \ No newline at end of file diff --git a/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialPersonImport/temporaryPersons.csv b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialPersonImport/temporaryPersons.csv new file mode 100644 index 0000000..c2b1ef5 --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialPersonImport/temporaryPersons.csv @@ -0,0 +1,6 @@ +id;firstName;lastName;toDelete +-1;Léo;Paul; +-1;Paul;Valery; +-3;Valery;François; +-4;Valery;François; +-5;;; \ No newline at end of file diff --git a/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialSpeciesFormat/temporarySpecies.csv b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialSpeciesFormat/temporarySpecies.csv new file mode 100644 index 0000000..fb5f50d --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialSpeciesFormat/temporarySpecies.csv @@ -0,0 +1,9 @@ +id;nqqame;toDelete;toto +-6;Benthos; +-4;Divers 1; +-5;Divers 2; +-1;Divers 3; +-2;Divers 4; +-7;Gelatineux; +-8;MBECTOP; +-3;Melange; \ No newline at end of file diff --git a/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialSpeciesImport/temporarySpecies.csv b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialSpeciesImport/temporarySpecies.csv new file mode 100644 index 0000000..edc7468 --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialSpeciesImport/temporarySpecies.csv @@ -0,0 +1,13 @@ +id;name;toDelete +-6;Benthos; +-4;Divers 1; +-5;Divers 2; +-1;Divers 3; +-2;Divers 4; +-7;Gelatineux; +-8;MBECTOP; +-3;Melange; +-3;Melange2; +-9;Melange; +;Melange3; +-10;; \ No newline at end of file diff --git a/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialVesselFormat/temporaryVessels.csv b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialVesselFormat/temporaryVessels.csv new file mode 100644 index 0000000..2b6f09e --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialVesselFormat/temporaryVessels.csv @@ -0,0 +1,5 @@ +rt;idSS;name;intessrnationalRegistrationCode;scientificVessel;toDelete +#TEMP¿-1;Temporary fishing vessel name 1;International registration code F1;N; +#TEMP¿-2;Temporary fishing vessel name 2;International registration code F2;N; +#TEMP¿-3;Temporary scientific vessel name 3;International registration code S3;Y; +#TEMP¿-4;Temporary scientific vessel name 4;International registration code S4;Y; \ No newline at end of file diff --git a/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialVesselImport/temporaryVessels.csv b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialVesselImport/temporaryVessels.csv new file mode 100644 index 0000000..d9c4018 --- /dev/null +++ b/tutti-service/src/test/resources/genericFormat/badTemporaryReferentialVesselImport/temporaryVessels.csv @@ -0,0 +1,9 @@ +id;name;internationalRegistrationCode;scientificVessel;toDelete +#TEMP¿-1;Temporary fishing vessel name 1;International registration code F1;N; +#TEMP¿-1;Temporary fishing vessel name 2;International registration code F2;N; +#TEMP¿-2;Temporary fishing vessel name 2;International registration code F2;N; +#TEMP¿-3;Temporary scientific vessel name 3;International registration code S3;Y; +#TEMP¿-4;Temporary scientific vessel name 4;International registration code S4;Y; +#TEMP¿-5;Temporary scientific vessel name 4;International registration code S3;Y; +#TEMP¿-6;Temporary scientific vessel name 4;;Y; +#TEMP¿-7;;???;Y; \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.