This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit d7cb746d6ab0f7b9e5d7fa9138e9acb6ddd513f6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Feb 13 17:29:20 2015 +0100 continue import --- .../genericformat/GenericFormatImportResult.java | 56 ++++ .../genericformat/GenericFormatImportService.java | 335 ++++++++++++++++++++- .../service/genericformat/GlobalImportContext.java | 47 +-- .../consumer/CruiseAlreadyExistException.java | 32 ++ .../consumer/CruiseNotValidException.java | 58 ++++ .../consumer/CsvConsumerForAccidentalCatch.java | 40 ++- .../consumer/CsvConsumerForCatch.java | 31 +- .../consumer/CsvConsumerForGearCaracteristic.java | 23 ++ .../CsvConsumerForIndividualObservation.java | 31 +- .../consumer/CsvConsumerForMarineLitter.java | 31 +- .../consumer/CsvConsumerForOperation.java | 31 +- .../consumer/CsvConsumerForParameter.java | 31 +- .../consumer/CsvConsumerForSampleCategory.java | 8 +- .../consumer/CsvConsumerForSurvey.java | 49 ++- .../resources/i18n/tutti-service_en_GB.properties | 19 ++ .../resources/i18n/tutti-service_fr_FR.properties | 23 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 4 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 + 18 files changed, 797 insertions(+), 56 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java index 4fe8680..90c96a1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java @@ -2,6 +2,12 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.collect.ImmutableSet; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +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.referential.ReferentialImportResult; import java.util.LinkedHashSet; import java.util.Set; @@ -20,6 +26,16 @@ public class GenericFormatImportResult { private final Set<String> errors; + private TuttiProtocol protocol; + + private ReferentialImportResult<Gear> importedGears; + + private ReferentialImportResult<Person> importedPersons; + + private ReferentialImportResult<Species> importedSpecies; + + private ReferentialImportResult<Vessel> importedVessels; + public GenericFormatImportResult(GenericFormatArchive archive) { this.archive = archive; this.importedCruises = new LinkedHashSet<>(); @@ -34,6 +50,10 @@ public class GenericFormatImportResult { return ImmutableSet.copyOf(importedCruises); } + public TuttiProtocol getProtocol() { + return protocol; + } + public Set<String> getErrors() { return ImmutableSet.copyOf(errors); } @@ -46,4 +66,40 @@ public class GenericFormatImportResult { errors.add(error); } + public void setProtocol(TuttiProtocol protocol) { + this.protocol = protocol; + } + + public ReferentialImportResult<Gear> getImportedGears() { + return importedGears; + } + + public void setImportedGears(ReferentialImportResult<Gear> importedGears) { + this.importedGears = importedGears; + } + + public ReferentialImportResult<Person> getImportedPersons() { + return importedPersons; + } + + public void setImportedPersons(ReferentialImportResult<Person> importedPersons) { + this.importedPersons = importedPersons; + } + + public ReferentialImportResult<Species> getImportedSpecies() { + return importedSpecies; + } + + public void setImportedSpecies(ReferentialImportResult<Species> importedSpecies) { + this.importedSpecies = importedSpecies; + } + + public ReferentialImportResult<Vessel> getImportedVessels() { + return importedVessels; + } + + public void setImportedVessels(ReferentialImportResult<Vessel> importedVessels) { + this.importedVessels = importedVessels; + } + } 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 96eb56c..e20e443 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,18 +3,53 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.ProgressionModel; 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.AbstractTuttiService; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; +import fr.ifremer.tutti.service.ValidationService; import fr.ifremer.tutti.service.catches.WeightComputingService; +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.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.protocol.ProtocolImportExportService; +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.ReferentialTemporaryPersonService; import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService; import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService; +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 org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.File; @@ -24,6 +59,8 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.List; +import static org.nuiton.i18n.I18n.t; + /** * Created on 2/11/15. * @@ -36,6 +73,8 @@ public class GenericFormatImportService extends AbstractTuttiService { protected PersistenceService persistenceService; + protected ValidationService validationService; + protected WeightComputingService weightComputingService; protected DecoratorService decoratorService; @@ -106,13 +145,301 @@ public class GenericFormatImportService extends AbstractTuttiService { GenericFormatArchive archive = GenericFormatArchive.forImport(importFile, context.getConfig().getTmpDirectory()); archive.checkArchiveLayout(); - GlobalImportContext importContext = new GlobalImportContext(persistenceService, archive, program); + try (GlobalImportContext importContext = new GlobalImportContext(persistenceService, + archive, + ';', + program, + context.getSampleCategoryModel())) { + + GenericFormatImportResult result = new GenericFormatImportResult(archive); + + checkSampleCategoryModel(importContext, result, progressionModel); + importTemporaryGears(importContext, result, progressionModel); + importTemporaryPersons(importContext, result, progressionModel); + importTemporarySpecies(importContext, result, progressionModel); + importTemporaryVessels(importContext, result, progressionModel); + importProtocol(importContext, result, progressionModel); + importCruises(importContext, result, progressionModel); + importGearCaracteristics(importContext, result, progressionModel); + importOperations(importContext, result, progressionModel); + importParameters(importContext, result, progressionModel); + importCatches(importContext, result, progressionModel); + importMarineLitters(importContext, result, progressionModel); + importIndividualObservations(importContext, result, progressionModel); + importAccidentalCatches(importContext, result, progressionModel); + + + return result; + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not create close import context", e); + } + + } + + protected void checkSampleCategoryModel(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.sampleCategoryModel")); + Iterable<ImportRow<SampleCategoryRow>> rows = importContext.loadSampleCategories(); + + for (ImportRow<SampleCategoryRow> row : rows) { + + } + + } + + protected void importTemporaryGears(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.temporaryGears")); + GenericFormatArchive archive = importContext.getArchive(); + if (archive.isTemporaryReferentialGearsPathExists()) { + + ReferentialImportRequest<Gear, Integer> requestResult = referentialTemporaryGearService.createReferentialImportRequest(); + + try (CsvConsumerForTemporaryGear consumer = importContext.loadTemporaryGears()) { + for (ImportRow<GearRow> row : consumer) { + consumer.checkRowForGenericFormatImport(row, requestResult); + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close gears.csv file", e); + } + + ReferentialImportResult<Gear> importResult = referentialTemporaryGearService.executeImportRequest(requestResult); + result.setImportedGears(importResult); + + } + + } + + protected void importTemporaryPersons(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.temporaryPersons")); + GenericFormatArchive archive = importContext.getArchive(); + if (archive.isTemporaryReferentialPersonsPathExists()) { + + ReferentialImportRequest<Person, Integer> requestResult = referentialTemporaryPersonService.createReferentialImportRequest(); + + try (CsvConsumerForTemporaryPerson consumer = importContext.loadTemporaryPersons()) { + for (ImportRow<PersonRow> row : consumer) { + consumer.checkRowForGenericFormatImport(row, requestResult); + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close person.csv file", e); + } + + ReferentialImportResult<Person> importResult = referentialTemporaryPersonService.executeImportRequest(requestResult); + result.setImportedPersons(importResult); + + } + + } + + protected void importTemporarySpecies(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.temporarySpecies")); + GenericFormatArchive archive = importContext.getArchive(); + if (archive.isTemporaryReferentialSpeciesPathExists()) { + + ReferentialImportRequest<Species, Integer> requestResult = referentialTemporarySpeciesService.createReferentialImportRequest(); + + try (CsvConsumerForTemporarySpecies consumer = importContext.loadTemporarySpecies()) { + for (ImportRow<SpeciesRow> row : consumer) { + consumer.checkRowForGenericFormatImport(row, requestResult); + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close species.csv file", e); + } + + ReferentialImportResult<Species> importResult = referentialTemporarySpeciesService.executeImportRequest(requestResult); + result.setImportedSpecies(importResult); + + } + + } + + protected void importTemporaryVessels(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.temporaryVessels")); + GenericFormatArchive archive = importContext.getArchive(); + if (archive.isTemporaryReferentialVesselsPathExists()) { + + ReferentialImportRequest<Vessel, String> requestResult = referentialTemporaryVesselService.createReferentialImportRequest(); + + try (CsvConsumerForTemporaryVessel consumer = importContext.loadTemporaryVessels()) { + for (ImportRow<VesselRow> row : consumer) { + consumer.checkRowForGenericFormatImport(row, requestResult); + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close vessel.csv file", e); + } + + ReferentialImportResult<Vessel> importResult = referentialTemporaryVesselService.executeImportRequest(requestResult); + result.setImportedVessels(importResult); + + } + + } + + protected void importProtocol(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.load.protocol")); + GenericFormatArchive archive = importContext.getArchive(); + if (archive.isProtocolExists()) { + + TuttiProtocol tuttiProtocol = protocolImportExportService.importProtocol(archive.getProtocolPath().toFile()); + + if (persistenceService.isProtocolExist(tuttiProtocol.getId())) { + + // already known, do not reimport + if (log.isWarnEnabled()) { + log.warn("Already known protocol with id" + tuttiProtocol.getId() + " do not reimport it"); + } + + progressionModel.increments(t("tutti.genericFormat.reuse.protocol", tuttiProtocol.getName())); + + tuttiProtocol = persistenceService.getProtocol(tuttiProtocol.getId()); + + } else { + + List<String> allProtocolNames = persistenceService.getAllProtocolNames(); + + if (allProtocolNames.contains(tuttiProtocol.getName())) { + + String newName = TuttiProtocols.getFirstAvailableName(tuttiProtocol.getName(), allProtocolNames); + tuttiProtocol.setName(newName); + + } + + progressionModel.increments(t("tutti.genericFormat.import.protocol", tuttiProtocol.getName())); - // load sampleSampleCategory and check it + tuttiProtocol = persistenceService.createProtocol(tuttiProtocol); + persistenceService.setProtocol(tuttiProtocol); - GenericFormatImportResult result = new GenericFormatImportResult(archive); + } - return result; + result.setProtocol(tuttiProtocol); + + } + } + + protected void importCruises(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.cruises")); + + try (CsvConsumerForSurvey consumer = importContext.loadSurveys()) { + for (ImportRow<SurveyRow> row : consumer) { + + consumer.checkRow(row, importContext, result, validationService); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close survey.csv file", e); + } + + } + + protected void importGearCaracteristics(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.gearCaracteristics")); + try (CsvConsumerForGearCaracteristic consumer = importContext.loadGearCaracteristics()) { + for (ImportRow<GearCaracteristicRow> row : consumer) { + + consumer.checkRow(row, importContext, result); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close gearCaracteristic.csv file", e); + } + + } + + protected void importOperations(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.operations")); + try (CsvConsumerForOperation consumer = importContext.loadOperations()) { + for (ImportRow<OperationRow> row : consumer) { + + consumer.checkRow(row, importContext, result); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close operation.csv file", e); + } + + } + + protected void importParameters(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.parameters")); + try (CsvConsumerForParameter consumer = importContext.loadParameters()) { + for (ImportRow<ParameterRow> row : consumer) { + + consumer.checkRow(row, importContext, result); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close parameter.csv file", e); + } + + } + + protected void importCatches(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.catches")); + try (CsvConsumerForCatch consumer = importContext.loadCatches()) { + for (ImportRow<CatchRow> row : consumer) { + + consumer.checkRow(row, importContext, result); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close catch.csv file", e); + } + + } + + protected void importAccidentalCatches(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.accidentalCatches")); + try (CsvConsumerForAccidentalCatch consumer = importContext.loadAccidentalCatches()) { + for (ImportRow<AccidentalCatchRow> row : consumer) { + + consumer.checkRow(row, importContext, result); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close accidentalCatch.csv file", e); + } + + } + + protected void importIndividualObservations(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.individualObservations")); + try (CsvConsumerForIndividualObservation consumer = importContext.loadIndividualObservations()) { + for (ImportRow<IndividualObservationRow> row : consumer) { + + consumer.checkRow(row, importContext, result); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close individualObservation.csv file", e); + } + + } + + protected void importMarineLitters(GlobalImportContext importContext, GenericFormatImportResult result, ProgressionModel progressionModel) { + + progressionModel.increments(t("tutti.genericFormat.import.marineLitters")); + try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters()) { + for (ImportRow<MarineLitterRow> row : consumer) { + + consumer.checkRow(row, importContext, result); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close marineLitter.csv file", e); + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GlobalImportContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GlobalImportContext.java index a480bfc..34e1c98 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GlobalImportContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GlobalImportContext.java @@ -5,6 +5,7 @@ import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Cruises; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.csv.CaracteristicTechnicalParser; import fr.ifremer.tutti.service.csv.CaracteristicValueTechnicalParser; @@ -27,12 +28,14 @@ import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForParameter; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSampleCategory; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryRow; -import org.apache.commons.io.IOUtils; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryGear; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryPerson; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryVessel; import org.nuiton.csv.ImportRow; import java.io.Closeable; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -78,7 +81,7 @@ public class GlobalImportContext implements Closeable { private final Set<Cruise> existingCruises; - private final List<Closeable> toClose; + private final TuttiProtocol oldProtocol; public GlobalImportContext(PersistenceService persistenceService, GenericFormatArchive archive, @@ -104,8 +107,8 @@ public class GlobalImportContext implements Closeable { List<Cruise> allCruise = persistenceService.getAllCruise(program.getId()); this.existingCruises = ImmutableSet.copyOf(allCruise); + this.oldProtocol = persistenceService.getProtocol(); - this.toClose = new ArrayList<>(); } @Override @@ -113,9 +116,6 @@ public class GlobalImportContext implements Closeable { //TODO Close //archive.close(); - for (Closeable closeable : toClose) { - IOUtils.closeQuietly(closeable); - } } @@ -184,7 +184,6 @@ public class GlobalImportContext implements Closeable { boolean equals = false; for (Cruise existingCruise : existingCruises) { - equals = Cruises.equals(cruise, existingCruise); if (equals) { break; @@ -197,56 +196,70 @@ public class GlobalImportContext implements Closeable { public Iterable<ImportRow<SampleCategoryRow>> loadSampleCategories() { CsvConsumerForSampleCategory consumer = new CsvConsumerForSampleCategory(archive.getSampleCategoryModelPath(), csvSeparator, this); - toClose.add(consumer); return consumer; } public CsvConsumerForSurvey loadSurveys() { CsvConsumerForSurvey consumer = new CsvConsumerForSurvey(archive.getSurveyPath(), csvSeparator, this); - toClose.add(consumer); return consumer; } public CsvConsumerForGearCaracteristic loadGearCaracteristics() { CsvConsumerForGearCaracteristic consumer = new CsvConsumerForGearCaracteristic(archive.getGearCaracteristicsPath(), csvSeparator, this); - toClose.add(consumer); return consumer; } public CsvConsumerForOperation loadOperations() { CsvConsumerForOperation consumer = new CsvConsumerForOperation(archive.getOperationPath(), csvSeparator, this); - toClose.add(consumer); return consumer; } public CsvConsumerForParameter loadParameters() { CsvConsumerForParameter consumer = new CsvConsumerForParameter(archive.getParameterPath(), csvSeparator, this); - toClose.add(consumer); return consumer; } public CsvConsumerForCatch loadCatches() { CsvConsumerForCatch consumer = new CsvConsumerForCatch(archive.getSampleCategoryModelPath(), csvSeparator, this); - toClose.add(consumer); return consumer; } public CsvConsumerForMarineLitter loadMarineLitters() { CsvConsumerForMarineLitter consumer = new CsvConsumerForMarineLitter(archive.getMarineLitterPath(), csvSeparator, this); - toClose.add(consumer); return consumer; } public CsvConsumerForIndividualObservation loadIndividualObservations() { CsvConsumerForIndividualObservation consumer = new CsvConsumerForIndividualObservation(archive.getIndividualObservationPath(), csvSeparator, this); - toClose.add(consumer); return consumer; } public CsvConsumerForAccidentalCatch loadAccidentalCatches() { CsvConsumerForAccidentalCatch consumer = new CsvConsumerForAccidentalCatch(archive.getAccidentalCatchPath(), csvSeparator, this); - toClose.add(consumer); return consumer; } + public CsvConsumerForTemporaryGear loadTemporaryGears() { + CsvConsumerForTemporaryGear consumer = new CsvConsumerForTemporaryGear(archive.getTemporaryReferentialGearsPath(), csvSeparator); + return consumer; + } + + public CsvConsumerForTemporaryPerson loadTemporaryPersons() { + CsvConsumerForTemporaryPerson consumer = new CsvConsumerForTemporaryPerson(archive.getTemporaryReferentialPersonsPath(), csvSeparator); + return consumer; + } + + public CsvConsumerForTemporarySpecies loadTemporarySpecies() { + CsvConsumerForTemporarySpecies consumer = new CsvConsumerForTemporarySpecies(archive.getTemporaryReferentialSpeciesPath(), csvSeparator); + return consumer; + } + + public CsvConsumerForTemporaryVessel loadTemporaryVessels() { + CsvConsumerForTemporaryVessel consumer = new CsvConsumerForTemporaryVessel(archive.getTemporaryReferentialVesselsPath(), csvSeparator); + return consumer; + } + + public TuttiProtocol getOldProtocol() { + return oldProtocol; + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyExistException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyExistException.java new file mode 100644 index 0000000..a2b6096 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyExistException.java @@ -0,0 +1,32 @@ +package fr.ifremer.tutti.service.genericformat.consumer; + +import fr.ifremer.tutti.persistence.entities.data.Cruise; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/12/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class CruiseAlreadyExistException extends Exception { + + private static final long serialVersionUID = 1L; + + private final Cruise cruise; + + public CruiseAlreadyExistException(Cruise cruise) { + this.cruise = cruise; + } + + public Cruise getCruise() { + return cruise; + } + + @Override + public String getMessage() { + return t("tutti.genericFormat.import.error.cruiseAlreadyExist", cruise.getName()); + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotValidException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotValidException.java new file mode 100644 index 0000000..2dee85d --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotValidException.java @@ -0,0 +1,58 @@ +package fr.ifremer.tutti.service.genericformat.consumer; + +import com.google.common.base.Joiner; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import org.nuiton.validator.NuitonValidatorResult; +import org.nuiton.validator.NuitonValidatorScope; + +import java.util.List; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/12/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class CruiseNotValidException extends Exception { + + private static final long serialVersionUID = 1L; + + private final Cruise cruise; + + private final NuitonValidatorResult validatorResult; + + public CruiseNotValidException(Cruise cruise, NuitonValidatorResult validatorResult) { + this.cruise = cruise; + this.validatorResult = validatorResult; + } + + public Cruise getCruise() { + return cruise; + } + + @Override + public String getMessage() { + + StringBuilder builder = new StringBuilder(); + + if (validatorResult.hasFatalMessages()) { + List<String> fatalMessage = validatorResult.getMessagesForScope(NuitonValidatorScope.FATAL); + builder.append(t("tutti.fatal.messages", Joiner.on("\n-").join(fatalMessage))); + } + if (validatorResult.hasErrorMessagess()) { + List<String> errorsMessage = validatorResult.getMessagesForScope(NuitonValidatorScope.ERROR); + builder.append(t("tutti.error.messages", Joiner.on("\n-").join(errorsMessage))); + } + if (validatorResult.hasWarningMessages()) { + List<String> warningMessage = validatorResult.getMessagesForScope(NuitonValidatorScope.WARNING); + builder.append(t("tutti.warning.messages", Joiner.on("\n-").join(warningMessage))); + } + + String message = t("tutti.genericFormat.import.error.cruiseNotValid", builder.toString()); + return message; + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java index 1f7750a..8c6c6b0 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java @@ -1,10 +1,44 @@ package fr.ifremer.tutti.service.genericformat.consumer; +import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; +import fr.ifremer.tutti.service.genericformat.GlobalImportContext; +import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchModel; +import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchRow; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; + +import java.nio.file.Path; + /** * Created on 2/11/15. * * @author Tony Chemit - chemit@codelutin.com - * @since XXX + * @since 3.14 */ -public class CsvConsumerForAccidentalCatch { -} +public class CsvConsumerForAccidentalCatch extends CsvComsumer<AccidentalCatchRow, AccidentalCatchModel> { + + public CsvConsumerForAccidentalCatch(Path file, char separator, GlobalImportContext importContext) { + super(file, AccidentalCatchModel.forImport(separator, importContext)); + } + + public void checkRow(ImportRow<AccidentalCatchRow> row, GlobalImportContext importContext, GenericFormatImportResult result) { + + if (row.isValid()) { + + AccidentalCatchRow bean = row.getBean(); + + //TODO checks! + + } + + if (!row.isValid()) { + + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(row); + throw new ApplicationBusinessException(message); + + } + + } +} \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java index 8555ddb..e2229cd 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java @@ -1,9 +1,13 @@ package fr.ifremer.tutti.service.genericformat.consumer; import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; import fr.ifremer.tutti.service.genericformat.GlobalImportContext; -import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchModel; -import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchRow; +import fr.ifremer.tutti.service.genericformat.csv.CatchModel; +import fr.ifremer.tutti.service.genericformat.csv.CatchRow; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; import java.nio.file.Path; @@ -13,10 +17,29 @@ import java.nio.file.Path; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class CsvConsumerForCatch extends CsvComsumer<AccidentalCatchRow, AccidentalCatchModel> { +public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { public CsvConsumerForCatch(Path file, char separator, GlobalImportContext importContext) { - super(file, AccidentalCatchModel.forImport(separator, importContext)); + super(file, CatchModel.forImport(separator, importContext)); + } + + public void checkRow(ImportRow<CatchRow> row, GlobalImportContext importContext, GenericFormatImportResult result) { + + if (row.isValid()) { + + CatchRow bean = row.getBean(); + + //TODO checks! + + } + + if (!row.isValid()) { + + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(row); + throw new ApplicationBusinessException(message); + + } + } } \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java index f304499..d9f3f15 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java @@ -1,9 +1,13 @@ package fr.ifremer.tutti.service.genericformat.consumer; import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; import fr.ifremer.tutti.service.genericformat.GlobalImportContext; import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicModel; import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicRow; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; import java.nio.file.Path; @@ -19,4 +23,23 @@ public class CsvConsumerForGearCaracteristic extends CsvComsumer<GearCaracterist super(file, GearCaracteristicModel.forImport(separator, importContext)); } + public void checkRow(ImportRow<GearCaracteristicRow> row, GlobalImportContext importContext, GenericFormatImportResult result) { + + if (row.isValid()) { + + GearCaracteristicRow bean = row.getBean(); + + //TODO checks! + + } + + if (!row.isValid()) { + + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(row); + throw new ApplicationBusinessException(message); + + } + + } + } \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java index de0f3cf..b710cae 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java @@ -1,9 +1,13 @@ package fr.ifremer.tutti.service.genericformat.consumer; import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; import fr.ifremer.tutti.service.genericformat.GlobalImportContext; -import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicModel; -import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicRow; +import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationModel; +import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationRow; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; import java.nio.file.Path; @@ -13,10 +17,29 @@ import java.nio.file.Path; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class CsvConsumerForIndividualObservation extends CsvComsumer<GearCaracteristicRow, GearCaracteristicModel> { +public class CsvConsumerForIndividualObservation extends CsvComsumer<IndividualObservationRow, IndividualObservationModel> { public CsvConsumerForIndividualObservation(Path file, char separator, GlobalImportContext importContext) { - super(file, GearCaracteristicModel.forImport(separator, importContext)); + super(file, IndividualObservationModel.forImport(separator, importContext)); + } + + public void checkRow(ImportRow<IndividualObservationRow> row, GlobalImportContext importContext, GenericFormatImportResult result) { + + if (row.isValid()) { + + IndividualObservationRow bean = row.getBean(); + + //TODO checks! + + } + + if (!row.isValid()) { + + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(row); + throw new ApplicationBusinessException(message); + + } + } } \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java index daf5118..009057f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java @@ -1,9 +1,13 @@ package fr.ifremer.tutti.service.genericformat.consumer; import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; import fr.ifremer.tutti.service.genericformat.GlobalImportContext; -import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationModel; -import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationRow; +import fr.ifremer.tutti.service.genericformat.csv.MarineLitterModel; +import fr.ifremer.tutti.service.genericformat.csv.MarineLitterRow; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; import java.nio.file.Path; @@ -13,10 +17,29 @@ import java.nio.file.Path; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class CsvConsumerForMarineLitter extends CsvComsumer<IndividualObservationRow, IndividualObservationModel> { +public class CsvConsumerForMarineLitter extends CsvComsumer<MarineLitterRow, MarineLitterModel> { public CsvConsumerForMarineLitter(Path file, char separator, GlobalImportContext importContext) { - super(file, IndividualObservationModel.forImport(separator, importContext)); + super(file, MarineLitterModel.forImport(separator, importContext)); + } + + public void checkRow(ImportRow<MarineLitterRow> row, GlobalImportContext importContext, GenericFormatImportResult result) { + + if (row.isValid()) { + + MarineLitterRow bean = row.getBean(); + + //TODO checks! + + } + + if (!row.isValid()) { + + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(row); + throw new ApplicationBusinessException(message); + + } + } } \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java index 97c8aa1..6ed4e90 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java @@ -1,9 +1,13 @@ package fr.ifremer.tutti.service.genericformat.consumer; import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; import fr.ifremer.tutti.service.genericformat.GlobalImportContext; -import fr.ifremer.tutti.service.genericformat.csv.MarineLitterModel; -import fr.ifremer.tutti.service.genericformat.csv.MarineLitterRow; +import fr.ifremer.tutti.service.genericformat.csv.OperationModel; +import fr.ifremer.tutti.service.genericformat.csv.OperationRow; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; import java.nio.file.Path; @@ -13,10 +17,29 @@ import java.nio.file.Path; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class CsvConsumerForOperation extends CsvComsumer<MarineLitterRow, MarineLitterModel> { +public class CsvConsumerForOperation extends CsvComsumer<OperationRow, OperationModel> { public CsvConsumerForOperation(Path file, char separator, GlobalImportContext importContext) { - super(file, MarineLitterModel.forImport(separator, importContext)); + super(file, OperationModel.forImport(separator, importContext)); + } + + public void checkRow(ImportRow<OperationRow> row, GlobalImportContext importContext, GenericFormatImportResult result) { + + if (row.isValid()) { + + OperationRow bean = row.getBean(); + + //TODO checks! + + } + + if (!row.isValid()) { + + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(row); + throw new ApplicationBusinessException(message); + + } + } } \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java index 4e41547..76dca39 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java @@ -1,9 +1,13 @@ package fr.ifremer.tutti.service.genericformat.consumer; import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; import fr.ifremer.tutti.service.genericformat.GlobalImportContext; -import fr.ifremer.tutti.service.genericformat.csv.OperationModel; -import fr.ifremer.tutti.service.genericformat.csv.OperationRow; +import fr.ifremer.tutti.service.genericformat.csv.ParameterModel; +import fr.ifremer.tutti.service.genericformat.csv.ParameterRow; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; import java.nio.file.Path; @@ -13,10 +17,29 @@ import java.nio.file.Path; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class CsvConsumerForParameter extends CsvComsumer<OperationRow, OperationModel> { +public class CsvConsumerForParameter extends CsvComsumer<ParameterRow, ParameterModel> { public CsvConsumerForParameter(Path file, char separator, GlobalImportContext importContext) { - super(file, OperationModel.forImport(separator, importContext)); + super(file, ParameterModel.forImport(separator, importContext)); + } + + public void checkRow(ImportRow<ParameterRow> row, GlobalImportContext importContext, GenericFormatImportResult result) { + + if (row.isValid()) { + + ParameterRow bean = row.getBean(); + + //TODO checks! + + } + + if (!row.isValid()) { + + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(row); + throw new ApplicationBusinessException(message); + + } + } } \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java index cc09d88..ebe7072 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java @@ -2,8 +2,8 @@ package fr.ifremer.tutti.service.genericformat.consumer; import fr.ifremer.tutti.service.csv.CsvComsumer; import fr.ifremer.tutti.service.genericformat.GlobalImportContext; -import fr.ifremer.tutti.service.genericformat.csv.ParameterModel; -import fr.ifremer.tutti.service.genericformat.csv.ParameterRow; +import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryModel; +import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryRow; import java.nio.file.Path; @@ -13,10 +13,10 @@ import java.nio.file.Path; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class CsvConsumerForSampleCategory extends CsvComsumer<ParameterRow, ParameterModel> { +public class CsvConsumerForSampleCategory extends CsvComsumer<SampleCategoryRow, SampleCategoryModel> { public CsvConsumerForSampleCategory(Path file, char separator, GlobalImportContext importContext) { - super(file, ParameterModel.forImport(separator, importContext)); + super(file, SampleCategoryModel.forImport(separator, importContext)); } } \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java index cbfc4e3..ee68a7e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java @@ -1,9 +1,16 @@ package fr.ifremer.tutti.service.genericformat.consumer; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.service.ValidationService; import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; import fr.ifremer.tutti.service.genericformat.GlobalImportContext; -import fr.ifremer.tutti.service.genericformat.csv.ParameterModel; -import fr.ifremer.tutti.service.genericformat.csv.ParameterRow; +import fr.ifremer.tutti.service.genericformat.csv.SurveyModel; +import fr.ifremer.tutti.service.genericformat.csv.SurveyRow; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; +import org.nuiton.validator.NuitonValidatorResult; import java.nio.file.Path; @@ -13,10 +20,44 @@ import java.nio.file.Path; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class CsvConsumerForSurvey extends CsvComsumer<ParameterRow, ParameterModel> { +public class CsvConsumerForSurvey extends CsvComsumer<SurveyRow, SurveyModel> { public CsvConsumerForSurvey(Path file, char separator, GlobalImportContext importContext) { - super(file, ParameterModel.forImport(separator, importContext)); + super(file, SurveyModel.forImport(separator, importContext)); + } + + public void checkRow(ImportRow<SurveyRow> row, GlobalImportContext importContext, GenericFormatImportResult result, ValidationService validationService) { + + if (row.isValid()) { + + SurveyRow bean = row.getBean(); + + Cruise cruise = bean.getCruise(); + + if (importContext.isCruiseExists(cruise)) { + + // Can't readd an existing cruise + TuttiCsvUtil.addCheckError(row, new CruiseAlreadyExistException(cruise)); + + } + + NuitonValidatorResult nuitonValidatorResult = validationService.validateEditCruise(cruise); + if (nuitonValidatorResult.hasFatalMessages() || nuitonValidatorResult.hasErrorMessagess()) { + + // There is some validation errors + TuttiCsvUtil.addCheckError(row, new CruiseNotValidException(cruise, nuitonValidatorResult)); + + } + + } + + if (!row.isValid()) { + + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(row); + throw new ApplicationBusinessException(message); + + } + } } \ No newline at end of file diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index 111508a..9ca57f4 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -6,8 +6,27 @@ tutti.caracteristicType.gearUseFeature= tutti.caracteristicType.individualObservation= tutti.caracteristicType.lengthStep= tutti.caracteristicType.vesselUseFeature= +tutti.csv.import.error.on.field= +tutti.csv.import.error.on.row= tutti.error.benthos.not.in.protocol= tutti.error.species.not.in.protocol= +tutti.genericFormat.import.accidentalCatches= +tutti.genericFormat.import.catches= +tutti.genericFormat.import.cruises= +tutti.genericFormat.import.error.cruiseAlreadyExist= +tutti.genericFormat.import.gearCaracteristics= +tutti.genericFormat.import.individualObservations= +tutti.genericFormat.import.marineLitters= +tutti.genericFormat.import.operations= +tutti.genericFormat.import.parameters= +tutti.genericFormat.import.protocol= +tutti.genericFormat.import.sampleCategoryModel= +tutti.genericFormat.import.temporaryGears= +tutti.genericFormat.import.temporaryPersons= +tutti.genericFormat.import.temporarySpecies= +tutti.genericFormat.import.temporaryVessels= +tutti.genericFormat.importError.archiveNotSane= +tutti.genericformat.importError.missArchiveFile= tutti.io.mkDir.error= tutti.pdf.export.missing.species.code= tutti.property.attachment= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 44bf30e..d1b846d 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -3,17 +3,32 @@ tutti.caracteristicType.INDIVIDUAL_OBSERVATION=Observations individuelles tutti.caracteristicType.LENGTH_STEP=Classes de tailles tutti.caracteristicType.VESSEL_USE_FEATURE=Autres caractéristiques tutti.caracteristicType.lengthStep= +tutti.csv.import.error.on.field=Colonne %s \: %s +tutti.csv.import.error.on.row=Des erreurs ont été détectées à la ligne %s \: \n%s +tutti.genericFormat.import.accidentalCatches= +tutti.genericFormat.import.catches= +tutti.genericFormat.import.cruises= +tutti.genericFormat.import.error.cruiseAlreadyExist= +tutti.genericFormat.import.gearCaracteristics= +tutti.genericFormat.import.individualObservations= +tutti.genericFormat.import.marineLitters= +tutti.genericFormat.import.operations= +tutti.genericFormat.import.parameters= +tutti.genericFormat.import.protocol= +tutti.genericFormat.import.sampleCategoryModel= +tutti.genericFormat.import.temporaryGears= +tutti.genericFormat.import.temporaryPersons= +tutti.genericFormat.import.temporarySpecies= +tutti.genericFormat.import.temporaryVessels= +tutti.genericFormat.importError.archiveNotSane=L'archive ne respecte pas le format de l'import générique \:\n%s +tutti.genericformat.importError.missArchiveFile=Il manque le fichier %s dans l'archive tutti.io.mkDir.error=Erreur à la création du dossier %s tutti.pdf.export.missing.species.code=Une espèce (referenceId %s, nom scientifique %s) n'a ni code campagne, ni code refTax. tutti.property.attachment=Pièce jointe tutti.property.caracteristic=Caractéristique tutti.property.country=Pays tutti.property.cruise=Campagne -tutti.genericformat.importError.missArchiveFile=Il manque le fichier %s dans l'archive -tutti.genericFormat.importError.archiveNotSane=L'archive ne respecte pas le format de l'import générique :\n%s tutti.property.date=Date -tutti.csv.import.error.on.field=Colonne %s : %s -tutti.csv.import.error.on.row=Des erreurs ont été détectées à la ligne %s : \n%s tutti.property.department=Département tutti.property.firstName=Prénom tutti.property.fishingOperation=Trait diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index d9182b5..e2fa25e 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -99,6 +99,7 @@ tutti.common.askBeforeUpdate.help= tutti.common.cancel= tutti.common.cancel.mnemonic= tutti.common.file.csv= +tutti.common.file.genericFormat= tutti.common.file.iwa= tutti.common.file.pdf= tutti.common.file.protocol= @@ -1420,6 +1421,8 @@ tutti.importDb.step.closeDb= tutti.importDb.step.openDb= tutti.importDb.step.unzipArchive= tutti.importDb.step.will.migrateSchema= +tutti.importProgram.action.exportErrors= +tutti.importProgram.action.success= tutti.importProtocol.action.success= tutti.importPupitri.carrouselFile.extension= tutti.importPupitri.carrouselFile.extension.description= @@ -1768,6 +1771,7 @@ tutti.selectCruise.action.exportProgram= tutti.selectCruise.action.exportProgram.tip= tutti.selectCruise.action.exportProtocol= tutti.selectCruise.action.exportProtocol.tip= +tutti.selectCruise.action.importGenericformat= tutti.selectCruise.action.importProtocol= tutti.selectCruise.action.importProtocol.tip= tutti.selectCruise.action.newCruise= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index c01ebb9..1b167d0 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -81,6 +81,7 @@ tutti.common.askBeforeUpdate.help=Que voulez-vous faire ?<ul><li><strong>Annuler tutti.common.cancel=Annuler tutti.common.cancel.mnemonic=A tutti.common.file.csv=Extension d'un fichier csv +tutti.common.file.genericFormat= tutti.common.file.iwa=Fichier d'import Psion tutti.common.file.pdf=Extension d'un fichier pdf tutti.common.file.protocol=Extension d'un fichier de protocole Allegro Campagne @@ -1361,6 +1362,8 @@ tutti.importDb.step.closeDb=Fermeture de la base tutti.importDb.step.openDb=Ouverture de la base de données <strong>%s</strong> tutti.importDb.step.unzipArchive=Décompression de l'archive tutti.importDb.step.will.migrateSchema=Démarrage de la mise à jour du schéma de la base depuis la version %s vers la version %s +tutti.importProgram.action.exportErrors= +tutti.importProgram.action.success= tutti.importProtocol.action.success=Protocole [%s] lu depuis le fichier. tutti.importPupitri.carrouselFile.extension=car tutti.importPupitri.carrouselFile.extension.description=Fichier du carrousel (.car) @@ -1668,6 +1671,7 @@ tutti.selectCruise.action.exportProgram=Exporter tutti.selectCruise.action.exportProgram.tip=Exporter la série sélectionnée tutti.selectCruise.action.exportProtocol=Exporter tutti.selectCruise.action.exportProtocol.tip=Exporter le protocole sélectionné +tutti.selectCruise.action.importGenericformat= tutti.selectCruise.action.importProtocol=Importer tutti.selectCruise.action.importProtocol.tip=Importer un protocole tutti.selectCruise.action.newCruise=Nouveau -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.