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>.