branch feature/6688 updated (97dfac1 -> 91e36e3)
This is an automated email from the git hooks/post-receive script. New change to branch feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git from 97dfac1 suppression de l'engin dans les fichiers non requis new fcb325d improve errors messages for referential imports new 841732a improve file result api and add a file result for any files (protocol included) new 91e36e3 continue import validation + add more tests on it The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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 commit 841732ae1099f9b4d075c6cc3e5d68d9ecc917eb Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Mar 2 08:51:04 2015 +0100 improve file result api and add a file result for any files (protocol included) commit fcb325df4c87aca6b196c7885c65dca26f6cb938 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Mar 2 08:49:33 2015 +0100 improve errors messages for referential imports Summary of changes: .../genericformat/GenericFormatArchive.java | 15 - .../genericformat/GenericFormatCsvFileResult.java | 42 +++ .../genericformat/GenericFormatFileResult.java | 61 +++-- .../genericformat/GenericFormatImportContext.java | 101 ++++--- .../genericformat/GenericFormatImportService.java | 235 +++++++++++----- .../GenericFormatReferentialImportResult.java | 6 +- .../genericformat/GenericFormatResultSupport.java | 82 +++--- .../consumer/CsvConsumerForTemporaryGear.java | 4 +- .../consumer/CsvConsumerForTemporaryPerson.java | 4 +- .../consumer/CsvConsumerForTemporarySpecies.java | 4 +- .../consumer/CsvConsumerForTemporaryVessel.java | 4 +- .../ftl/genericFormatValidateReport_fr.ftl | 247 +++++++++++------ .../resources/i18n/tutti-service_fr_FR.properties | 11 +- .../GenericFormatImportServiceValidTest.java | 303 +++++++++++++++++---- .../protocol.tuttiProtocol | 16 +- .../protocol.tuttiProtocol | 18 +- .../genericFormat/badSurveyFormat/survey.csv | 2 + .../{default => badSurveyImport}/survey.csv | 2 +- .../temporaryPersons.csv | 4 + .../temporaryPersons.csv | 6 + .../temporarySpecies.csv | 2 +- .../temporarySpecies.csv | 6 +- .../temporaryVessels.csv | 2 +- .../temporaryVessels.csv | 6 +- 24 files changed, 838 insertions(+), 345 deletions(-) create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatCsvFileResult.java copy tutti-service/src/test/resources/genericFormat/{protocol => badProtocolFormat}/protocol.tuttiProtocol (88%) copy tutti-service/src/test/resources/genericFormat/{protocol => badProtocolImport}/protocol.tuttiProtocol (87%) create mode 100644 tutti-service/src/test/resources/genericFormat/badSurveyFormat/survey.csv copy tutti-service/src/test/resources/genericFormat/{default => badSurveyImport}/survey.csv (83%) create mode 100644 tutti-service/src/test/resources/genericFormat/badTemporaryReferentialPersonFormat/temporaryPersons.csv create mode 100644 tutti-service/src/test/resources/genericFormat/badTemporaryReferentialPersonImport/temporaryPersons.csv copy tutti-service/src/test/resources/genericFormat/{referentials => badTemporaryReferentialSpeciesFormat}/temporarySpecies.csv (72%) copy tutti-service/src/test/resources/genericFormat/{referentials => badTemporaryReferentialSpeciesImport}/temporarySpecies.csv (67%) copy tutti-service/src/test/resources/genericFormat/{referentials => badTemporaryReferentialVesselFormat}/temporaryVessels.csv (77%) copy tutti-service/src/test/resources/genericFormat/{referentials => badTemporaryReferentialVesselImport}/temporaryVessels.csv (59%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 fcb325df4c87aca6b196c7885c65dca26f6cb938 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Mar 2 08:49:33 2015 +0100 improve errors messages for referential imports --- .../service/referential/consumer/CsvConsumerForTemporaryGear.java | 4 ++-- .../service/referential/consumer/CsvConsumerForTemporaryPerson.java | 4 ++-- .../service/referential/consumer/CsvConsumerForTemporarySpecies.java | 4 ++-- .../service/referential/consumer/CsvConsumerForTemporaryVessel.java | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryGear.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryGear.java index d9e1765..f93e999 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryGear.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryGear.java @@ -100,7 +100,7 @@ public class CsvConsumerForTemporaryGear extends CsvComsumer<GearRow, GearModel> }else if (requestResult.isIdAlreadyAdded(id)) { - addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.gear.error.id.alreaydAdded"))); + addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.gear.error.id.alreaydAdded", id))); } @@ -110,7 +110,7 @@ public class CsvConsumerForTemporaryGear extends CsvComsumer<GearRow, GearModel> } else if (requestResult.isNaturalIdAlreadyAdded(name)) { - addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.gear.error.name.alreaydAdded"))); + addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.gear.error.name.alreaydAdded", name))); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryPerson.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryPerson.java index 24c2066..46d301e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryPerson.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryPerson.java @@ -99,7 +99,7 @@ public class CsvConsumerForTemporaryPerson extends CsvComsumer<PersonRow, Person } else if (requestResult.isIdAlreadyAdded(id)) { - addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.person.error.id.alreaydAdded"))); + addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.person.error.id.alreaydAdded", id))); } @@ -109,7 +109,7 @@ public class CsvConsumerForTemporaryPerson extends CsvComsumer<PersonRow, Person } else if (requestResult.isNaturalIdAlreadyAdded(name)) { - addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.person.error.name.alreaydAdded"))); + addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.person.error.name.alreaydAdded", name))); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporarySpecies.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporarySpecies.java index f0008e3..23719b9 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporarySpecies.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporarySpecies.java @@ -99,7 +99,7 @@ public class CsvConsumerForTemporarySpecies extends CsvComsumer<SpeciesRow, Spec }else if (requestResult.isIdAlreadyAdded(id)) { - addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.species.error.id.alreaydAdded"))); + addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.species.error.id.alreaydAdded", id))); } @@ -109,7 +109,7 @@ public class CsvConsumerForTemporarySpecies extends CsvComsumer<SpeciesRow, Spec }else if (requestResult.isNaturalIdAlreadyAdded(name)) { - addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.species.error.name.alreaydAdded"))); + addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.species.error.name.alreaydAdded", name))); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryVessel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryVessel.java index 0399f6c..abe7406 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryVessel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryVessel.java @@ -100,7 +100,7 @@ public class CsvConsumerForTemporaryVessel extends CsvComsumer<VesselRow, Vessel } else if (requestResult.isIdAlreadyAdded(id)) { - addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.vessel.error.id.alreaydAdded"))); + addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.vessel.error.id.alreaydAdded", id))); } @@ -110,7 +110,7 @@ public class CsvConsumerForTemporaryVessel extends CsvComsumer<VesselRow, Vessel } else if (requestResult.isNaturalIdAlreadyAdded(internationalRegistrationCode)) { - addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.vessel.error.name.alreaydAdded"))); + addCheckError(row, new ApplicationBusinessException(t("tutti.service.referential.import.vessel.error.name.alreaydAdded", internationalRegistrationCode))); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 841732ae1099f9b4d075c6cc3e5d68d9ecc917eb Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Mar 2 08:51:04 2015 +0100 improve file result api and add a file result for any files (protocol included) --- .../genericformat/GenericFormatArchive.java | 15 --- .../genericformat/GenericFormatCsvFileResult.java | 42 +++++++++ .../genericformat/GenericFormatFileResult.java | 61 ++++++++----- .../genericformat/GenericFormatImportContext.java | 101 ++++++++++++++------- .../GenericFormatReferentialImportResult.java | 6 +- .../genericformat/GenericFormatResultSupport.java | 82 ++++++++++------- 6 files changed, 202 insertions(+), 105 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java index 20a89c3..3233861 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java @@ -294,21 +294,6 @@ public class GenericFormatArchive implements Serializable { } - public Set<String> getImportFiles() { - - Set<String> result = new LinkedHashSet<>(); - for (ArchiveFilePath archiveFilePath : ArchiveFilePath.values()) { - - if (!missingPaths.contains(archiveFilePath)) { - result.add(archiveFilePath.getFilename()); - } - - } - return result; - - } - - public void createZip(ProgressionModel progressionModel) { if (progressionModel != null) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatCsvFileResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatCsvFileResult.java new file mode 100644 index 0000000..1db7939 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatCsvFileResult.java @@ -0,0 +1,42 @@ +package fr.ifremer.tutti.service.genericformat; + +import fr.ifremer.tutti.service.csv.CsvComsumer; + +import java.util.Map; +import java.util.Set; + +/** + * Created on 2/25/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatCsvFileResult extends GenericFormatFileResult { + + private static final long serialVersionUID = 1L; + + private int linesCount; + + + public GenericFormatCsvFileResult(String filename, boolean mandatory, boolean found) { + super(filename, mandatory, found); + } + + public int getLinesCount() { + return linesCount; + } + + public void setLinesCount(int linesCount) { + this.linesCount = linesCount; + } + + public void flushErrors(CsvComsumer<?, ?> consumer) { + + Map<Long, Set<String>> rowsInError = consumer.getRowsInError(); + if (!rowsInError.isEmpty()) { + getErrors().putAll(rowsInError); + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatFileResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatFileResult.java index 98ea8ef..5e33454 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatFileResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatFileResult.java @@ -1,15 +1,13 @@ package fr.ifremer.tutti.service.genericformat; -import com.google.common.collect.Sets; -import fr.ifremer.tutti.service.csv.CsvComsumer; - import java.io.Serializable; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; /** - * Created on 2/25/15. + * Created on 3/2/15. * * @author Tony Chemit - chemit@codelutin.com * @since 3.14 @@ -20,14 +18,18 @@ public class GenericFormatFileResult implements Serializable { private final String filename; - private final Map<Long, Set<String>> errors; + private final boolean mandatory; - private int linesCount; + private final boolean found; + + private final Map<Long, Set<String>> errors; private boolean imported; - public GenericFormatFileResult(String filename) { + public GenericFormatFileResult(String filename, boolean mandatory, boolean found) { this.filename = filename; + this.mandatory = mandatory; + this.found = found; this.errors = new LinkedHashMap<>(); } @@ -35,24 +37,36 @@ public class GenericFormatFileResult implements Serializable { return filename; } - public int getLinesCount() { - return linesCount; - } - - public void setLinesCount(int linesCount) { - this.linesCount = linesCount; - } - public Set<Map.Entry<Long, Set<String>>> getErrorsEntries() { return errors.entrySet(); } public boolean isValid() { - return errors.isEmpty(); + boolean result; + + if (!found) { + + // valid only if not mandatory + result = !mandatory; + + } else { + + // must be imported and with no errors please + result = isImported() && errors.isEmpty(); + + } + + return result; } public void addGlobalError(String error) { - this.errors.put(0l, Sets.newHashSet(error)); + + Set<String> globalErrors = errors.get(0l); + if (globalErrors==null) { + globalErrors = new LinkedHashSet<>(); + errors.put(0l, globalErrors); + } + globalErrors.add(error); } public boolean isImported() { @@ -63,12 +77,15 @@ public class GenericFormatFileResult implements Serializable { this.imported = imported; } - public void flushErrors(CsvComsumer<?, ?> consumer) { + public boolean isFound() { + return found; + } - Map<Long, Set<String>> rowsInError = consumer.getRowsInError(); - if (!rowsInError.isEmpty()) { - errors.putAll(rowsInError); - } + public boolean isMandatory() { + return mandatory; + } + protected Map<Long, Set<String>> getErrors() { + return errors; } } 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 e70cb70..0963d64 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,6 +12,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.ValidationService; @@ -35,7 +36,9 @@ import org.apache.commons.collections4.CollectionUtils; import org.nuiton.decorator.Decorator; import java.io.Closeable; +import java.io.File; import java.io.Serializable; +import java.nio.file.Path; import java.text.ParseException; import java.util.LinkedHashMap; import java.util.Map; @@ -65,7 +68,7 @@ public class GenericFormatImportContext implements Closeable { private TuttiProtocol importedProtocol; - private final GenericFormatFileResult sampleCategoryFileResult; + private final GenericFormatCsvFileResult sampleCategoryFileResult; private final GenericFormatReferentialImportResult<Gear, Integer> referentialTemporaryGearFileResult; @@ -75,21 +78,23 @@ public class GenericFormatImportContext implements Closeable { private final GenericFormatReferentialImportResult<Vessel, String> referentialTemporaryVesselFileResult; - private final GenericFormatFileResult surveyFileResult; + private final GenericFormatFileResult protocolFileResult; - private final GenericFormatFileResult accidentalCatchFileResult; + private final GenericFormatCsvFileResult surveyFileResult; - private final GenericFormatFileResult individualObservationFileResult; + private final GenericFormatCsvFileResult accidentalCatchFileResult; - private final GenericFormatFileResult marineLitterFileResult; + private final GenericFormatCsvFileResult individualObservationFileResult; - private final GenericFormatFileResult catchFileResult; + private final GenericFormatCsvFileResult marineLitterFileResult; - private final GenericFormatFileResult parameterFileResult; + private final GenericFormatCsvFileResult catchFileResult; - private final GenericFormatFileResult operationFileResult; + private final GenericFormatCsvFileResult parameterFileResult; - private final GenericFormatFileResult gearCaracteristicFileResult; + private final GenericFormatCsvFileResult operationFileResult; + + private final GenericFormatCsvFileResult gearCaracteristicFileResult; private final Map<String, GenericFormatImportCruiseContext> cruiseContexts; @@ -113,19 +118,24 @@ public class GenericFormatImportContext implements Closeable { this.validationHelper = new GenericFormatImportValidationHelper(this, new ValidationService()); this.cruiseContexts = new LinkedHashMap<>(); - this.sampleCategoryFileResult = new GenericFormatFileResult("sampleCategory.csv"); - this.surveyFileResult = new GenericFormatFileResult("survey.csv"); - this.gearCaracteristicFileResult = new GenericFormatFileResult("gearCaracteristics.csv"); - this.operationFileResult = new GenericFormatFileResult("operation.csv"); - this.parameterFileResult = new GenericFormatFileResult("parameter.csv"); - this.catchFileResult = new GenericFormatFileResult("catch.csv"); - this.marineLitterFileResult = new GenericFormatFileResult("marineLitter.csv"); - this.individualObservationFileResult = new GenericFormatFileResult("individualObservation.csv"); - this.accidentalCatchFileResult = new GenericFormatFileResult("accidentalCatch.csv"); - this.referentialTemporaryGearFileResult = new GenericFormatReferentialImportResult<>("temporaryGears.csv"); - this.referentialTemporaryPersonFileResult = new GenericFormatReferentialImportResult<>("temporaryPersons.csv"); - this.referentialTemporarySpeciesFileResult = new GenericFormatReferentialImportResult<>("temporarySpecies.csv"); - this.referentialTemporaryVesselFileResult = new GenericFormatReferentialImportResult<>("temporaryVessels.csv"); + GenericFormatArchive archive = importRequest.getArchive(); + + this.sampleCategoryFileResult = createFileResult(archive.getSampleCategoryModelPath(), true); + + this.referentialTemporaryGearFileResult = createReferentialFileResult(archive.getTemporaryReferentialGearsPath()); + this.referentialTemporaryPersonFileResult = createReferentialFileResult(archive.getTemporaryReferentialPersonsPath()); + this.referentialTemporarySpeciesFileResult = createReferentialFileResult(archive.getTemporaryReferentialSpeciesPath()); + this.referentialTemporaryVesselFileResult = createReferentialFileResult(archive.getTemporaryReferentialVesselsPath()); + this.protocolFileResult = createFileResult(archive.getProtocolPath(), false); + + this.surveyFileResult = createFileResult(archive.getSurveyPath(), true); + this.gearCaracteristicFileResult = createFileResult(archive.getGearCaracteristicsPath(), true); + this.operationFileResult = createFileResult(archive.getOperationPath(), true); + this.parameterFileResult = createFileResult(archive.getParameterPath(), true); + this.catchFileResult = createFileResult(archive.getCatchPath(), true); + this.marineLitterFileResult = createFileResult(archive.getMarineLitterPath(), true); + this.individualObservationFileResult = createFileResult(archive.getIndividualObservationPath(), true); + this.accidentalCatchFileResult = createFileResult(archive.getAccidentalCatchPath(), true); } @@ -153,7 +163,7 @@ public class GenericFormatImportContext implements Closeable { return ImmutableSet.copyOf(archiveLayoutErrors); } - public GenericFormatFileResult getSampleCategoryFileResult() { + public GenericFormatCsvFileResult getSampleCategoryFileResult() { return sampleCategoryFileResult; } @@ -173,35 +183,39 @@ public class GenericFormatImportContext implements Closeable { return referentialTemporaryVesselFileResult; } - public GenericFormatFileResult getSurveyFileResult() { + public GenericFormatFileResult getProtocolFileResult() { + return protocolFileResult; + } + + public GenericFormatCsvFileResult getSurveyFileResult() { return surveyFileResult; } - public GenericFormatFileResult getGearCaracteristicFileResult() { + public GenericFormatCsvFileResult getGearCaracteristicFileResult() { return gearCaracteristicFileResult; } - public GenericFormatFileResult getOperationFileResult() { + public GenericFormatCsvFileResult getOperationFileResult() { return operationFileResult; } - public GenericFormatFileResult getParameterFileResult() { + public GenericFormatCsvFileResult getParameterFileResult() { return parameterFileResult; } - public GenericFormatFileResult getCatchFileResult() { + public GenericFormatCsvFileResult getCatchFileResult() { return catchFileResult; } - public GenericFormatFileResult getMarineLitterFileResult() { + public GenericFormatCsvFileResult getMarineLitterFileResult() { return marineLitterFileResult; } - public GenericFormatFileResult getIndividualObservationFileResult() { + public GenericFormatCsvFileResult getIndividualObservationFileResult() { return individualObservationFileResult; } - public GenericFormatFileResult getAccidentalCatchFileResult() { + public GenericFormatCsvFileResult getAccidentalCatchFileResult() { return accidentalCatchFileResult; } @@ -403,9 +417,34 @@ public class GenericFormatImportContext implements Closeable { } } + public boolean isTechnicalFilesValid() { + return isArchiveLayoutValid() + && sampleCategoryFileResult.isValid() + && referentialTemporaryGearFileResult.isValid() + && referentialTemporaryPersonFileResult.isValid() + && referentialTemporarySpeciesFileResult.isValid() + && referentialTemporaryVesselFileResult.isValid() + && protocolFileResult.isValid(); + } + public static interface CruiseContextAction { void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel); } + + protected GenericFormatCsvFileResult createFileResult(Path path, boolean mandatory) { + + File file = path.toFile(); + return new GenericFormatCsvFileResult(file.getName(), mandatory, file.exists()); + + } + + protected <E extends TuttiReferentialEntity, K extends Comparable<K>> GenericFormatReferentialImportResult<E, K> createReferentialFileResult(Path path) { + + File file = path.toFile(); + return new GenericFormatReferentialImportResult<>(file.getName(), file.exists()); + + } + } 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 8c972b9..93c492b 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 @@ -19,7 +19,7 @@ import java.util.TreeMap; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatReferentialImportResult<E extends TuttiReferentialEntity, K extends Comparable<K>> extends GenericFormatFileResult { +public class GenericFormatReferentialImportResult<E extends TuttiReferentialEntity, K extends Comparable<K>> extends GenericFormatCsvFileResult { private static final long serialVersionUID = 1L; @@ -29,8 +29,8 @@ public class GenericFormatReferentialImportResult<E extends TuttiReferentialEnti private Map<String, String> idTranslationMap; - public GenericFormatReferentialImportResult(String filename) { - super(filename); + public GenericFormatReferentialImportResult(String filename, boolean found) { + super(filename, false, found); this.entitiesAdded = Collections.emptyMap(); this.entitiesLinked = Collections.emptyMap(); this.idTranslationMap = Collections.emptyMap(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java index 3276cf6..df88436 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java @@ -26,17 +26,15 @@ public abstract class GenericFormatResultSupport implements Serializable { private static final long serialVersionUID = 1L; - private boolean valid; + private final boolean valid; private GenericFormatImportRequest importRequest; private final Set<String> archiveLayoutErrors; - private final Set<String> archiveFiles; - private final TuttiProtocol protocol; - private final GenericFormatFileResult sampleCategoryFileResult; + private final GenericFormatCsvFileResult sampleCategoryFileResult; private final GenericFormatReferentialImportResult<Gear, Integer> referentialTemporaryGearFileResult; @@ -46,21 +44,23 @@ public abstract class GenericFormatResultSupport implements Serializable { private final GenericFormatReferentialImportResult<Vessel, String> referentialTemporaryVesselFileResult; - private final GenericFormatFileResult surveyFileResult; + private final GenericFormatFileResult protocolFileResult; + + private final GenericFormatCsvFileResult surveyFileResult; - private final GenericFormatFileResult gearCaracteristicFileResult; + private final GenericFormatCsvFileResult gearCaracteristicFileResult; - private final GenericFormatFileResult operationFileResult; + private final GenericFormatCsvFileResult operationFileResult; - private final GenericFormatFileResult parameterFileResult; + private final GenericFormatCsvFileResult parameterFileResult; - private final GenericFormatFileResult catchFileResult; + private final GenericFormatCsvFileResult catchFileResult; - private final GenericFormatFileResult marineLitterFileResult; + private final GenericFormatCsvFileResult marineLitterFileResult; - private final GenericFormatFileResult individualObservationFileResult; + private final GenericFormatCsvFileResult individualObservationFileResult; - private final GenericFormatFileResult accidentalCatchFileResult; + private final GenericFormatCsvFileResult accidentalCatchFileResult; protected GenericFormatResultSupport(GenericFormatImportContext importContext) { @@ -71,6 +71,7 @@ public abstract class GenericFormatResultSupport implements Serializable { this.referentialTemporaryPersonFileResult = importContext.getReferentialTemporaryPersonFileResult(); this.referentialTemporarySpeciesFileResult = importContext.getReferentialTemporarySpeciesFileResult(); this.referentialTemporaryVesselFileResult = importContext.getReferentialTemporaryVesselFileResult(); + this.protocolFileResult = importContext.getProtocolFileResult(); this.surveyFileResult = importContext.getSurveyFileResult(); this.gearCaracteristicFileResult = importContext.getGearCaracteristicFileResult(); this.operationFileResult = importContext.getOperationFileResult(); @@ -87,7 +88,28 @@ public abstract class GenericFormatResultSupport implements Serializable { archiveLayoutErrors1 = importContext.getArchiveLayoutErrors(); } this.archiveLayoutErrors = ImmutableSet.copyOf(archiveLayoutErrors1); - this.archiveFiles = importContext.getImportRequest().getArchive().getImportFiles(); + this.valid = computeValid(); + } + + private boolean computeValid() { + + boolean result = isArchiveLayoutValid() + && sampleCategoryFileResult.isValid() + && referentialTemporaryGearFileResult.isValid() + && referentialTemporaryPersonFileResult.isValid() + && referentialTemporarySpeciesFileResult.isValid() + && referentialTemporaryVesselFileResult.isValid() + && protocolFileResult.isValid() + && surveyFileResult.isValid() + && gearCaracteristicFileResult.isValid() + && operationFileResult.isValid() + && parameterFileResult.isValid() + && catchFileResult.isValid() + && marineLitterFileResult.isValid() + && accidentalCatchFileResult.isValid() + && individualObservationFileResult.isValid(); + return result; + } public boolean isArchiveLayoutValid() { @@ -98,19 +120,11 @@ public abstract class GenericFormatResultSupport implements Serializable { return archiveLayoutErrors; } - public Set<String> getArchiveFiles() { - return archiveFiles; - } - - public boolean isProtocolImported() { - return protocol != null; - } - public TuttiProtocol getProtocol() { return protocol; } - public GenericFormatFileResult getSampleCategoryFileResult() { + public GenericFormatCsvFileResult getSampleCategoryFileResult() { return sampleCategoryFileResult; } @@ -130,35 +144,39 @@ public abstract class GenericFormatResultSupport implements Serializable { return referentialTemporaryVesselFileResult; } - public GenericFormatFileResult getSurveyFileResult() { + public GenericFormatFileResult getProtocolFileResult() { + return protocolFileResult; + } + + public GenericFormatCsvFileResult getSurveyFileResult() { return surveyFileResult; } - public GenericFormatFileResult getGearCaracteristicFileResult() { + public GenericFormatCsvFileResult getGearCaracteristicFileResult() { return gearCaracteristicFileResult; } - public GenericFormatFileResult getOperationFileResult() { + public GenericFormatCsvFileResult getOperationFileResult() { return operationFileResult; } - public GenericFormatFileResult getParameterFileResult() { + public GenericFormatCsvFileResult getParameterFileResult() { return parameterFileResult; } - public GenericFormatFileResult getCatchFileResult() { + public GenericFormatCsvFileResult getCatchFileResult() { return catchFileResult; } - public GenericFormatFileResult getMarineLitterFileResult() { + public GenericFormatCsvFileResult getMarineLitterFileResult() { return marineLitterFileResult; } - public GenericFormatFileResult getIndividualObservationFileResult() { + public GenericFormatCsvFileResult getIndividualObservationFileResult() { return individualObservationFileResult; } - public GenericFormatFileResult getAccidentalCatchFileResult() { + public GenericFormatCsvFileResult getAccidentalCatchFileResult() { return accidentalCatchFileResult; } @@ -210,8 +228,4 @@ public abstract class GenericFormatResultSupport implements Serializable { return valid; } - public void setValid(boolean valid) { - this.valid = valid; - } - } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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>.
participants (1)
-
codelutin.com scm