branch feature/6688 updated (7854d55 -> 6e3e891)
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 7854d55 ajout de la structure pour tester les cas nomimaux (reste juste à bien tous les écrire...) new 9b258b7 use atomic actions for validate and import steps to be able to skip them more easely new 88ebc3e continue report + i18n new 6e3e891 fix report extension in save report actions 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 6e3e89190319d5e9d4c10962964f62f73c10a3d9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 3 19:13:28 2015 +0100 fix report extension in save report actions commit 88ebc3e23440efea527290a0794e598b5152deb0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 3 19:13:11 2015 +0100 continue report + i18n commit 9b258b7fd17695b0923aa751e84499450be3bed9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 3 19:12:51 2015 +0100 use atomic actions for validate and import steps to be able to skip them more easely Summary of changes: .../genericformat/GenericFormatImportContext.java | 53 ++ .../genericformat/GenericFormatImportService.java | 981 ++------------------- .../genericformat/GenericFormatServiceSupport.java | 2 +- .../importactions/DoCheckWeightAction.java | 64 ++ .../importactions/DoCleanWeightAction.java | 61 ++ .../importactions/ImportAccidentalCatchAction.java | 69 ++ .../importactions/ImportActionSupport.java | 41 + .../importactions/ImportCatchAction.java | 70 ++ .../ImportGearCaracteristicAction.java | 69 ++ .../ImportIndividualObservationAction.java | 69 ++ .../importactions/ImportMarineLitterAction.java | 69 ++ .../importactions/ImportOperationAction.java | 76 ++ .../importactions/ImportParameterAction.java | 69 ++ .../importactions/ImportProtocolAction.java | 121 +++ .../importactions/ImportReferentialGearAction.java | 98 ++ .../ImportReferentialPersonAction.java | 99 +++ .../ImportReferentialSpeciesAction.java | 100 +++ .../ImportReferentialVesselAction.java | 95 ++ .../importactions/ImportSurveyAction.java | 73 ++ .../ValidateAccidentalCatchAction.java | 71 ++ .../importactions/ValidateCatchAction.java | 71 ++ .../ValidateGearCaracteristicAction.java | 71 ++ .../ValidateIndividualObservationAction.java | 72 ++ .../importactions/ValidateMarineLitterAction.java | 71 ++ .../importactions/ValidateOperationAction.java | 81 ++ .../importactions/ValidateParameterAction.java | 71 ++ .../ValidateSampleCategoryAction.java | 73 ++ .../importactions/ValidateSurveyAction.java | 74 ++ .../resources/ftl/genericFormatImportReport_fr.ftl | 299 ++++--- .../ftl/genericFormatValidateReport_fr.ftl | 76 +- .../resources/i18n/tutti-service_en_GB.properties | 17 + .../resources/i18n/tutti-service_fr_FR.properties | 28 +- .../SaveGenericFormatImportReportAction.java | 4 +- .../SaveGenericFormatValidateReportAction.java | 4 +- 34 files changed, 2286 insertions(+), 1076 deletions(-) create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCheckWeightAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCleanWeightAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportActionSupport.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSampleCategoryAction.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java -- 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 9b258b7fd17695b0923aa751e84499450be3bed9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 3 19:12:51 2015 +0100 use atomic actions for validate and import steps to be able to skip them more easely --- .../genericformat/GenericFormatImportContext.java | 53 ++ .../genericformat/GenericFormatImportService.java | 981 ++------------------- .../genericformat/GenericFormatServiceSupport.java | 2 +- .../importactions/DoCheckWeightAction.java | 64 ++ .../importactions/DoCleanWeightAction.java | 61 ++ .../importactions/ImportAccidentalCatchAction.java | 69 ++ .../importactions/ImportActionSupport.java | 41 + .../importactions/ImportCatchAction.java | 70 ++ .../ImportGearCaracteristicAction.java | 69 ++ .../ImportIndividualObservationAction.java | 69 ++ .../importactions/ImportMarineLitterAction.java | 69 ++ .../importactions/ImportOperationAction.java | 76 ++ .../importactions/ImportParameterAction.java | 69 ++ .../importactions/ImportProtocolAction.java | 121 +++ .../importactions/ImportReferentialGearAction.java | 98 ++ .../ImportReferentialPersonAction.java | 99 +++ .../ImportReferentialSpeciesAction.java | 100 +++ .../ImportReferentialVesselAction.java | 95 ++ .../importactions/ImportSurveyAction.java | 73 ++ .../ValidateAccidentalCatchAction.java | 71 ++ .../importactions/ValidateCatchAction.java | 71 ++ .../ValidateGearCaracteristicAction.java | 71 ++ .../ValidateIndividualObservationAction.java | 72 ++ .../importactions/ValidateMarineLitterAction.java | 71 ++ .../importactions/ValidateOperationAction.java | 81 ++ .../importactions/ValidateParameterAction.java | 71 ++ .../ValidateSampleCategoryAction.java | 73 ++ .../importactions/ValidateSurveyAction.java | 74 ++ 28 files changed, 2017 insertions(+), 917 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java index 0963d64..27fddc0 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 @@ -427,6 +427,59 @@ public class GenericFormatImportContext implements Closeable { && protocolFileResult.isValid(); } + public boolean isCanImportReferentialGear() { + return isArchiveLayoutValid() && referentialTemporaryGearFileResult.isFound(); + } + + public boolean isCanImportReferentialPerson() { + return isArchiveLayoutValid() && referentialTemporaryPersonFileResult.isFound(); + } + + public boolean isCanImportReferentialSpecies() { + return isArchiveLayoutValid() && referentialTemporarySpeciesFileResult.isFound(); + } + + public boolean isCanImportReferentialVessel() { + return isArchiveLayoutValid() && referentialTemporaryVesselFileResult.isFound(); + } + + public boolean isCanImportProtocol() { + return isArchiveLayoutValid() && referentialTemporarySpeciesFileResult.isValid() && protocolFileResult.isFound(); + } + + public boolean isCanImportSurvey() { + return isTechnicalFilesValid(); + } + + public boolean isCanImportGearCaracteristic() { + return isTechnicalFilesValid() && getSurveyFileResult().isValid(); + } + + public boolean isCanImportOperation() { + return isTechnicalFilesValid() && getSurveyFileResult().isValid(); + } + + public boolean isCanImportParameter() { + return isTechnicalFilesValid() && getOperationFileResult().isValid(); + } + + public boolean isCanImportCatch() { + return isTechnicalFilesValid() && getOperationFileResult().isValid(); + } + + public boolean isCanImportMarineLitter() { + return isTechnicalFilesValid() && getOperationFileResult().isValid(); + } + + public boolean isCanImportAccidentalCatch() { + return isTechnicalFilesValid() && getOperationFileResult().isValid(); + } + + public boolean isCanImportIndividualObservation() { + return isTechnicalFilesValid() && getOperationFileResult().isValid(); + } + + public static interface CruiseContextAction { void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel); 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 68fa560..5832a0c 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 @@ -3,59 +3,42 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import fr.ifremer.tutti.persistence.ProgressionModel; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; -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.Vessel; import fr.ifremer.tutti.service.PdfGeneratorService; import fr.ifremer.tutti.service.TuttiServiceContext; import fr.ifremer.tutti.service.catches.WeightCleaningService; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAccidentalCatch; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForCatch; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForGearCaracteristic; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForIndividualObservation; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForMarineLitter; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForOperation; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForParameter; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSampleCategory; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; -import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchRow; -import fr.ifremer.tutti.service.genericformat.csv.CatchRow; -import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicRow; -import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationRow; -import fr.ifremer.tutti.service.genericformat.csv.MarineLitterRow; -import fr.ifremer.tutti.service.genericformat.csv.OperationRow; -import fr.ifremer.tutti.service.genericformat.csv.ParameterRow; -import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryRow; -import fr.ifremer.tutti.service.genericformat.csv.SurveyRow; -import fr.ifremer.tutti.service.referential.ReferentialImportRequest; -import fr.ifremer.tutti.service.referential.ReferentialImportResult; -import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryGear; -import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryPerson; -import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies; -import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryVessel; -import fr.ifremer.tutti.service.referential.csv.GearRow; -import fr.ifremer.tutti.service.referential.csv.PersonRow; -import fr.ifremer.tutti.service.referential.csv.SpeciesRow; -import fr.ifremer.tutti.service.referential.csv.VesselRow; +import fr.ifremer.tutti.service.genericformat.importactions.DoCheckWeightAction; +import fr.ifremer.tutti.service.genericformat.importactions.DoCleanWeightAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportAccidentalCatchAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportActionSupport; +import fr.ifremer.tutti.service.genericformat.importactions.ImportCatchAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportGearCaracteristicAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportIndividualObservationAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportMarineLitterAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportOperationAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportParameterAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportProtocolAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportReferentialGearAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportReferentialPersonAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportReferentialSpeciesAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportReferentialVesselAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImportSurveyAction; +import fr.ifremer.tutti.service.genericformat.importactions.ValidateAccidentalCatchAction; +import fr.ifremer.tutti.service.genericformat.importactions.ValidateCatchAction; +import fr.ifremer.tutti.service.genericformat.importactions.ValidateGearCaracteristicAction; +import fr.ifremer.tutti.service.genericformat.importactions.ValidateIndividualObservationAction; +import fr.ifremer.tutti.service.genericformat.importactions.ValidateMarineLitterAction; +import fr.ifremer.tutti.service.genericformat.importactions.ValidateOperationAction; +import fr.ifremer.tutti.service.genericformat.importactions.ValidateParameterAction; +import fr.ifremer.tutti.service.genericformat.importactions.ValidateSampleCategoryAction; +import fr.ifremer.tutti.service.genericformat.importactions.ValidateSurveyAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.csv.ImportRow; -import org.nuiton.csv.ImportRuntimeException; -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; import static org.nuiton.i18n.I18n.t; @@ -242,23 +225,11 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { if (importContext.isArchiveLayoutValid()) { - checkSampleCategoryModel(importContext); - importTemporaryGears(importContext, false); - importTemporaryPersons(importContext, false); - importTemporarySpecies(importContext, false); - importTemporaryVessels(importContext, false); - importProtocol(importContext); + Set<ImportActionSupport> actions = createValidateActions(importContext); - if (importContext.isTechnicalFilesValid()) { + for (ImportActionSupport action : actions) { - validateCruises(importContext); - validateGearCaracteristics(importContext); - validateOperations(importContext); - validateParameters(importContext); - validateCatches(importContext); - validateMarineLitters(importContext); - validateIndividualObservations(importContext); - validateAccidentalCatches(importContext); + action.execute(); } @@ -281,26 +252,11 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { GenericformatImportPersitenceHelper persitenceHelper = new GenericformatImportPersitenceHelper(importContext, persistenceService, cruiseDecorator, fishingOperationDecorator); - checkSampleCategoryModel(importContext); - importTemporaryGears(importContext, true); - importTemporaryPersons(importContext, true); - importTemporarySpecies(importContext, true); - importTemporaryVessels(importContext, true); - importProtocol(importContext); + Set<ImportActionSupport> actions = createImportActions(importContext, persitenceHelper); - if (importContext.isTechnicalFilesValid()) { + for (ImportActionSupport action : actions) { - 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); + action.execute(); } @@ -344,7 +300,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } - private GenericFormatArchive createArchive(GenericFormatImportConfiguration importConfiguration) { + protected GenericFormatArchive createArchive(GenericFormatImportConfiguration importConfiguration) { File importFile = importConfiguration.getImportFile(); Preconditions.checkNotNull(importFile); @@ -356,855 +312,48 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } - protected void checkSampleCategoryModel(GenericFormatImportContext importContext) { - - if (log.isInfoEnabled()) { - log.info("Import sample category model."); - } - - importContext.increments(t("tutti.service.genericFormat.import.sampleCategoryModel")); - GenericFormatCsvFileResult importFileResult = importContext.getSampleCategoryFileResult(); - try (CsvConsumerForSampleCategory consumer = importContext.loadSampleCategories(false)) { - - int nbCategories = 0; - for (ImportRow<SampleCategoryRow> row : consumer) { - consumer.validateRow(row, importContext); - nbCategories++; - } - - if (nbCategories != importContext.getImportRequest().getSampleCategoryModel().getNbSampling()) { - - throw new ImportRuntimeException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.missingCategories")); - - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close sampleCategory.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - } - - protected void importTemporaryGears(GenericFormatImportContext importContext, boolean reportError) { - - importContext.increments(t("tutti.service.genericFormat.import.temporaryGears")); - GenericFormatArchive archive = importContext.getImportRequest().getArchive(); - - if (archive.isTemporaryReferentialGearsPathExists()) { - - if (log.isInfoEnabled()) { - log.info("Import temporary gears."); - } - - - ReferentialImportRequest<Gear, Integer> referentialImportRequest = referentialTemporaryGearService.createReferentialImportRequest(); - - GenericFormatReferentialImportResult<Gear, Integer> importFileResult = importContext.getReferentialTemporaryGearFileResult(); - try (CsvConsumerForTemporaryGear consumer = importContext.loadTemporaryGears(reportError)) { - for (ImportRow<GearRow> row : consumer) { - consumer.checkRowForGenericFormatImport(row, referentialImportRequest); - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close gears.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - 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()) { - log.info("Skip import temporary gears (no file found)."); - } - } - - } - - protected void importTemporaryPersons(GenericFormatImportContext importContext, boolean reportError) { - - importContext.increments(t("tutti.service.genericFormat.import.temporaryPersons")); - GenericFormatArchive archive = importContext.getImportRequest().getArchive(); - - if (archive.isTemporaryReferentialPersonsPathExists()) { - - if (log.isInfoEnabled()) { - log.info("Import temporary persons."); - } - - GenericFormatReferentialImportResult<Person, Integer> importFileResult = importContext.getReferentialTemporaryPersonFileResult(); - - ReferentialImportRequest<Person, Integer> referentialImportRequest = referentialTemporaryPersonService.createReferentialImportRequest(); - try (CsvConsumerForTemporaryPerson consumer = importContext.loadTemporaryPersons(reportError)) { - for (ImportRow<PersonRow> row : consumer) { - consumer.checkRowForGenericFormatImport(row, referentialImportRequest); - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close person.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - 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()) { - log.info("Skip import temporary persons (no file found)."); - } - - } - - } - - protected void importTemporarySpecies(GenericFormatImportContext importContext, boolean reportError) { - - importContext.increments(t("tutti.service.genericFormat.import.temporarySpecies")); - - GenericFormatArchive archive = importContext.getImportRequest().getArchive(); - if (archive.isTemporaryReferentialSpeciesPathExists()) { - - if (log.isInfoEnabled()) { - log.info("Import temporary species."); - } - - ReferentialImportRequest<Species, Integer> referentialImportRequest = referentialTemporarySpeciesService.createReferentialImportRequest(); - - GenericFormatReferentialImportResult<Species, Integer> importFileResult = importContext.getReferentialTemporarySpeciesFileResult(); - try (CsvConsumerForTemporarySpecies consumer = importContext.loadTemporarySpecies(reportError)) { - for (ImportRow<SpeciesRow> row : consumer) { - consumer.checkRowForGenericFormatImport(row, referentialImportRequest); - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close species.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - 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)"); - } - - } - - } else { - - if (log.isInfoEnabled()) { - log.info("Skip import temporary species (no file found)."); - } - - } - - } - - protected void importTemporaryVessels(GenericFormatImportContext importContext, boolean reportError) { - - importContext.increments(t("tutti.service.genericFormat.import.temporaryVessels")); - GenericFormatArchive archive = importContext.getImportRequest().getArchive(); - - if (archive.isTemporaryReferentialVesselsPathExists()) { - - if (log.isInfoEnabled()) { - log.info("Import temporary vessels."); - } - - ReferentialImportRequest<Vessel, String> referentialImportRequest = referentialTemporaryVesselService.createReferentialImportRequest(); - - GenericFormatReferentialImportResult<Vessel, String> importFileResult = importContext.getReferentialTemporaryVesselFileResult(); - try (CsvConsumerForTemporaryVessel consumer = importContext.loadTemporaryVessels(reportError)) { - for (ImportRow<VesselRow> row : consumer) { - consumer.checkRowForGenericFormatImport(row, referentialImportRequest); - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close vessel.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - 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)"); - } - - } - - } else { - - if (log.isInfoEnabled()) { - log.info("Skip import temporary vessels (no file found)."); - } - - } - - } - - protected void importProtocol(GenericFormatImportContext importContext) { - - GenericFormatArchive archive = importContext.getImportRequest().getArchive(); - if (archive.isProtocolExists()) { - - 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); - - String newName = persistenceService.getFirstAvailableName(tuttiProtocol.getName()); - tuttiProtocol.setName(newName); - - List<Species> referentSpecies = persistenceService.getAllReferentSpecies(); - - // Check missing species - Map<Integer, String> missingSpecies = TuttiProtocols.detectMissingSpecies(tuttiProtocol, referentSpecies); - if (!missingSpecies.isEmpty()) { - - 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); - - importContext.setImportedProtocol(tuttiProtocol); - - } else { - - importContext.increments(t("tutti.service.genericFormat.import.protocol.notValid", tuttiProtocol.getName())); - - } - - } catch (ApplicationTechnicalException e) { - - fileResult.addGlobalError(e.getCause().getMessage()); - - } - - } else { - - if (log.isInfoEnabled()) { - log.info("Skip import protocol (no file found)."); - } - - importContext.increments(t("tutti.service.genericFormat.skip.import.protocol")); - - } - - } - - protected void validateCruises(GenericFormatValidateFileContext importContext) { - - if (log.isInfoEnabled()) { - log.info("Validate survey.csv file."); - } - - GenericFormatCsvFileResult importFileResult = importContext.getSurveyFileResult(); - try (CsvConsumerForSurvey consumer = importContext.loadSurveys(false)) { - for (ImportRow<SurveyRow> row : consumer) { - - importContext.increments(t("tutti.service.genericFormat.validate.cruises", row.getLineNumber())); - - consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(row); - - Cruise cruise = row.getBean().getCruise(); - - boolean createCruise = TuttiEntities.isNew(cruise); - importContext.addImportedCruise(cruise, !createCruise); - - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close survey.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - } - - protected void validateGearCaracteristics(GenericFormatValidateFileContext importContext) { - - if (log.isInfoEnabled()) { - log.info("Validate gearCaracteristics.csv file."); - } - - GenericFormatCsvFileResult importFileResult = importContext.getGearCaracteristicFileResult(); - try (CsvConsumerForGearCaracteristic consumer = importContext.loadGearCaracteristics(false)) { - for (ImportRow<GearCaracteristicRow> row : consumer) { - - importContext.increments(t("tutti.service.genericFormat.validate.gearCaracteristics", row.getLineNumber())); - - GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - - if (row.isValid()) { - consumer.prepareRowForPersist(cruiseContext, row); - } - - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close gearCaracteristic.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - } - - protected void validateOperations(GenericFormatValidateFileContext importContext) { - - if (log.isInfoEnabled()) { - log.info("Validate operation.csv file."); - } - - GenericFormatCsvFileResult importFileResult = importContext.getOperationFileResult(); - try (CsvConsumerForOperation consumer = importContext.loadOperations(false)) { - for (ImportRow<OperationRow> row : consumer) { - - importContext.increments(t("tutti.service.genericFormat.validate.operations", row.getLineNumber())); - - GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - - if (row.isValid()) { - - consumer.prepareRowForPersist(cruiseContext, row); - OperationRow bean = row.getBean(); - - FishingOperation fishingOperation = bean.getFishingOperation(); - CatchBatch catchBatch = bean.getCatchBatch(); - - importContext.addImportedFishingOperation(fishingOperation, catchBatch); - - } - - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close operation.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - } - - protected void validateParameters(GenericFormatValidateFileContext importContext) { - - if (log.isInfoEnabled()) { - log.info("Validate parameter.csv file."); - } - - GenericFormatCsvFileResult importFileResult = importContext.getParameterFileResult(); - try (CsvConsumerForParameter consumer = importContext.loadParameters(false)) { - for (ImportRow<ParameterRow> row : consumer) { - - importContext.increments(t("tutti.service.genericFormat.validate.parameters", row.getLineNumber())); - - GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - - if (row.isValid()) { - consumer.prepareRowForPersist(operationContext, row); - } - - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close parameter.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - } - - protected void validateCatches(GenericFormatValidateFileContext importContext) { - - if (log.isInfoEnabled()) { - log.info("Validate catch.csv file."); - } - - GenericFormatCsvFileResult importFileResult = importContext.getCatchFileResult(); - try (CsvConsumerForCatch consumer = importContext.loadCatches(false)) { - for (ImportRow<CatchRow> row : consumer) { - - importContext.increments(t("tutti.service.genericFormat.validate.catches", row.getLineNumber())); - - GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - - if (row.isValid()) { - consumer.prepareRowForPersist(operationContext, row); - } - - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close catch.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - } - - protected void validateMarineLitters(GenericFormatValidateFileContext importContext) { - - if (log.isInfoEnabled()) { - log.info("Validate marineLitter.csv file."); - } - - GenericFormatCsvFileResult importFileResult = importContext.getMarineLitterFileResult(); - try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters(false)) { - for (ImportRow<MarineLitterRow> row : consumer) { - - importContext.increments(t("tutti.service.genericFormat.validate.marineLitters", row.getLineNumber())); - - GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - - if (row.isValid()) { - consumer.prepareRowForPersist(operationContext, row); - } - - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close marineLitter.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - } - - protected void validateIndividualObservations(GenericFormatValidateFileContext importContext) { - - if (log.isInfoEnabled()) { - log.info("Validate individualObservation.csv file."); - } - - GenericFormatCsvFileResult importFileResult = importContext.getIndividualObservationFileResult(); - try (CsvConsumerForIndividualObservation consumer = importContext.loadIndividualObservations(false)) { - for (ImportRow<IndividualObservationRow> row : consumer) { - - importContext.increments(t("tutti.service.genericFormat.validate.individualObservations", row.getLineNumber())); - - GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - - if (row.isValid()) { - consumer.prepareRowForPersist(operationContext, row); - } - - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close individualObservation.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - } - - protected void validateAccidentalCatches(GenericFormatValidateFileContext importContext) { - - if (log.isInfoEnabled()) { - log.info("Validate accidentalCatch.csv file."); - } - - GenericFormatCsvFileResult importFileResult = importContext.getAccidentalCatchFileResult(); - try (CsvConsumerForAccidentalCatch consumer = importContext.loadAccidentalCatches(false)) { - for (ImportRow<AccidentalCatchRow> row : consumer) { - - importContext.increments(t("tutti.service.genericFormat.validate.accidentalCatches", row.getLineNumber())); - - GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - - if (row.isValid()) { - consumer.prepareRowForPersist(operationContext, row); - } - - } - - importFileResult.flushErrors(consumer); - - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close accidentalCatch.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - } - - protected void importCruises(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { - - if (log.isInfoEnabled()) { - log.info("Import survey.csv file."); - } - importContext.increments(t("tutti.service.genericFormat.import.cruises")); - GenericFormatCsvFileResult importFileResult = importContext.getSurveyFileResult(); - try (CsvConsumerForSurvey consumer = importContext.loadSurveys(true)) { - for (ImportRow<SurveyRow> row : consumer) { - - consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(row); - - persitenceHelper.persistCruise(row.getBean().getCruise()); - - } - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close survey.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - } - - protected void importGearCaracteristics(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { - - if (log.isInfoEnabled()) { - log.info("Import gearCaracteristics.csv file."); - } - importContext.increments(t("tutti.service.genericFormat.import.gearCaracteristics")); - GenericFormatCsvFileResult importFileResult = importContext.getGearCaracteristicFileResult(); - try (CsvConsumerForGearCaracteristic consumer = importContext.loadGearCaracteristics(true)) { - for (ImportRow<GearCaracteristicRow> row : consumer) { - - GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(cruiseContext, row); - - } - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close gearCaracteristic.csv file", e); - } catch (ImportRuntimeException e) { + protected Set<ImportActionSupport> createValidateActions(GenericFormatValidateFileContext importContext) { - importFileResult.addGlobalError(e.getMessage()); - - } - - persitenceHelper.persistGearCaracteristics(); + Set<ImportActionSupport> actions = new LinkedHashSet<>(); + addTechnicalActions(importContext, actions); + actions.add(new ValidateSurveyAction(importContext)); + actions.add(new ValidateGearCaracteristicAction(importContext)); + actions.add(new ValidateOperationAction(importContext)); + actions.add(new ValidateParameterAction(importContext)); + actions.add(new ValidateCatchAction(importContext)); + actions.add(new ValidateMarineLitterAction(importContext)); + actions.add(new ValidateAccidentalCatchAction(importContext)); + actions.add(new ValidateIndividualObservationAction(importContext)); + return actions; } - protected void importOperations(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { - - if (log.isInfoEnabled()) { - log.info("Import operation.csv file."); - } - importContext.increments(t("tutti.service.genericFormat.import.operations")); - GenericFormatCsvFileResult importFileResult = importContext.getOperationFileResult(); - try (CsvConsumerForOperation consumer = importContext.loadOperations(true)) { - for (ImportRow<OperationRow> row : consumer) { - - GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(cruiseContext, row); - - OperationRow bean = row.getBean(); - - FishingOperation fishingOperation = bean.getFishingOperation(); - CatchBatch catchBatch = bean.getCatchBatch(); - - persitenceHelper.persistFishingOperation(cruiseContext, fishingOperation, catchBatch); - - } - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close operation.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); + protected Set<ImportActionSupport> createImportActions(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { - } + Set<ImportActionSupport> actions = new LinkedHashSet<>(); + addTechnicalActions(importContext, actions); + actions.add(new ImportSurveyAction(importContext, persitenceHelper)); + actions.add(new ImportGearCaracteristicAction(importContext, persitenceHelper)); + actions.add(new ImportOperationAction(importContext, persitenceHelper)); + actions.add(new ImportParameterAction(importContext, persitenceHelper)); + actions.add(new ImportCatchAction(importContext, persitenceHelper)); + actions.add(new ImportMarineLitterAction(importContext, persitenceHelper)); + actions.add(new ImportAccidentalCatchAction(importContext, persitenceHelper)); + actions.add(new ImportIndividualObservationAction(importContext, persitenceHelper)); + actions.add(new DoCleanWeightAction(importContext, weightCleaningService)); + actions.add(new DoCheckWeightAction(importContext, this)); + return actions; } - protected void importParameters(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { - - if (log.isInfoEnabled()) { - log.info("Import parameter.csv file."); - } - importContext.increments(t("tutti.service.genericFormat.import.parameters")); - GenericFormatCsvFileResult importFileResult = importContext.getParameterFileResult(); - try (CsvConsumerForParameter consumer = importContext.loadParameters(true)) { - for (ImportRow<ParameterRow> row : consumer) { - - GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); + protected void addTechnicalActions(GenericFormatImportContext importContext, Set<ImportActionSupport> actions) { - } - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close parameter.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - persitenceHelper.persistFishingOperationParameters(); - - } - - protected void importCatches(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { - - if (log.isInfoEnabled()) { - log.info("Import catch.csv file."); - } - importContext.increments(t("tutti.service.genericFormat.import.catches")); - GenericFormatCsvFileResult importFileResult = importContext.getCatchFileResult(); - try (CsvConsumerForCatch consumer = importContext.loadCatches(true)) { - for (ImportRow<CatchRow> row : consumer) { - - GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); - - } - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close catch.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - persitenceHelper.persistSpeciesBatches(); - persitenceHelper.persistBenthosBatches(); - - } - - protected void importMarineLitters(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { - - if (log.isInfoEnabled()) { - log.info("Import marineLitter.csv file."); - } - importContext.increments(t("tutti.service.genericFormat.import.marineLitters")); - GenericFormatCsvFileResult importFileResult = importContext.getMarineLitterFileResult(); - try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters(true)) { - for (ImportRow<MarineLitterRow> row : consumer) { - - GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); - - } - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close marineLitter.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - persitenceHelper.persistMarineLitterBatches(); - - } - - protected void importIndividualObservations(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { - - if (log.isInfoEnabled()) { - log.info("Import individualObservation.csv file."); - } - importContext.increments(t("tutti.service.genericFormat.import.individualObservations")); - GenericFormatCsvFileResult importFileResult = importContext.getIndividualObservationFileResult(); - try (CsvConsumerForIndividualObservation consumer = importContext.loadIndividualObservations(true)) { - for (ImportRow<IndividualObservationRow> row : consumer) { - - GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); - - } - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close individualObservation.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - persitenceHelper.persistIndividualObservationBatches(); - - } - - protected void importAccidentalCatches(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { - - if (log.isInfoEnabled()) { - log.info("Import accidentalCatch.csv file."); - } - importContext.increments(t("tutti.service.genericFormat.import.accidentalCatches")); - GenericFormatCsvFileResult importFileResult = importContext.getAccidentalCatchFileResult(); - try (CsvConsumerForAccidentalCatch consumer = importContext.loadAccidentalCatches(true)) { - for (ImportRow<AccidentalCatchRow> row : consumer) { - - GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); - - } - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close accidentalCatch.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); - - } - - persitenceHelper.persistAccidentalBatches(); - - } - - protected void doCleanWeights(GenericFormatImportContext importContext) { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext operationContext : cruiseContext.getFishingOperationContexts()) { - - progressionModel.increments(t("tutti.service.genericFormat.cleanWeights.fishingOperation", cruiseContext.getCruiseLabel(), operationContext.getFishingOperationLabel())); - - weightCleaningService.cleanFishingOperation(operationContext.getFishingOperation().getId()); - - } - - } - }); - - } - - protected void doCheckWeights(GenericFormatImportContext importContext) { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext operationContext : cruiseContext.getFishingOperationContexts()) { - - progressionModel.increments(t("tutti.service.genericFormat.checkWeights.fishingOperation", cruiseContext.getCruiseLabel(), operationContext.getFishingOperationLabel())); - - Set<String> errors = checkFishingOperation(operationContext.getFishingOperation().getId()); - operationContext.addCheckErrors(errors); - - } - - } - }); + actions.add(new ValidateSampleCategoryAction(importContext)); + actions.add(new ImportReferentialGearAction(importContext, referentialTemporaryGearService)); + actions.add(new ImportReferentialPersonAction(importContext, referentialTemporaryPersonService)); + actions.add(new ImportReferentialSpeciesAction(importContext, referentialTemporarySpeciesService)); + actions.add(new ImportReferentialVesselAction(importContext, referentialTemporaryVesselService)); + actions.add(new ImportProtocolAction(importContext, persistenceService, protocolImportExportService)); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatServiceSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatServiceSupport.java index 032264c..eba354c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatServiceSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatServiceSupport.java @@ -72,7 +72,7 @@ public abstract class GenericFormatServiceSupport extends AbstractTuttiService { } - protected Set<String> checkFishingOperation(String fishingOperationId) { + public Set<String> checkFishingOperation(String fishingOperationId) { if (log.isDebugEnabled()) { log.debug("Will check operation: " + fishingOperationId); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCheckWeightAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCheckWeightAction.java new file mode 100644 index 0000000..b6dcd30 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCheckWeightAction.java @@ -0,0 +1,64 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class DoCheckWeightAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(DoCheckWeightAction.class); + + private final GenericFormatImportService importService; + + public DoCheckWeightAction(GenericFormatImportContext importContext, GenericFormatImportService importService) { + super(importContext); + this.importService = importService; + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid() && importContext.getCatchFileResult().isValid() && importContext.getMarineLitterFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Will check weights."); + } + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext operationContext : cruiseContext.getFishingOperationContexts()) { + + progressionModel.increments(t("tutti.service.genericFormat.checkWeights.fishingOperation", cruiseContext.getCruiseLabel(), operationContext.getFishingOperationLabel())); + + Set<String> errors = importService.checkFishingOperation(operationContext.getFishingOperation().getId()); + operationContext.addCheckErrors(errors); + + } + + } + }); + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCleanWeightAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCleanWeightAction.java new file mode 100644 index 0000000..ad7a270 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/DoCleanWeightAction.java @@ -0,0 +1,61 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.service.catches.WeightCleaningService; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class DoCleanWeightAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(DoCleanWeightAction.class); + + private final WeightCleaningService weightCleaningService; + + public DoCleanWeightAction(GenericFormatImportContext importContext, WeightCleaningService weightCleaningService) { + super(importContext); + this.weightCleaningService = weightCleaningService; + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid() && importContext.getCatchFileResult().isValid() && importContext.getMarineLitterFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Will clean weights."); + } + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext operationContext : cruiseContext.getFishingOperationContexts()) { + + progressionModel.increments(t("tutti.service.genericFormat.cleanWeights.fishingOperation", cruiseContext.getCruiseLabel(), operationContext.getFishingOperationLabel())); + + weightCleaningService.cleanFishingOperation(operationContext.getFishingOperation().getId()); + + } + + } + }); + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java new file mode 100644 index 0000000..076fa09 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportAccidentalCatchAction.java @@ -0,0 +1,69 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAccidentalCatch; +import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportAccidentalCatchAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportAccidentalCatchAction.class); + + private final GenericformatImportPersitenceHelper persitenceHelper; + + public ImportAccidentalCatchAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + super(importContext); + this.persitenceHelper = persitenceHelper; + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Import accidentalCatch.csv file."); + } + importContext.increments(t("tutti.service.genericFormat.import.accidentalCatches")); + GenericFormatCsvFileResult importFileResult = importContext.getAccidentalCatchFileResult(); + try (CsvConsumerForAccidentalCatch consumer = importContext.loadAccidentalCatches(true)) { + for (ImportRow<AccidentalCatchRow> row : consumer) { + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close accidentalCatch.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + persitenceHelper.persistAccidentalBatches(); + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportActionSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportActionSupport.java new file mode 100644 index 0000000..b3e4d42 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportActionSupport.java @@ -0,0 +1,41 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public abstract class ImportActionSupport { + + protected final GenericFormatImportContext importContext; + + protected abstract boolean canExecute(); + + protected abstract void doExecute(); + + protected ImportActionSupport(GenericFormatImportContext importContext) { + this.importContext = importContext; + } + + public void execute() { + + boolean doExecute = canExecute(); + + if (doExecute) { + + doExecute(); + + } else { + + skipExecute(); + + } + } + + protected void skipExecute() { + // by default do nothing + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java new file mode 100644 index 0000000..08826e5 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportCatchAction.java @@ -0,0 +1,70 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForCatch; +import fr.ifremer.tutti.service.genericformat.csv.CatchRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportCatchAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportCatchAction.class); + + private final GenericformatImportPersitenceHelper persitenceHelper; + + public ImportCatchAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + super(importContext); + this.persitenceHelper = persitenceHelper; + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Import catch.csv file."); + } + importContext.increments(t("tutti.service.genericFormat.import.catches")); + GenericFormatCsvFileResult importFileResult = importContext.getCatchFileResult(); + try (CsvConsumerForCatch consumer = importContext.loadCatches(true)) { + for (ImportRow<CatchRow> row : consumer) { + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close catch.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + persitenceHelper.persistSpeciesBatches(); + persitenceHelper.persistBenthosBatches(); + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java new file mode 100644 index 0000000..0eab78c --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportGearCaracteristicAction.java @@ -0,0 +1,69 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForGearCaracteristic; +import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportGearCaracteristicAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportGearCaracteristicAction.class); + + private final GenericformatImportPersitenceHelper persitenceHelper; + + public ImportGearCaracteristicAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + super(importContext); + this.persitenceHelper = persitenceHelper; + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Import gearCaracteristics.csv file."); + } + importContext.increments(t("tutti.service.genericFormat.import.gearCaracteristics")); + GenericFormatCsvFileResult importFileResult = importContext.getGearCaracteristicFileResult(); + try (CsvConsumerForGearCaracteristic consumer = importContext.loadGearCaracteristics(true)) { + for (ImportRow<GearCaracteristicRow> row : consumer) { + + GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(cruiseContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close gearCaracteristic.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + persitenceHelper.persistGearCaracteristics(); + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java new file mode 100644 index 0000000..654dbf7 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java @@ -0,0 +1,69 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForIndividualObservation; +import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportIndividualObservationAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportIndividualObservationAction.class); + + private final GenericformatImportPersitenceHelper persitenceHelper; + + public ImportIndividualObservationAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + super(importContext); + this.persitenceHelper = persitenceHelper; + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Import individualObservation.csv file."); + } + importContext.increments(t("tutti.service.genericFormat.import.individualObservations")); + GenericFormatCsvFileResult importFileResult = importContext.getIndividualObservationFileResult(); + try (CsvConsumerForIndividualObservation consumer = importContext.loadIndividualObservations(true)) { + for (ImportRow<IndividualObservationRow> row : consumer) { + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close individualObservation.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + persitenceHelper.persistIndividualObservationBatches(); + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java new file mode 100644 index 0000000..9ae9099 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportMarineLitterAction.java @@ -0,0 +1,69 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForMarineLitter; +import fr.ifremer.tutti.service.genericformat.csv.MarineLitterRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportMarineLitterAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportMarineLitterAction.class); + + private final GenericformatImportPersitenceHelper persitenceHelper; + + public ImportMarineLitterAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + super(importContext); + this.persitenceHelper = persitenceHelper; + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Import marineLitter.csv file."); + } + importContext.increments(t("tutti.service.genericFormat.import.marineLitters")); + GenericFormatCsvFileResult importFileResult = importContext.getMarineLitterFileResult(); + try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters(true)) { + for (ImportRow<MarineLitterRow> row : consumer) { + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close marineLitter.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + persitenceHelper.persistMarineLitterBatches(); + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java new file mode 100644 index 0000000..d68a876 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java @@ -0,0 +1,76 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForOperation; +import fr.ifremer.tutti.service.genericformat.csv.OperationRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportOperationAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportOperationAction.class); + + private final GenericformatImportPersitenceHelper persitenceHelper; + + public ImportOperationAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + super(importContext); + this.persitenceHelper = persitenceHelper; + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() ; + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Import operation.csv file."); + } + importContext.increments(t("tutti.service.genericFormat.import.operations")); + GenericFormatCsvFileResult importFileResult = importContext.getOperationFileResult(); + try (CsvConsumerForOperation consumer = importContext.loadOperations(true)) { + for (ImportRow<OperationRow> row : consumer) { + + GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(cruiseContext, row); + + OperationRow bean = row.getBean(); + + FishingOperation fishingOperation = bean.getFishingOperation(); + CatchBatch catchBatch = bean.getCatchBatch(); + + persitenceHelper.persistFishingOperation(cruiseContext, fishingOperation, catchBatch); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close operation.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java new file mode 100644 index 0000000..981de16 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportParameterAction.java @@ -0,0 +1,69 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForParameter; +import fr.ifremer.tutti.service.genericformat.csv.ParameterRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportParameterAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportParameterAction.class); + + private final GenericformatImportPersitenceHelper persitenceHelper; + + public ImportParameterAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + super(importContext); + this.persitenceHelper = persitenceHelper; + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Import parameter.csv file."); + } + importContext.increments(t("tutti.service.genericFormat.import.parameters")); + GenericFormatCsvFileResult importFileResult = importContext.getParameterFileResult(); + try (CsvConsumerForParameter consumer = importContext.loadParameters(true)) { + for (ImportRow<ParameterRow> row : consumer) { + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close parameter.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + persitenceHelper.persistFishingOperationParameters(); + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java new file mode 100644 index 0000000..4d282dd --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java @@ -0,0 +1,121 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.genericformat.GenericFormatArchive; +import fr.ifremer.tutti.service.genericformat.GenericFormatFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.util.List; +import java.util.Map; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportProtocolAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportProtocolAction.class); + + private final PersistenceService persistenceService; + + private final ProtocolImportExportService protocolImportExportService; + + public ImportProtocolAction(GenericFormatImportContext importContext, PersistenceService persistenceService, ProtocolImportExportService protocolImportExportService) { + super(importContext); + this.persistenceService = persistenceService; + this.protocolImportExportService = protocolImportExportService; + } + + @Override + protected boolean canExecute() { + return importContext.getReferentialTemporarySpeciesFileResult().isValid() && importContext.getProtocolFileResult().isFound(); + } + + @Override + protected void doExecute() { + + GenericFormatArchive archive = importContext.getImportRequest().getArchive(); + + 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); + + String newName = persistenceService.getFirstAvailableName(tuttiProtocol.getName()); + tuttiProtocol.setName(newName); + + List<Species> referentSpecies = persistenceService.getAllReferentSpecies(); + + // Check missing species + Map<Integer, String> missingSpecies = TuttiProtocols.detectMissingSpecies(tuttiProtocol, referentSpecies); + if (!missingSpecies.isEmpty()) { + + 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); + + importContext.setImportedProtocol(tuttiProtocol); + + } else { + + importContext.increments(t("tutti.service.genericFormat.import.protocol.notValid", tuttiProtocol.getName())); + + } + + } catch (ApplicationTechnicalException e) { + + fileResult.addGlobalError(e.getCause().getMessage()); + + } + + } + + @Override + protected void skipExecute() { + + if (log.isInfoEnabled()) { + log.info("Skip import protocol (no file found or archive is not valid)."); + } + + importContext.increments(t("tutti.service.genericFormat.skip.import.protocol")); + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java new file mode 100644 index 0000000..cfa365b --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java @@ -0,0 +1,98 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.referential.ReferentialImportRequest; +import fr.ifremer.tutti.service.referential.ReferentialImportResult; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryGear; +import fr.ifremer.tutti.service.referential.csv.GearRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportReferentialGearAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportReferentialGearAction.class); + + private final ReferentialTemporaryGearService referentialTemporaryGearService; + + public ImportReferentialGearAction(GenericFormatImportContext importContext, ReferentialTemporaryGearService referentialTemporaryGearService) { + super(importContext); + this.referentialTemporaryGearService = referentialTemporaryGearService; + } + + @Override + protected boolean canExecute() { + return importContext.getReferentialTemporaryGearFileResult().isFound(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Import temporary gears."); + } + + importContext.increments(t("tutti.service.genericFormat.import.temporaryGears")); + + ReferentialImportRequest<Gear, Integer> referentialImportRequest = referentialTemporaryGearService.createReferentialImportRequest(); + + GenericFormatReferentialImportResult<Gear, Integer> importFileResult = importContext.getReferentialTemporaryGearFileResult(); + try (CsvConsumerForTemporaryGear consumer = importContext.loadTemporaryGears(false)) { + for (ImportRow<GearRow> row : consumer) { + consumer.checkRowForGenericFormatImport(row, referentialImportRequest); + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close gears.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + 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)"); + } + + } + + } + + @Override + protected void skipExecute() { + + if (log.isInfoEnabled()) { + log.info("Skip import temporary gears (no file found)."); + } + importContext.increments(t("tutti.service.genericFormat.skip.import.temporaryGears")); + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java new file mode 100644 index 0000000..1c12cda --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java @@ -0,0 +1,99 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.entities.referential.Person; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.referential.ReferentialImportRequest; +import fr.ifremer.tutti.service.referential.ReferentialImportResult; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryPerson; +import fr.ifremer.tutti.service.referential.csv.PersonRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportReferentialPersonAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportReferentialPersonAction.class); + + private final ReferentialTemporaryPersonService referentialTemporaryPersonService; + + public ImportReferentialPersonAction(GenericFormatImportContext importContext, ReferentialTemporaryPersonService referentialTemporaryPersonService) { + super(importContext); + this.referentialTemporaryPersonService = referentialTemporaryPersonService; + } + + @Override + protected boolean canExecute() { + return importContext.getReferentialTemporaryPersonFileResult().isFound(); + } + + @Override + protected void doExecute() { + + importContext.increments(t("tutti.service.genericFormat.import.temporaryPersons")); + + if (log.isInfoEnabled()) { + log.info("Import temporary persons."); + } + + GenericFormatReferentialImportResult<Person, Integer> importFileResult = importContext.getReferentialTemporaryPersonFileResult(); + + ReferentialImportRequest<Person, Integer> referentialImportRequest = referentialTemporaryPersonService.createReferentialImportRequest(); + try (CsvConsumerForTemporaryPerson consumer = importContext.loadTemporaryPersons(false)) { + for (ImportRow<PersonRow> row : consumer) { + consumer.checkRowForGenericFormatImport(row, referentialImportRequest); + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close person.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + 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)"); + } + + } + + } + + @Override + protected void skipExecute() { + + + if (log.isInfoEnabled()) { + log.info("Skip import temporary persons (no file found)."); + } + importContext.increments(t("tutti.service.genericFormat.skip.import.temporaryPersons")); + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java new file mode 100644 index 0000000..6f83300 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java @@ -0,0 +1,100 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.referential.ReferentialImportRequest; +import fr.ifremer.tutti.service.referential.ReferentialImportResult; +import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies; +import fr.ifremer.tutti.service.referential.csv.SpeciesRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportReferentialSpeciesAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportReferentialSpeciesAction.class); + + private final ReferentialTemporarySpeciesService referentialTemporarySpeciesService; + + public ImportReferentialSpeciesAction(GenericFormatImportContext importContext, ReferentialTemporarySpeciesService referentialTemporarySpeciesService) { + super(importContext); + this.referentialTemporarySpeciesService = referentialTemporarySpeciesService; + } + + @Override + protected boolean canExecute() { + return importContext.getReferentialTemporarySpeciesFileResult().isFound(); + } + + @Override + protected void doExecute() { + + importContext.increments(t("tutti.service.genericFormat.import.temporarySpecies")); + + if (log.isInfoEnabled()) { + log.info("Import temporary species."); + } + + ReferentialImportRequest<Species, Integer> referentialImportRequest = referentialTemporarySpeciesService.createReferentialImportRequest(); + + GenericFormatReferentialImportResult<Species, Integer> importFileResult = importContext.getReferentialTemporarySpeciesFileResult(); + try (CsvConsumerForTemporarySpecies consumer = importContext.loadTemporarySpecies(false)) { + for (ImportRow<SpeciesRow> row : consumer) { + consumer.checkRowForGenericFormatImport(row, referentialImportRequest); + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close species.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + 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)"); + } + + } + + + } + + @Override + protected void skipExecute() { + + if (log.isInfoEnabled()) { + log.info("Skip import temporary species (no file found)."); + } + importContext.increments(t("tutti.service.genericFormat.skip.import.temporarySpecies")); + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java new file mode 100644 index 0000000..6d0c735 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java @@ -0,0 +1,95 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.referential.ReferentialImportRequest; +import fr.ifremer.tutti.service.referential.ReferentialImportResult; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryVessel; +import fr.ifremer.tutti.service.referential.csv.VesselRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportReferentialVesselAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportReferentialVesselAction.class); + + private final ReferentialTemporaryVesselService referentialTemporaryVesselService; + + public ImportReferentialVesselAction(GenericFormatImportContext importContext, ReferentialTemporaryVesselService referentialTemporaryVesselService) { + super(importContext); + this.referentialTemporaryVesselService = referentialTemporaryVesselService; + } + + @Override + protected boolean canExecute() { + return importContext.getReferentialTemporaryVesselFileResult().isFound(); + } + + @Override + protected void doExecute() { + + importContext.increments(t("tutti.service.genericFormat.import.temporaryVessels")); + + ReferentialImportRequest<Vessel, String> referentialImportRequest = referentialTemporaryVesselService.createReferentialImportRequest(); + + GenericFormatReferentialImportResult<Vessel, String> importFileResult = importContext.getReferentialTemporaryVesselFileResult(); + try (CsvConsumerForTemporaryVessel consumer = importContext.loadTemporaryVessels(false)) { + for (ImportRow<VesselRow> row : consumer) { + consumer.checkRowForGenericFormatImport(row, referentialImportRequest); + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close vessel.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + 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)"); + } + + } + + } + + @Override + protected void skipExecute() { + + if (log.isInfoEnabled()) { + log.info("Skip import temporary vessels (no file found)."); + } + importContext.increments(t("tutti.service.genericFormat.skip.import.temporaryVessels")); + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java new file mode 100644 index 0000000..c9d91e0 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java @@ -0,0 +1,73 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; +import fr.ifremer.tutti.service.genericformat.csv.SurveyRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ImportSurveyAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportSurveyAction.class); + + private final GenericformatImportPersitenceHelper persitenceHelper; + + public ImportSurveyAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + super(importContext); + this.persitenceHelper = persitenceHelper; + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Import survey.csv file."); + } + importContext.increments(t("tutti.service.genericFormat.import.cruises")); + + if (importContext.isCanImportSurvey()) { + + GenericFormatCsvFileResult importFileResult = importContext.getSurveyFileResult(); + try (CsvConsumerForSurvey consumer = importContext.loadSurveys(true)) { + for (ImportRow<SurveyRow> row : consumer) { + + consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(row); + + persitenceHelper.persistCruise(row.getBean().getCruise()); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close survey.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java new file mode 100644 index 0000000..db653e6 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java @@ -0,0 +1,71 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAccidentalCatch; +import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ValidateAccidentalCatchAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ValidateAccidentalCatchAction.class); + + public ValidateAccidentalCatchAction(GenericFormatImportContext importContext) { + super(importContext); + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid() && importContext.getOperationFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Validate accidentalCatch.csv file."); + } + + GenericFormatCsvFileResult importFileResult = importContext.getAccidentalCatchFileResult(); + try (CsvConsumerForAccidentalCatch consumer = importContext.loadAccidentalCatches(false)) { + for (ImportRow<AccidentalCatchRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.accidentalCatches", row.getLineNumber())); + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + + if (row.isValid()) { + consumer.prepareRowForPersist(operationContext, row); + } + + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close accidentalCatch.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java new file mode 100644 index 0000000..8eb7f42 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java @@ -0,0 +1,71 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForCatch; +import fr.ifremer.tutti.service.genericformat.csv.CatchRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ValidateCatchAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ValidateCatchAction.class); + + public ValidateCatchAction(GenericFormatImportContext importContext) { + super(importContext); + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid()&& importContext.getOperationFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Validate catch.csv file."); + } + + GenericFormatCsvFileResult importFileResult = importContext.getCatchFileResult(); + try (CsvConsumerForCatch consumer = importContext.loadCatches(false)) { + for (ImportRow<CatchRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.catches", row.getLineNumber())); + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + + if (row.isValid()) { + consumer.prepareRowForPersist(operationContext, row); + } + + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close catch.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java new file mode 100644 index 0000000..d02c306 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java @@ -0,0 +1,71 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForGearCaracteristic; +import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ValidateGearCaracteristicAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ValidateGearCaracteristicAction.class); + + public ValidateGearCaracteristicAction(GenericFormatImportContext importContext) { + super(importContext); + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid()&& importContext.getSurveyFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Validate gearCaracteristics.csv file."); + } + + GenericFormatCsvFileResult importFileResult = importContext.getGearCaracteristicFileResult(); + try (CsvConsumerForGearCaracteristic consumer = importContext.loadGearCaracteristics(false)) { + for (ImportRow<GearCaracteristicRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.gearCaracteristics", row.getLineNumber())); + + GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); + + if (row.isValid()) { + consumer.prepareRowForPersist(cruiseContext, row); + } + + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close gearCaracteristic.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java new file mode 100644 index 0000000..c3ee38b --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java @@ -0,0 +1,72 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForIndividualObservation; +import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ValidateIndividualObservationAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ValidateIndividualObservationAction.class); + + public ValidateIndividualObservationAction(GenericFormatImportContext importContext) { + super(importContext); + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid()&& importContext.getOperationFileResult().isValid(); + } + + @Override + protected void doExecute() { + + + if (log.isInfoEnabled()) { + log.info("Validate individualObservation.csv file."); + } + + GenericFormatCsvFileResult importFileResult = importContext.getIndividualObservationFileResult(); + try (CsvConsumerForIndividualObservation consumer = importContext.loadIndividualObservations(false)) { + for (ImportRow<IndividualObservationRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.individualObservations", row.getLineNumber())); + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + + if (row.isValid()) { + consumer.prepareRowForPersist(operationContext, row); + } + + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close individualObservation.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java new file mode 100644 index 0000000..3c6e296 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java @@ -0,0 +1,71 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForMarineLitter; +import fr.ifremer.tutti.service.genericformat.csv.MarineLitterRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ValidateMarineLitterAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ValidateMarineLitterAction.class); + + public ValidateMarineLitterAction(GenericFormatImportContext importContext) { + super(importContext); + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid()&& importContext.getOperationFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Validate marineLitter.csv file."); + } + + GenericFormatCsvFileResult importFileResult = importContext.getMarineLitterFileResult(); + try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters(false)) { + for (ImportRow<MarineLitterRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.marineLitters", row.getLineNumber())); + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + + if (row.isValid()) { + consumer.prepareRowForPersist(operationContext, row); + } + + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close marineLitter.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java new file mode 100644 index 0000000..1dac8ae --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java @@ -0,0 +1,81 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForOperation; +import fr.ifremer.tutti.service.genericformat.csv.OperationRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ValidateOperationAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ValidateOperationAction.class); + + public ValidateOperationAction(GenericFormatImportContext importContext) { + super(importContext); + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid()&& importContext.getSurveyFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Validate operation.csv file."); + } + + GenericFormatCsvFileResult importFileResult = importContext.getOperationFileResult(); + try (CsvConsumerForOperation consumer = importContext.loadOperations(false)) { + for (ImportRow<OperationRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.operations", row.getLineNumber())); + + GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); + + if (row.isValid()) { + + consumer.prepareRowForPersist(cruiseContext, row); + OperationRow bean = row.getBean(); + + FishingOperation fishingOperation = bean.getFishingOperation(); + CatchBatch catchBatch = bean.getCatchBatch(); + + importContext.addImportedFishingOperation(fishingOperation, catchBatch); + + } + + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close operation.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java new file mode 100644 index 0000000..e0c7bcc --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java @@ -0,0 +1,71 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForParameter; +import fr.ifremer.tutti.service.genericformat.csv.ParameterRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ValidateParameterAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ValidateParameterAction.class); + + public ValidateParameterAction(GenericFormatImportContext importContext) { + super(importContext); + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid() && importContext.getOperationFileResult().isValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Validate parameter.csv file."); + } + + GenericFormatCsvFileResult importFileResult = importContext.getParameterFileResult(); + try (CsvConsumerForParameter consumer = importContext.loadParameters(false)) { + for (ImportRow<ParameterRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.parameters", row.getLineNumber())); + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + + if (row.isValid()) { + consumer.prepareRowForPersist(operationContext, row); + } + + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close parameter.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSampleCategoryAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSampleCategoryAction.java new file mode 100644 index 0000000..9c391aa --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSampleCategoryAction.java @@ -0,0 +1,73 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSampleCategory; +import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ValidateSampleCategoryAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ValidateSampleCategoryAction.class); + + public ValidateSampleCategoryAction(GenericFormatImportContext importContext) { + super(importContext); + } + + @Override + protected boolean canExecute() { + return true; + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Validate sample category model."); + } + + importContext.increments(t("tutti.service.genericFormat.import.sampleCategoryModel")); + + GenericFormatCsvFileResult importFileResult = importContext.getSampleCategoryFileResult(); + try (CsvConsumerForSampleCategory consumer = importContext.loadSampleCategories(false)) { + + int nbCategories = 0; + for (ImportRow<SampleCategoryRow> row : consumer) { + consumer.validateRow(row, importContext); + nbCategories++; + } + + if (nbCategories != importContext.getImportRequest().getSampleCategoryModel().getNbSampling()) { + + throw new ImportRuntimeException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.missingCategories")); + + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close sampleCategory.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java new file mode 100644 index 0000000..33dd53e --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java @@ -0,0 +1,74 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; +import fr.ifremer.tutti.service.genericformat.csv.SurveyRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/3/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class ValidateSurveyAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ValidateSurveyAction.class); + + public ValidateSurveyAction(GenericFormatImportContext importContext) { + super(importContext); + } + + @Override + protected boolean canExecute() { + return importContext.isTechnicalFilesValid(); + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Validate survey.csv file."); + } + + GenericFormatCsvFileResult importFileResult = importContext.getSurveyFileResult(); + try (CsvConsumerForSurvey consumer = importContext.loadSurveys(false)) { + for (ImportRow<SurveyRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.cruises", row.getLineNumber())); + + consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(row); + + Cruise cruise = row.getBean().getCruise(); + + boolean createCruise = TuttiEntities.isNew(cruise); + importContext.addImportedCruise(cruise, !createCruise); + + } + + importFileResult.flushErrors(consumer); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close survey.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + +} -- 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 88ebc3e23440efea527290a0794e598b5152deb0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 3 19:13:11 2015 +0100 continue report + i18n --- .../resources/ftl/genericFormatImportReport_fr.ftl | 299 ++++++++++++++------- .../ftl/genericFormatValidateReport_fr.ftl | 76 +++--- .../resources/i18n/tutti-service_en_GB.properties | 17 ++ .../resources/i18n/tutti-service_fr_FR.properties | 28 +- 4 files changed, 265 insertions(+), 155 deletions(-) diff --git a/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl b/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl index 9b6aff9..5e60578 100644 --- a/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl +++ b/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl @@ -20,16 +20,64 @@ #L% --> +<#macro renderErrors errorsEntries> +<table> + <tr> + <th>Ligne</th> + <th>Erreur</th> + </tr> + <#list errorsEntries as entry> + <tr> + <td>${entry.key}</td> + <td> + <ul> + <#list entry.value as error> + <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> - <li>Nom du fichier : ${fileResult.filename}</li> - <#if !fileResult.imported??> + <li>Nom du fichier : <span class="bold">${fileResult.filename}</span></li> + <#if !fileResult.imported> <li class="error">Fichier non importé</li> </ul> <#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> @@ -37,50 +85,33 @@ <#if errorsEntries?size == 0> <#return> </#if> -<table> - <tr> - <th>Ligne</th> - <th>Erreur</th> - </tr> - <#list errorsEntries as entry> - <tr> - <td>${entry.key}</td> - <td> - <pre>${entry.value}</pre> - </td> - </tr> - </#list> -</table> + <@renderErrors errorsEntries=errorsEntries/> </#macro> <#macro renderReferentialImportFile fileResult> <#assign errorsEntries = fileResult.errorsEntries> <ul> <li>Nom du fichier : <span class="bold">${fileResult.filename}</span></li> - <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.imported> + <li>Fichier non importé</li> + </ul> + <#return> + </#if> +<li>Nombre de lignes à importer : ${fileResult.linesCount}</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> + <li class="error">Nombre de lignes en erreurs : ${errorsEntries?size}</li> </#if> </ul> <#if errorsEntries?size == 0> <#return> </#if> -<table> - <tr> - <th>Ligne</th> - <th>Erreur</th> - </tr> - <#list errorsEntries as entry> - <tr> - <td>${entry.key}</td> - <td> - <pre>${entry.value}</pre> - </td> - </tr> - </#list> -</table> + <@renderErrors errorsEntries=errorsEntries/> </#macro> <#macro renderReferentialGearList title entries> @@ -178,6 +209,32 @@ </table> </#macro> +<#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> + <html> <head> <style type="text/css"> @@ -190,10 +247,23 @@ size: A4 landscape; } - 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 [...] + } + + .nextPage { + page-break-after: always; } .bold { @@ -205,6 +275,12 @@ font-weight: bold; } + h1 { + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKEAAAAeCAYAAABEzX4WAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gsYESwznZhaYQAAC8VJREFUeNrtnHmQHPV1xz+vu+fanZm9b2l1YFlCSGBkkI3DYQpwqrI7rFwuK44ph8QmcQyuUCQYl3EO4xg7wQaDBSZCMahQIiiBjXZWoiiIywIZZbkMiAAxhyWxOliJPbTH3N0vf/x6tKPdjQMY5BGaV9PVU7/+Xb2/7+/73vd1zwrHmW3ZsoXu7m6SyeRFIhIHxgBUNSsiu4GDIpLv7u52i20eeeQRLrroonc95ubNm1m1ahUVe39MjkMQ1qtqN3CBqp4sIiuAw0BaVV8BBkTkGeBRVd0nIqOJRKKQTCarLMuyuru7JwCSyWRMRCw [...] + width: 100%; + text-align: center; + } + h1, h4 { color: ${blueColor}; font-weight: bold; @@ -227,7 +303,7 @@ } td, th { - padding: 1pt 5pt; + /*padding: 1pt 5pt;*/ border-left: 1px solid #ccc; border-right: 1px solid #ccc; } @@ -246,7 +322,7 @@ <h1>Rapport de d'import générique</h1> -<h2>Méta-données</h2> +<h2>Informations générales</h2> <ul> <li>Fichier: ${importConfiguration.importFile.name}</li> @@ -254,156 +330,173 @@ <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> +<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> -<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> +<h2 class="nextPage"></h2> -<p>Liste des erreurs détectées:</p> -<ul> - <#list archiveLayoutErrors as error> - <li class="error">${error}</li> - </#list> -</ul> -</#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.imported && 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é importé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é importé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é importé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é importé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é importé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é importé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é importé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> -<p>Des observations individuelles ont été importés.</p> +<#if fileResult.valid> +<p>Des observations individuelles ont été importées.</p> <strong>TODO</strong> </#if> + </body> </html> diff --git a/tutti-service/src/main/resources/ftl/genericFormatValidateReport_fr.ftl b/tutti-service/src/main/resources/ftl/genericFormatValidateReport_fr.ftl index 7fb07af..6147716 100644 --- a/tutti-service/src/main/resources/ftl/genericFormatValidateReport_fr.ftl +++ b/tutti-service/src/main/resources/ftl/genericFormatValidateReport_fr.ftl @@ -209,6 +209,32 @@ </table> </#macro> +<#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> + <html> <head> <style type="text/css"> @@ -221,16 +247,6 @@ 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 [...] @@ -255,6 +271,16 @@ font-weight: bold; } + .nextPage { + page-break-after: always; + } + + h1 { + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKEAAAAeCAYAAABEzX4WAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gsYESwznZhaYQAAC8VJREFUeNrtnHmQHPV1xz+vu+fanZm9b2l1YFlCSGBkkI3DYQpwqrI7rFwuK44ph8QmcQyuUCQYl3EO4xg7wQaDBSZCMahQIiiBjXZWoiiIywIZZbkMiAAxhyWxOliJPbTH3N0vf/x6tKPdjQMY5BGaV9PVU7/+Xb2/7+/73vd1zwrHmW3ZsoXu7m6SyeRFIhIHxgBUNSsiu4GDIpLv7u52i20eeeQRLrroonc95ubNm1m1ahUVe39MjkMQ1qtqN3CBqp4sIiuAw0BaVV8BBkTkGeBRVd0nIqOJRKKQTCarLMuyuru7JwCSyWRMRCw [...] + width: 100%; + text-align: center; + } + h1, h4 { color: ${blueColor}; font-weight: bold; @@ -290,10 +316,6 @@ background: #fff; } - .nextPage { - page-break-after: always; - } - </style> </head> <body> @@ -308,32 +330,6 @@ <li>Série de campagne: ${program.name}</li> </ul> -<#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> - <table align="center"> <thead> <tr> diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index 7009559..ed06934 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -172,20 +172,25 @@ tutti.service.genericFormat.import.accidentalCatches= tutti.service.genericFormat.import.catches= tutti.service.genericFormat.import.computeReport= tutti.service.genericFormat.import.cruises= +tutti.service.genericFormat.import.error.beginDateNotDefined= tutti.service.genericFormat.import.error.cruiseAlreadyExist= tutti.service.genericFormat.import.error.cruiseAlreadyImported= +tutti.service.genericFormat.import.error.cruiseNotDefined= tutti.service.genericFormat.import.error.cruiseNotFound= tutti.service.genericFormat.import.error.cruiseNotValid= tutti.service.genericFormat.import.error.fishingOperationAlreadyImported= tutti.service.genericFormat.import.error.fishingOperationNotFoundInCruise= tutti.service.genericFormat.import.error.fishingOperationNotValid= tutti.service.genericFormat.import.error.gearNotFoundInCruise= +tutti.service.genericFormat.import.error.mismatchProgram= +tutti.service.genericFormat.import.error.programNotDefined= tutti.service.genericFormat.import.gearCaracteristics= tutti.service.genericFormat.import.individualObservations= tutti.service.genericFormat.import.marineLitters= tutti.service.genericFormat.import.operations= tutti.service.genericFormat.import.parameters= tutti.service.genericFormat.import.protocol= +tutti.service.genericFormat.import.protocol.notValid= tutti.service.genericFormat.import.sampleCategoryModel= tutti.service.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching= tutti.service.genericFormat.import.sampleCategoryModel.error.codeNotMatching= @@ -214,6 +219,10 @@ tutti.service.genericFormat.persist.operation.speciesBatches= tutti.service.genericFormat.remove.existingCruise.fishingOperation= tutti.service.genericFormat.reuse.protocol= tutti.service.genericFormat.skip.import.protocol= +tutti.service.genericFormat.skip.import.temporaryGears= +tutti.service.genericFormat.skip.import.temporaryPersons= +tutti.service.genericFormat.skip.import.temporarySpecies= +tutti.service.genericFormat.skip.import.temporaryVessels= tutti.service.genericFormat.validate.accidentalCatches= tutti.service.genericFormat.validate.catches= tutti.service.genericFormat.validate.computeReport= @@ -322,8 +331,10 @@ tutti.service.referential.import.gear.cannotDeleteNotExisting.error= tutti.service.referential.import.gear.error.cannotDeleteWithoutId= tutti.service.referential.import.gear.error.cannotUpdateOrDeleteForGenericFormatImport= tutti.service.referential.import.gear.error.existingName= +tutti.service.referential.import.gear.error.id.alreaydAdded= tutti.service.referential.import.gear.error.idNotNegative= tutti.service.referential.import.gear.error.idNotTemporary= +tutti.service.referential.import.gear.error.name.alreaydAdded= tutti.service.referential.import.gear.error.noId= tutti.service.referential.import.gear.error.noName= tutti.service.referential.import.gear.error.notExistingId= @@ -335,8 +346,10 @@ tutti.service.referential.import.person.cannotDeleteNotExisting.error= tutti.service.referential.import.person.error.cannotDeleteWithoutId= tutti.service.referential.import.person.error.cannotUpdateOrDeleteForGenericFormatImport= tutti.service.referential.import.person.error.existingName= +tutti.service.referential.import.person.error.id.alreaydAdded= tutti.service.referential.import.person.error.idNotNegative= tutti.service.referential.import.person.error.idNotTemporary= +tutti.service.referential.import.person.error.name.alreaydAdded= tutti.service.referential.import.person.error.noId= tutti.service.referential.import.person.error.noName= tutti.service.referential.import.person.error.notExistingId= @@ -349,8 +362,10 @@ tutti.service.referential.import.species.error= tutti.service.referential.import.species.error.cannotDeleteWithoutId= tutti.service.referential.import.species.error.cannotUpdateOrDeleteForGenericFormatImport= tutti.service.referential.import.species.error.existingName= +tutti.service.referential.import.species.error.id.alreaydAdded= tutti.service.referential.import.species.error.idNotNegative= tutti.service.referential.import.species.error.idNotTemporary= +tutti.service.referential.import.species.error.name.alreaydAdded= tutti.service.referential.import.species.error.noId= tutti.service.referential.import.species.error.noName= tutti.service.referential.import.species.error.notExistingId= @@ -362,7 +377,9 @@ tutti.service.referential.import.vessel.codePrefixMissing.error= tutti.service.referential.import.vessel.error.cannotDeleteWithoutId= tutti.service.referential.import.vessel.error.cannotUpdateOrDeleteForGenericFormatImport= tutti.service.referential.import.vessel.error.existingRegistrationCode= +tutti.service.referential.import.vessel.error.id.alreaydAdded= tutti.service.referential.import.vessel.error.idNotTemporary= +tutti.service.referential.import.vessel.error.name.alreaydAdded= tutti.service.referential.import.vessel.error.noId= tutti.service.referential.import.vessel.error.noRegistrationCode= tutti.service.referential.import.vessel.error.notExistingId= 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 1b27464..aeb13b0 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,17 +11,6 @@ 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.genericFormat.import.error.programNotDefined=La série de campagne n'est pas renseignée -tutti.service.genericFormat.import.error.cruiseNotDefined=La campagne n'est pas définie -tutti.service.genericFormat.import.error.beginDateNotDefined=La date de début de campagne n'est pas définie -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 @@ -146,15 +135,18 @@ tutti.service.genericFormat.import.accidentalCatches=Import des captures acciden tutti.service.genericFormat.import.catches=Import des captures tutti.service.genericFormat.import.computeReport=Génération du rapport d'import tutti.service.genericFormat.import.cruises=Import des campagnes +tutti.service.genericFormat.import.error.beginDateNotDefined=La date de début de campagne n'est pas définie tutti.service.genericFormat.import.error.cruiseAlreadyExist=Il existe déjà une campagne avec ce nom %s tutti.service.genericFormat.import.error.cruiseAlreadyImported=La campagne avec ce nom %s a déjà été importée +tutti.service.genericFormat.import.error.cruiseNotDefined=La campagne n'est pas définie tutti.service.genericFormat.import.error.cruiseNotFound=La campagne (année\: %s, série\: %s, série partielle %s) n'existe pas -tutti.service.genericFormat.import.error.mismatchProgram=La campagne (année\: %s, série\: %s, série partielle %s) devrait utiliser la série %s (code %s) tutti.service.genericFormat.import.error.cruiseNotValid=La campagne n'est pas valide \: <ul>%s</ul> tutti.service.genericFormat.import.error.fishingOperationAlreadyImported=Un trait %s - %s - %s -%s a déjà été importé dans la campagne %s tutti.service.genericFormat.import.error.fishingOperationNotFoundInCruise=Le trait %s - %s - %s -%s n'existe pas dans la campagne %s tutti.service.genericFormat.import.error.fishingOperationNotValid=Le trait n'est pas valide \:\n%s tutti.service.genericFormat.import.error.gearNotFoundInCruise=L'engin %s (position %s) non trouvé dans la campagne %s +tutti.service.genericFormat.import.error.mismatchProgram=La campagne (année\: %s, série\: %s, série partielle %s) devrait utiliser la série %s (code %s) +tutti.service.genericFormat.import.error.programNotDefined=La série de campagne n'est pas renseignée tutti.service.genericFormat.import.gearCaracteristics=Import des caractéristiques d'engin tutti.service.genericFormat.import.individualObservations=Import des observations individuelles tutti.service.genericFormat.import.marineLitters=Import des macro-déchets @@ -190,6 +182,10 @@ tutti.service.genericFormat.persist.operation.speciesBatches=Sauvegarde des lots tutti.service.genericFormat.remove.existingCruise.fishingOperation=Suppression du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.reuse.protocol=Réutilisation du protocol existant %s tutti.service.genericFormat.skip.import.protocol=Pas de protocole à importer +tutti.service.genericFormat.skip.import.temporaryGears= +tutti.service.genericFormat.skip.import.temporaryPersons= +tutti.service.genericFormat.skip.import.temporarySpecies= +tutti.service.genericFormat.skip.import.temporaryVessels= 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=Générigation du rapport de validation @@ -297,8 +293,10 @@ tutti.service.referential.import.error.vessel.used=Le navire temporaire '%s' est tutti.service.referential.import.gear.cannotDeleteNotExisting.error=L'engin temporaire d'identifiant %s n'extsite pas, impossible de la supprimer tutti.service.referential.import.gear.error.cannotDeleteWithoutId=L'identifiant est obligatoire pour la suppression tutti.service.referential.import.gear.error.existingName=L'engin '%s' n'a pas été ajouté au référentiel car il est déjà présent +tutti.service.referential.import.gear.error.id.alreaydAdded=Un engin a déjà été importé avec cet identifiant %s tutti.service.referential.import.gear.error.idNotNegative=L'identifiant d'un engin temporaire doit être négatif tutti.service.referential.import.gear.error.idNotTemporary=L'identifiant %s n'est pas un identifiant temporaire d'engin +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.noId=Un identifiant temporaire d'engin est obligatoire tutti.service.referential.import.gear.error.noName=Le nom de l'engin est obligatoire tutti.service.referential.import.gear.error.notExistingId=L'identifiant '%s' n'a pas été trouvé parmi les engins temporaires @@ -309,8 +307,10 @@ tutti.service.referential.import.gears.error=Erreur lors de l'import des engins tutti.service.referential.import.person.cannotDeleteNotExisting.error=La personne temporaire d'identifiant %s n'extsite pas, impossible de la supprimer tutti.service.referential.import.person.error.cannotDeleteWithoutId=L'identifiant est obligatoire pour la suppression tutti.service.referential.import.person.error.existingName=Une personne avec ce nom %s (nom + prénom) existe déjà +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.idNotNegative=L'identifiant d'une personne temporaire doit être négatif tutti.service.referential.import.person.error.idNotTemporary=L'identifiant %s n'est pas un identifiant temporaire de personne +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.person.error.noId=Un identifiant temporaire de personne est obligatoire tutti.service.referential.import.person.error.noName=Le nom de la personne (prénom ou nom) est obligatoire tutti.service.referential.import.person.error.notExistingId=L'identifiant '%s' n'a pas été trouvé parmi les personnes temporaires @@ -322,8 +322,10 @@ tutti.service.referential.import.species.cannotDeleteNotExisting.error=L'espèce tutti.service.referential.import.species.error=Erreur lors de l'import des espèces du fichier %s tutti.service.referential.import.species.error.cannotDeleteWithoutId=L'identifiant est obligatoire pour la suppression tutti.service.referential.import.species.error.existingName=L'espèce '%s' n'a pas été ajoutée au référentiel car elle est déjà présente +tutti.service.referential.import.species.error.id.alreaydAdded=Un taxon a déjà été importé avec cet identifiant %s tutti.service.referential.import.species.error.idNotNegative=L'identifiant d'une espèce temporaire doit être négatif tutti.service.referential.import.species.error.idNotTemporary=L'identifiant %s n'est pas un identifiant temporaire de taxon +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.noId=Un identifiant temporaire de taxon est obligatoire tutti.service.referential.import.species.error.noName=Le nom pour l'espèce %s est obligatoire. tutti.service.referential.import.species.error.notExistingId=L'identifiant '%s' n'a pas été trouvé parmi les espèces temporaires @@ -333,7 +335,9 @@ tutti.service.referential.import.vessel.cannotDeleteNotExisting.error=Le navire tutti.service.referential.import.vessel.codePrefixMissing.error=L'identifiant d'un navire temporaire doit commencer par %1$s \: %2$s tutti.service.referential.import.vessel.error.cannotDeleteWithoutId=L'identifiant est obligatoire pour la suppression tutti.service.referential.import.vessel.error.existingRegistrationCode=Le navire '%s' n'a pas été ajouté au référentiel car il est déjà présent +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.idNotTemporary=L'identifiant %s n'est pas un identifiant temporaire de navire +tutti.service.referential.import.vessel.error.name.alreaydAdded=Un navire a déjà été importé avec cette immatriculation %s tutti.service.referential.import.vessel.error.noId=Un identifiant temporaire de navire est obligatoire tutti.service.referential.import.vessel.error.noRegistrationCode=L'immatriculation est obligatoire tutti.service.referential.import.vessel.error.notExistingId=L'identifiant '%s' n'a pas été trouvé parmi les navires temporaires -- 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 6e3e89190319d5e9d4c10962964f62f73c10a3d9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 3 19:13:28 2015 +0100 fix report extension in save report actions --- .../genericformat/actions/SaveGenericFormatImportReportAction.java | 4 ++-- .../genericformat/actions/SaveGenericFormatValidateReportAction.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatImportReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatImportReportAction.java index 813f715..3b65bac 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatImportReportAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatImportReportAction.java @@ -46,10 +46,10 @@ public class SaveGenericFormatImportReportAction extends AbstractTuttiAction<Gen getConfig().getGenericFormatReportBackupDirectory(), false, "import-report-" + getModel().getProgram().getId() + "-" + DF.format(new Date()), - "zip", + "pdf", t("tutti.genericFormat.title.choose.saveImportReportfile"), t("tutti.genericFormat.action.chooseImportReportFile"), - "^.+\\.zip$", t("tutti.common.file.zip")); + "^.+\\.pdf", t("tutti.common.file.pdf")); doAction = targetFile != null; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatValidateReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatValidateReportAction.java index fdbe4b4..41d2cef 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatValidateReportAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatValidateReportAction.java @@ -46,10 +46,10 @@ public class SaveGenericFormatValidateReportAction extends AbstractTuttiAction<G getConfig().getGenericFormatReportBackupDirectory(), false, "validate-report-" + getModel().getProgram().getId() + "-" + DF.format(new Date()), - "zip", + "pdf", t("tutti.genericFormat.title.choose.saveValidateReportfile"), t("tutti.genericFormat.action.chooseValidateReportFile"), - "^.+\\.zip$", t("tutti.common.file.zip")); + "^.+\\.pdf", t("tutti.common.file.pdf")); doAction = targetFile != null; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm