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 a07f55f3c5132c0dcb0f799b5b6714679ff4ce72 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 31 19:49:40 2015 +0200 debut de mise en place de l'import avec selection des données --- .../tutti/persistence/entities/data/Cruises.java | 22 ++++ .../entities/data/FishingOperations.java | 9 ++ .../genericformat/GenericFormatContextSupport.java | 74 ++--------- .../GenericFormatImportConfiguration.java | 139 ++++++++++++++++++++- .../GenericFormatImportCruiseContext.java | 59 +++++++-- .../GenericFormatImportCruiseResult.java | 2 +- .../GenericFormatImportOperationContext.java | 10 ++ .../GenericFormatImportOperationResult.java | 7 ++ .../genericformat/GenericFormatImportRequest.java | 76 +++++++++-- .../genericformat/GenericFormatImportService.java | 10 +- .../genericformat/GenericFormatResultSupport.java | 11 ++ .../GenericFormatValidateFileContext.java | 64 +++++++++- .../GenericFormatValidateFileResult.java | 1 + .../GenericformatImportPersitenceHelper.java | 68 ++++++---- .../consumer/CsvConsumerForOperation.java | 32 +++-- .../consumer/CsvConsumerForSurvey.java | 12 +- .../service/genericformat/csv/OperationModel.java | 18 +-- .../importactions/DoCheckWeightAction.java | 2 +- .../importactions/DoCleanWeightAction.java | 1 + .../importactions/ImportAccidentalCatchAction.java | 10 +- .../importactions/ImportCatchAction.java | 11 +- .../ImportGearCaracteristicAction.java | 14 ++- .../ImportIndividualObservationAction.java | 10 +- .../importactions/ImportMarineLitterAction.java | 10 +- .../importactions/ImportOperationAction.java | 12 +- .../importactions/ImportParameterAction.java | 9 +- .../importactions/ImportProtocolAction.java | 25 ++-- .../importactions/ImportReferentialGearAction.java | 20 +-- .../ImportReferentialPersonAction.java | 21 ++-- .../ImportReferentialSpeciesAction.java | 20 +-- .../ImportReferentialVesselAction.java | 20 +-- .../importactions/ImportSurveyAction.java | 35 +++--- .../importactions/LoadAttachmentsAction.java | 9 +- .../ValidateGearCaracteristicAction.java | 10 +- .../importactions/ValidateOperationAction.java | 11 +- .../importactions/ValidateSurveyAction.java | 28 ++++- .../resources/i18n/tutti-service_en_GB.properties | 9 ++ .../resources/i18n/tutti-service_fr_FR.properties | 24 +++- 38 files changed, 680 insertions(+), 245 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java index 5c3a5d5..091766e 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/Cruises.java @@ -81,4 +81,26 @@ public class Cruises extends AbstractCruises { return equals; } + + public static String getNaturalId(Cruise cruise) { + + Calendar instance = Calendar.getInstance(); + int year1; + + if (cruise.getBeginDate() == null) { + year1 = -1; + } else { + instance.setTime(cruise.getBeginDate()); + year1 = instance.get(Calendar.YEAR); + } + String surveyPart1 = cruise.getSurveyPart(); + if (surveyPart1 == null) { + surveyPart1 = ""; + } + String programId = cruise.getProgram().getId(); + + String naturalId = year1 + "--" + surveyPart1 + "--" + programId; + return naturalId; + + } } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java index d63ebf0..6332400 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/FishingOperations.java @@ -52,4 +52,13 @@ public class FishingOperations extends AbstractFishingOperations { return equals; } + + public static String getNaturalId(FishingOperation fishingOperation) { + + String cruiseId = Cruises.getNaturalId(fishingOperation.getCruise()); + String naturalId = cruiseId + fishingOperation.getStationNumber() + "--" + fishingOperation.getFishingOperationNumber() + "--" + fishingOperation.getMultirigAggregation(); + return naturalId; + + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java index 761e4c3..0a77e48 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java @@ -42,6 +42,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.ValidationService; import fr.ifremer.tutti.service.csv.CaracteristicValueParseException; @@ -294,10 +295,6 @@ public abstract class GenericFormatContextSupport implements Closeable { this.importedSampleCategoryModel = importedSampleCategoryModel; } - public Cruise getExistingCruise(Cruise cruise) { - return importRequest.getExistingCruise(cruise); - } - public boolean isCruiseAlreadyImported(Cruise cruise) { GenericFormatImportCruiseContext cruiseContext = getCruiseContext(cruise); @@ -305,10 +302,11 @@ public abstract class GenericFormatContextSupport implements Closeable { } - public void addImportedCruise(Cruise cruise, boolean override) { + public void addImportedCruise(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingFishingOperations) { String cruiseId = cruise.getId(); - GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, override, cruiseDecorator.toString(cruise)); + + GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, existingCruiseData, existingFishingOperations, cruiseDecorator.toString(cruise)); cruiseContexts.put(cruiseId, cruiseContext); } @@ -346,14 +344,6 @@ public abstract class GenericFormatContextSupport implements Closeable { } - public GenericFormatImportOperationContext getFishingOperationContext(FishingOperation fishingOperation) { - - GenericFormatImportCruiseContext cruiseContext = getCruiseContext(fishingOperation.getCruise()); - GenericFormatImportOperationContext result = cruiseContext.getFishingOperationContext(fishingOperation); - return result; - - } - public CsvConsumerForSampleCategory loadSampleCategories(boolean failFast) { sampleCategoryFileResult.setImported(true); surveyFileResult.setLinesCount(importRequest.getArchive().getSampleCategoryLineCount()); @@ -497,58 +487,6 @@ public abstract class GenericFormatContextSupport 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 String getProtocolOriginalName() { return protocolOriginalName; } @@ -566,6 +504,10 @@ public abstract class GenericFormatContextSupport implements Closeable { return result; } + public boolean canNotOverrideData() { + return !importRequest.isOverrideData(); + } + public interface CruiseContextAction { void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java index ccb03cb..1c89e4c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java @@ -24,6 +24,8 @@ package fr.ifremer.tutti.service.genericformat; * #L% */ +import fr.ifremer.tutti.persistence.model.ProgramDataModel; + import java.io.File; import java.io.Serializable; @@ -37,26 +39,87 @@ public class GenericFormatImportConfiguration implements Serializable { private static final long serialVersionUID = 1L; - private String programId; - + /** + * File to import. + */ private File importFile; + /** + * Path to report to generation. + */ private File reportFile; + /** + * Should perform clean weights after import ? + */ private boolean cleanWeights; + /** + * Should perform check weights after import ? + */ private boolean checkWeights; + /** + * Override any existing data ? (TODO Should be more specific eras cruise ? fishing operations ?...) + */ private boolean overrideData; + /** + * Override protocol if same name ? + */ private boolean overrideProtocol; - public String getProgramId() { - return programId; + /** + * Data to export. + */ + private ProgramDataModel dataToExport; + + /** + * Should we import species batches ? + */ + private boolean importSpecies; + + /** + * Should we import benthos batches ? + */ + private boolean importBenthos; + + /** + * Should we import marine litter batches ? + */ + private boolean importMarineLitter; + + /** + * Should we import accidental catches ? + */ + private boolean importAccidentalCatch; + + /** + * Should we import individual observations ? + */ + private boolean importIndividualObservation; + + /** + * Should we import attachments ? + */ + private boolean importAttachments; + + /** + * Should we update existing cruises ? + */ + private boolean updateCruises; + + /** + * Should we update existing operations ? + */ + private boolean updateOperations; + + public ProgramDataModel getDataToExport() { + return dataToExport; } - public void setProgramId(String programId) { - this.programId = programId; + public void setDataToExport(ProgramDataModel dataToExport) { + this.dataToExport = dataToExport; } public File getImportFile() { @@ -106,4 +169,68 @@ public class GenericFormatImportConfiguration implements Serializable { public boolean isOverrideProtocol() { return overrideProtocol; } + + public boolean isUpdateCruises() { + return updateCruises; + } + + public void setUpdateCruises(boolean updateCruises) { + this.updateCruises = updateCruises; + } + + public boolean isUpdateOperations() { + return updateOperations; + } + + public void setUpdateOperations(boolean updateOperations) { + this.updateOperations = updateOperations; + } + + public boolean isImportSpecies() { + return importSpecies; + } + + public void setImportSpecies(boolean importSpecies) { + this.importSpecies = importSpecies; + } + + public boolean isImportBenthos() { + return importBenthos; + } + + public void setImportBenthos(boolean importBenthos) { + this.importBenthos = importBenthos; + } + + public boolean isImportMarineLitter() { + return importMarineLitter; + } + + public void setImportMarineLitter(boolean importMarineLitter) { + this.importMarineLitter = importMarineLitter; + } + + public boolean isImportAccidentalCatch() { + return importAccidentalCatch; + } + + public void setImportAccidentalCatch(boolean importAccidentalCatch) { + this.importAccidentalCatch = importAccidentalCatch; + } + + public boolean isImportIndividualObservation() { + return importIndividualObservation; + } + + public void setImportIndividualObservation(boolean importIndividualObservation) { + this.importIndividualObservation = importIndividualObservation; + } + + public boolean isImportAttachments() { + return importAttachments; + } + + public void setImportAttachments(boolean importAttachments) { + this.importAttachments = importAttachments; + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java index a2721a7..07fafab 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java @@ -33,6 +33,8 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.FishingOperations; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; +import fr.ifremer.tutti.persistence.model.OperationDataModel; import fr.ifremer.tutti.service.genericformat.csv.RowWithOperationContextSupport; import java.io.Closeable; @@ -53,7 +55,7 @@ public class GenericFormatImportCruiseContext implements Closeable { private final Cruise cruise; - private final boolean override; + private final CruiseDataModel existingCruiseData; private final String cruiseLabel; @@ -61,9 +63,12 @@ public class GenericFormatImportCruiseContext implements Closeable { private final Set<Gear> gearsWithcaracteristics; - public GenericFormatImportCruiseContext(Cruise cruise, boolean override, String cruiseLabel) { + private final Set<FishingOperation> existingOperations; + + public GenericFormatImportCruiseContext(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingOperations, String cruiseLabel) { this.cruise = cruise; - this.override=override; + this.existingCruiseData = existingCruiseData; + this.existingOperations = existingOperations; this.cruiseLabel = cruiseLabel; this.fishingOperationContexts = new TreeMap<>(); this.gearsWithcaracteristics = new HashSet<>(); @@ -83,10 +88,29 @@ public class GenericFormatImportCruiseContext implements Closeable { return cruise; } - public boolean isOverride() { - return override; + public CruiseDataModel getExistingCruiseData() { + return existingCruiseData; } + public OperationDataModel getExistingFishingOperationData(FishingOperation importRowCruise) { + + String cruiseId = getExistingFishingOperationId(importRowCruise); + OperationDataModel result = null; + + if (cruiseId != null) { + + for (OperationDataModel cruiseDataModel : existingCruiseData) { + if (cruiseId.equals(cruiseDataModel.getId())) { + result = cruiseDataModel; + break; + } + } + } + return result; + + } + + public String getCruiseLabel() { return cruiseLabel; } @@ -109,14 +133,9 @@ public class GenericFormatImportCruiseContext implements Closeable { } public void addFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch, String fishingOperationLabel) { - fishingOperationContexts.put(fishingOperation.getId(), new GenericFormatImportOperationContext(fishingOperation, catchBatch, fishingOperationLabel)); - } - - public GenericFormatImportOperationContext getFishingOperationContext(FishingOperation fishingOperation) { - - GenericFormatImportOperationContext result = fishingOperationContexts.get(fishingOperation.getId()); - return result; + OperationDataModel existingFishingOperationData = getExistingFishingOperationData(fishingOperation); + fishingOperationContexts.put(fishingOperation.getId(), new GenericFormatImportOperationContext(fishingOperation, catchBatch, existingFishingOperationData, fishingOperationLabel)); } public boolean isFishingOperationAlreadyImported(RowWithOperationContextSupport row) { @@ -174,4 +193,20 @@ public class GenericFormatImportCruiseContext implements Closeable { public Set<Gear> getGearsWithcaracteristics() { return gearsWithcaracteristics; } + + protected String getExistingFishingOperationId(FishingOperation importRowCruise) { + + String result = null; + for (FishingOperation fishingOperation : existingOperations) { + + boolean equals = FishingOperations.equals(importRowCruise, fishingOperation); + if (equals) { + result = fishingOperation.getId(); + break; + } + + } + return result; + + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java index 6f9441b..76d66b2 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java @@ -62,7 +62,7 @@ public class GenericFormatImportCruiseResult implements Serializable { public GenericFormatImportCruiseResult(GenericFormatImportCruiseContext cruiseContext) { this.cruise = cruiseContext.getCruise(); - this.override = cruiseContext.isOverride(); + this.override = cruiseContext.getExistingCruiseData()!=null; this.fishingOperationResults = new HashMap<>(); for (GenericFormatImportOperationContext operationContext : cruiseContext.getFishingOperationContexts()) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java index fad1a64..e234dda 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java @@ -38,6 +38,7 @@ import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.model.OperationDataModel; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -70,6 +71,8 @@ public class GenericFormatImportOperationContext implements Closeable { private final CatchBatch catchBatch; + private final OperationDataModel existingFishingOperationData; + private final String fishingOperationLabel; private final Collection<MarineLitterBatch> marineLitterBatches; @@ -100,10 +103,12 @@ public class GenericFormatImportOperationContext implements Closeable { public GenericFormatImportOperationContext(FishingOperation fishingOperation, CatchBatch catchBatch, + OperationDataModel existingFishingOperationData, String fishingOperationLabel) { this.fishingOperation = fishingOperation; this.catchBatch = catchBatch; + this.existingFishingOperationData = existingFishingOperationData; this.fishingOperationLabel = fishingOperationLabel; this.marineLitterBatches = new ArrayList<>(); this.accidentalBatchesById = new TreeMap<>(); @@ -118,6 +123,11 @@ public class GenericFormatImportOperationContext implements Closeable { this.vesselUseFeatures = new CaracteristicMap(); this.checkErrors = new LinkedHashSet<>(); this.batchesObjectIds = new TreeMap<>(); + + } + + public OperationDataModel getExistingFishingOperationData() { + return existingFishingOperationData; } public FishingOperation getFishingOperation() { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java index fb25d07..1bcec3d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java @@ -73,13 +73,20 @@ public class GenericFormatImportOperationResult implements Serializable { private int nbBenthosBatchesHorsVrac; + private final boolean override; + public GenericFormatImportOperationResult(GenericFormatImportOperationContext operationContext) { this.fishingOperation = operationContext.getFishingOperation(); + this.override = operationContext.getExistingFishingOperationData() != null; catchBatch = operationContext.getCatchBatch(); this.checkErrors = new LinkedHashSet<>(); flushContext(operationContext); } + public boolean isOverride() { + return override; + } + public void addCheckError(String error) { checkErrors.add(error); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java index 6fc9d1d..5e061db 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java @@ -29,6 +29,8 @@ 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.persistence.model.CruiseDataModel; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import java.io.File; import java.io.Serializable; @@ -61,12 +63,15 @@ public class GenericFormatImportRequest implements Serializable { private final Date startingDate; + private final ProgramDataModel existingData; + public GenericFormatImportRequest(GenericFormatImportConfiguration importConfiguration, GenericFormatArchive archive, char csvSeparator, Program program, SampleCategoryModel sampleCategoryModel, Set<Cruise> cruises, + ProgramDataModel existingData, TuttiProtocol protocol) { this.importConfiguration = importConfiguration; this.archive = archive; @@ -74,6 +79,7 @@ public class GenericFormatImportRequest implements Serializable { this.sampleCategoryModel = sampleCategoryModel; this.program = program; this.existingCruises = cruises; + this.existingData = existingData; this.protocol = protocol; this.startingDate = new Date(); @@ -91,10 +97,6 @@ public class GenericFormatImportRequest implements Serializable { return sampleCategoryModel; } - public Set<Cruise> getExistingCruises() { - return existingCruises; - } - public TuttiProtocol getProtocol() { return protocol; } @@ -111,17 +113,19 @@ public class GenericFormatImportRequest implements Serializable { return importConfiguration; } - public Cruise getExistingCruise(Cruise importRowCruise) { + public CruiseDataModel getExistingCruiseData(Cruise importRowCruise) { - Cruise result = null; - for (Cruise cruise : existingCruises) { + String cruiseId = getExistingCruiseId(importRowCruise); + CruiseDataModel result = null; - boolean equals = Cruises.equals(importRowCruise, cruise); - if (equals) { - result = cruise; - break; - } + if (cruiseId != null) { + for (CruiseDataModel cruiseDataModel : existingData) { + if (cruiseId.equals(cruiseDataModel.getId())) { + result = cruiseDataModel; + break; + } + } } return result; @@ -143,8 +147,56 @@ public class GenericFormatImportRequest implements Serializable { return importConfiguration.isOverrideProtocol(); } + public boolean isUpdateCruises() { + return importConfiguration.isUpdateCruises(); + } + + public boolean isUpdateOperations() { + return importConfiguration.isUpdateOperations(); + } + + public boolean isImportSpecies() { + return importConfiguration.isImportSpecies(); + } + + public boolean isImportBenthos() { + return importConfiguration.isImportBenthos(); + } + + public boolean isImportMarineLitter() { + return importConfiguration.isImportMarineLitter(); + } + + public boolean isImportAccidentalCatch() { + return importConfiguration.isImportAccidentalCatch(); + } + + public boolean isImportIndividualObservation() { + return importConfiguration.isImportIndividualObservation(); + } + + public boolean isImportAttachments() { + return importConfiguration.isImportAttachments(); + } + public File getReportFile() { return importConfiguration.getReportFile(); } + protected String getExistingCruiseId(Cruise importRowCruise) { + + String result = null; + for (Cruise cruise : existingCruises) { + + boolean equals = Cruises.equals(importRowCruise, cruise); + if (equals) { + result = cruise.getId(); + break; + } + + } + return result; + + } + } 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 cf2d065..ce1617d 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 @@ -31,6 +31,7 @@ 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.model.ProgramDataModel; import fr.ifremer.tutti.persistence.service.util.SynchronizationStatusHelper; import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.DecoratorService; @@ -347,7 +348,10 @@ public class GenericFormatImportService extends AbstractTuttiService { protected GenericFormatImportRequest createImportRequest(GenericFormatImportConfiguration importConfiguration, GenericFormatArchive archive) { - String programId = importConfiguration.getProgramId(); + ProgramDataModel dataToExport = importConfiguration.getDataToExport(); + Preconditions.checkNotNull(dataToExport); + + String programId = dataToExport.getId(); Preconditions.checkNotNull(programId); Program program = persistenceService.getProgram(programId); @@ -365,12 +369,14 @@ public class GenericFormatImportService extends AbstractTuttiService { TuttiProtocol protocol = persistenceService.getProtocol(); + ProgramDataModel dataModel = persistenceService.loadProgram(programId, true); GenericFormatImportRequest request = new GenericFormatImportRequest(importConfiguration, archive, ';', program, context.getSampleCategoryModel(), ImmutableSet.copyOf(cruises), + dataModel, protocol); return request; @@ -393,7 +399,7 @@ public class GenericFormatImportService extends AbstractTuttiService { Set<ImportActionSupport> actions = new LinkedHashSet<>(); addTechnicalActions(importContext, actions); actions.add(new LoadAttachmentsAction(importContext)); - actions.add(new ValidateSurveyAction(importContext)); + actions.add(new ValidateSurveyAction(importContext, persistenceService)); actions.add(new ValidateGearCaracteristicAction(importContext)); actions.add(new ValidateOperationAction(importContext)); actions.add(new ValidateParameterAction(importContext)); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java index 7a8ff84..6640891 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java @@ -31,6 +31,7 @@ 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.persistence.model.ProgramDataModel; import java.io.File; import java.io.Serializable; @@ -86,6 +87,8 @@ public abstract class GenericFormatResultSupport implements Serializable { private String protocolOriginalName; + private ProgramDataModel dataModel; + protected GenericFormatResultSupport(GenericFormatContextSupport importContext) { this.importRequest = importContext.getImportRequest(); @@ -248,4 +251,12 @@ public abstract class GenericFormatResultSupport implements Serializable { this.protocolOriginalName = protocolOriginalName; } + public ProgramDataModel getDataModel() { + return dataModel; + } + + public void setDataModel(ProgramDataModel dataModel) { + this.dataModel = dataModel; + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java index 0b11594..2f123e4 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java @@ -27,11 +27,19 @@ package fr.ifremer.tutti.service.genericformat; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.Cruises; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.FishingOperations; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; +import fr.ifremer.tutti.persistence.model.OperationDataModel; +import fr.ifremer.tutti.persistence.model.ProgramDataModel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.genericformat.importactions.RestoreAfterValidateAction; import org.nuiton.decorator.Decorator; +import java.util.LinkedHashSet; +import java.util.Set; + /** * Created on 2/24/15. * @@ -60,17 +68,67 @@ public class GenericFormatValidateFileContext extends GenericFormatContextSuppor } + public ProgramDataModel toDataModel() { + + final Set<CruiseDataModel> importedCruises = new LinkedHashSet<>(); + + doActionOnCruiseContexts(new CruiseContextAction() { + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + Cruise cruise = cruiseContext.getCruise(); + + CruiseDataModel existingCruiseData = cruiseContext.getExistingCruiseData(); + + Set<OperationDataModel> operations = new LinkedHashSet<>(); + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + + // Add a natural Id as id (used in import to find which cruise to import) + String naturalId = FishingOperations.getNaturalId(fishingOperation); + fishingOperation.setId(naturalId); + OperationDataModel operation = new OperationDataModel(fishingOperation); + fishingOperation.setId((String) null); + + OperationDataModel existingFishingOperationData = fishingOperationContext.getExistingFishingOperationData(); + if (existingFishingOperationData != null) { + operation.setOptionalId(existingFishingOperationData.getId()); + } + + operations.add(operation); + } + + // Add a natural Id as id (used in import to find which cruise to import) + String naturalId = Cruises.getNaturalId(cruise); + cruise.setId(naturalId); + CruiseDataModel cruiseModel = new CruiseDataModel(cruise, operations); + cruise.setId((String) null); + + if (existingCruiseData != null) { + cruiseModel.setOptionalId(existingCruiseData.getId()); + } + + importedCruises.add(cruiseModel); + + } + }); + ProgramDataModel result = new ProgramDataModel(getImportRequest().getProgram(), importedCruises); + return result; + + } + @Override - public void addImportedCruise(Cruise cruise, boolean override) { + public void addImportedCruise(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingFishingOperations) { - if (!override) { + if (existingCruiseData == null) { // add a temporary id to simulate persist behaviour cruise.setId(getNextCruiseId()); } - super.addImportedCruise(cruise, override); + super.addImportedCruise(cruise, existingCruiseData, existingFishingOperations); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java index c784eed..b8ae551 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java @@ -36,6 +36,7 @@ public class GenericFormatValidateFileResult extends GenericFormatResultSupport public GenericFormatValidateFileResult(GenericFormatValidateFileContext validateFileContext) { super(validateFileContext); + setDataModel(validateFileContext.toDataModel()); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java index f33606a..05ca563 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.genericformat; * #L% */ +import com.google.common.collect.Sets; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; @@ -40,6 +41,7 @@ import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import org.apache.commons.collections4.CollectionUtils; @@ -88,6 +90,10 @@ public class GenericformatImportPersitenceHelper { Cruise savedCruise; + CruiseDataModel existingCruiseData; + + Set<FishingOperation> existingFishingOperations; + if (createCruise) { if (log.isInfoEnabled()) { @@ -97,6 +103,10 @@ public class GenericformatImportPersitenceHelper { savedCruise = persistenceService.createCruise(cruise); + existingCruiseData = null; + + existingFishingOperations = null; + } else { if (log.isInfoEnabled()) { @@ -105,42 +115,32 @@ public class GenericformatImportPersitenceHelper { importContext.increments(t("tutti.service.genericFormat.persist.cruise", cruiseStr)); - // delete previous attachments - persistenceService.deleteAllAttachment(ObjectTypeCode.SCIENTIFIC_CRUISE, cruise.getIdAsInt()); + savedCruise = cruise; - savedCruise = persistenceService.saveCruise(cruise, false, false); + existingFishingOperations = Sets.newLinkedHashSet(persistenceService.getAllFishingOperation(cruise.getId())); - List<String> fishingOperationIds = persistenceService.getAllFishingOperationIds(savedCruise.getId()); - importContext.addStepsInProgressionModel(fishingOperationIds.size()); + existingCruiseData = importContext.getImportRequest().getExistingCruiseData(cruise); - for (String fishingOperationId : fishingOperationIds) { + if (importContext.getImportRequest().isUpdateCruises()) { - FishingOperation fishingOperation = persistenceService.getFishingOperation(fishingOperationId); - importContext.increments(t("tutti.service.genericFormat.remove.existingCruise.fishingOperation", cruiseStr, fishingOperationDecorator.toString(fishingOperation))); + savedCruise = persistenceService.saveCruise(cruise, false, false); - persistenceService.deleteFishingOperation(fishingOperationId); + if (importContext.getImportRequest().isImportAttachments()) { - } - - } + // delete previous attachments + persistenceService.deleteAllAttachment(ObjectTypeCode.SCIENTIFIC_CRUISE, cruise.getIdAsInt()); - if (CollectionUtils.isNotEmpty(attachmentRows)) { - persistAttachments(savedCruise.getIdAsInt(), attachmentRows); - } - importContext.addImportedCruise(savedCruise, !createCruise); - - } - - protected void persistAttachments(Integer objectId, Collection<AttachmentRow> attachmentRows) { - - for (AttachmentRow attachmentRow : attachmentRows) { + if (CollectionUtils.isNotEmpty(attachmentRows)) { + persistAttachments(savedCruise.getIdAsInt(), attachmentRows); + } - Attachment attachment = attachmentRow.toAttachment(objectId); - File attachmentFile = importContext.getImportRequest().getArchive().extractAttachment(attachment.getPath()); - persistenceService.createAttachment(attachment, attachmentFile); + } + } } + importContext.addImportedCruise(savedCruise, existingCruiseData, existingFishingOperations); + } public void persistGearCaracteristics() { @@ -174,6 +174,22 @@ public class GenericformatImportPersitenceHelper { } + protected void persistAttachments(Integer objectId, Collection<AttachmentRow> attachmentRows) { + + if (importContext.getImportRequest().isImportAttachments()) { + + for (AttachmentRow attachmentRow : attachmentRows) { + + Attachment attachment = attachmentRow.toAttachment(objectId); + File attachmentFile = importContext.getImportRequest().getArchive().extractAttachment(attachment.getPath()); + persistenceService.createAttachment(attachment, attachmentFile); + + } + + } + + } + public void persistFishingOperation(GenericFormatImportCruiseContext cruiseContext, FishingOperation fishingOperation, CatchBatch catchBatch, Collection<AttachmentRow> operationAttachmentRows, Collection<AttachmentRow> catchAttachmentRows) { String operationStr = fishingOperationDecorator.toString(fishingOperation); @@ -483,7 +499,7 @@ public class GenericformatImportPersitenceHelper { for (IndividualObservationBatch individualObservationBatch : individualObservationBatches) { Integer objectId = individualObservationBatch.getIdAsInt(); - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE,objectId); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE, objectId); // Id was only here to get attachments individualObservationBatch.setId((String) null); 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 87fe198..c79602e 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 @@ -108,7 +108,7 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation } - public void prepareRowForPersist(GenericFormatImportCruiseContext cruiseContext, ImportRow<OperationRow> row) { + public void prepareRowForPersist(ImportRow<OperationRow> row, boolean importSpecies, boolean importBenthos, boolean importMarineLitter) { OperationRow bean = row.getBean(); @@ -121,30 +121,44 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation catchBatch.setCatchTotalRejectedWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalSortedWeightComputed(), false)) { + prepareSpecies(importSpecies, bean, catchBatch); + + prepareBenthos(importBenthos, bean, catchBatch); + + prepareMarineLitter(importMarineLitter, bean, catchBatch); + + } + + protected void prepareSpecies(boolean importSpecies, OperationRow bean, CatchBatch catchBatch) { + + if (!importSpecies || BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalSortedWeightComputed(), false)) { catchBatch.setSpeciesTotalSortedWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalInertWeightComputed(), false)) { + if (!importSpecies || BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalInertWeightComputed(), false)) { catchBatch.setSpeciesTotalInertWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalLivingNotItemizedWeightComputed(), false)) { + if (!importSpecies || BooleanUtils.toBooleanDefaultIfNull(bean.getSpeciesTotalLivingNotItemizedWeightComputed(), false)) { catchBatch.setSpeciesTotalLivingNotItemizedWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalSortedWeightComputed(), false)) { + } + + protected void prepareBenthos(boolean importBenthos , OperationRow bean, CatchBatch catchBatch) { + if (!importBenthos ||BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalSortedWeightComputed(), false)) { catchBatch.setBenthosTotalSortedWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalInertWeightComputed(), false)) { + if (!importBenthos ||BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalInertWeightComputed(), false)) { catchBatch.setBenthosTotalInertWeight(null); } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalLivingNotItemizedWeightComputed(), false)) { + if (!importBenthos ||BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalLivingNotItemizedWeightComputed(), false)) { catchBatch.setBenthosTotalLivingNotItemizedWeight(null); } + } - if (BooleanUtils.toBooleanDefaultIfNull(bean.getMarineLitterTotalWeightComputed(), false)) { + protected void prepareMarineLitter(boolean importMarineLitter, OperationRow bean, CatchBatch catchBatch) { + if (!importMarineLitter || BooleanUtils.toBooleanDefaultIfNull(bean.getMarineLitterTotalWeightComputed(), false)) { catchBatch.setMarineLitterTotalWeight(null); } - } } \ 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 31b5e5f..0477e5e 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 @@ -28,6 +28,7 @@ import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder; import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrders; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; import fr.ifremer.tutti.service.csv.CsvComsumer; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; @@ -62,8 +63,11 @@ public class CsvConsumerForSurvey extends CsvComsumer<SurveyRow, SurveyModel> { Cruise cruise = bean.getCruise(); - Cruise existingCruise = importContext.getExistingCruise(cruise); - if (!(existingCruise == null || importContext.getImportRequest().isOverrideData())) { + CruiseDataModel existingCruiseData = importContext.getImportRequest().getExistingCruiseData(cruise); + + boolean cruiseExist = existingCruiseData != null; + + if (cruiseExist && importContext.canNotOverrideData()) { addCheckError(row, new CruiseAlreadyExistException(cruise)); @@ -73,9 +77,9 @@ public class CsvConsumerForSurvey extends CsvComsumer<SurveyRow, SurveyModel> { } else { - if (existingCruise != null) { + if (cruiseExist) { - cruise.setId(existingCruise.getId()); + cruise.setId(existingCruiseData.getId()); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/OperationModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/OperationModel.java index 375ad81..7990ec8 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/OperationModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/OperationModel.java @@ -195,7 +195,7 @@ public class OperationModel extends AbstractTuttiImportExportModel<OperationRow> newMandatoryColumn("Commentaire", FishingOperation.PROPERTY_COMMENT, TuttiCsvUtil.COMMENT_PARSER_FORMATTER); newMandatoryColumn("Poids_Total", OperationRow.PROPERTY_CATCH_TOTAL_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Calcule", OperationRow.PROPERTY_CATCH_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Calcule", OperationRow.PROPERTY_CATCH_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newIgnoredColumn("Poids_Total_Vrac"); newIgnoredColumn("Poids_Total_Vrac_Calcule"); @@ -204,7 +204,7 @@ public class OperationModel extends AbstractTuttiImportExportModel<OperationRow> newIgnoredColumn("Poids_Total_HorsVrac_Calcule"); newMandatoryColumn("Poids_Total_Non_Trie", OperationRow.PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Non_Trie_Calcule", OperationRow.PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Non_Trie_Calcule", OperationRow.PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newMandatoryColumn("Poids_Total_Tremis", OperationRow.PROPERTY_CATCH_TOTAL_SORTED_TREMIS_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); newIgnoredColumn("Poids_Total_Tremis_Calcule"); @@ -216,7 +216,7 @@ public class OperationModel extends AbstractTuttiImportExportModel<OperationRow> newIgnoredColumn("Poids_Total_Espece_Calcule"); newMandatoryColumn("Poids_Total_Espece_Vrac", OperationRow.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Espece_Vrac_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Espece_Vrac_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newIgnoredColumn("Poids_Total_Espece_Vrac_Trie"); newIgnoredColumn("Poids_Total_Espece_Vrac_Trie_Calcule"); @@ -225,16 +225,16 @@ public class OperationModel extends AbstractTuttiImportExportModel<OperationRow> newIgnoredColumn("Poids_Total_Espece_HorsVrac_Calcule"); newMandatoryColumn("Poids_Total_Espece_Inerte_Trie", OperationRow.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Espece_Inerte_Trie_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Espece_Inerte_Trie_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newMandatoryColumn("Poids_Total_Espece_Vivant_non_detaille_trie", OperationRow.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Espece_Vivant_non_detaille_trie_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Espece_Vivant_non_detaille_trie_Calcule", OperationRow.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newIgnoredColumn("Poids_Total_Benthos"); newIgnoredColumn("Poids_Total_Benthos_Calcule"); newMandatoryColumn("Poids_Total_Benthos_Vrac", OperationRow.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Benthos_Vrac_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Benthos_Vrac_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newIgnoredColumn("Poids_Total_Benthos_Vrac_Trie"); newIgnoredColumn("Poids_Total_Benthos_Vrac_Trie_Calcule"); @@ -243,13 +243,13 @@ public class OperationModel extends AbstractTuttiImportExportModel<OperationRow> newIgnoredColumn("Poids_Total_Benthos_HorsVrac_Calcule"); newMandatoryColumn("Poids_Total_Benthos_Inerte_Trie", OperationRow.PROPERTY_BENTHOS_TOTAL_INERT_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Benthos_Inerte_Trie_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_INERT_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Benthos_Inerte_Trie_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_INERT_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newMandatoryColumn("Poids_Total_Benthos_Vivant_non_detaille_trie", OperationRow.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Benthos_Vivant_non_detaille_trie_Calcule", OperationRow.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newMandatoryColumn("Poids_Total_Macro_Dechet", OperationRow.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT, TuttiCsvUtil.WEIGHT_NULL_TO_9); - newMandatoryColumn("Poids_Total_Macro_Dechet_Calcule", OperationRow.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.PRIMITIVE_BOOLEAN); + newMandatoryColumn("Poids_Total_Macro_Dechet_Calcule", OperationRow.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT_COMPUTED, TuttiCsvUtil.BOOLEAN); newMandatoryColumn("Serie_Id", Cruise.PROPERTY_PROGRAM, parserFactory.getProgramParser()); newMandatoryColumn("Engin_Id", FishingOperation.PROPERTY_GEAR, parserFactory.getGearParser()); 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 index 95170cf..b6b365f 100644 --- 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 @@ -58,7 +58,7 @@ public class DoCheckWeightAction extends ImportActionSupport { protected boolean canExecute() { return importContext.getImportRequest().isCheckWeights() && importContext.isTechnicalFilesValid() - && importContext.getCatchFileResult().isValid() + && importContext.getOperationFileResult().isValid() && importContext.getMarineLitterFileResult().isValid(); } 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 index d1ae23c..899b21e 100644 --- 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 @@ -56,6 +56,7 @@ public class DoCleanWeightAction extends ImportActionSupport { protected boolean canExecute() { return importContext.getImportRequest().isCleanWeights() && importContext.isTechnicalFilesValid() + && importContext.getOperationFileResult().isValid() && importContext.getCatchFileResult().isValid() && importContext.getMarineLitterFileResult().isValid(); } 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 index 83bf3c4..f1905b4 100644 --- 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 @@ -60,7 +60,15 @@ public class ImportAccidentalCatchAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + return importContext.isTechnicalFilesValid() + && importContext.getSurveyFileResult().isValid() + && importContext.getOperationFileResult().isValid() + && importContext.getImportRequest().isImportAccidentalCatch(); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.accidentalCatches")); } @Override 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 index 059ba16..a43995a 100644 --- 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 @@ -60,7 +60,16 @@ public class ImportCatchAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + return importContext.isTechnicalFilesValid() + && importContext.getSurveyFileResult().isValid() + && importContext.getOperationFileResult().isValid() + && (importContext.getImportRequest().isImportSpecies() || + importContext.getImportRequest().isImportBenthos()); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.catches")); } @Override 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 index 4714c14..effad1b 100644 --- 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 @@ -64,6 +64,11 @@ public class ImportGearCaracteristicAction extends ImportActionSupport { } @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.gearCaracteristics")); + } + + @Override protected void doExecute() { if (log.isInfoEnabled()) { @@ -75,7 +80,14 @@ public class ImportGearCaracteristicAction extends ImportActionSupport { for (ImportRow<GearCaracteristicRow> row : consumer) { GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(cruiseContext, row); + + if (cruiseContext != null) { + + if (row.isValid()) { + consumer.prepareRowForPersist(cruiseContext, row); + } + + } } } catch (IOException e) { 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 index d8d270a..d2bb9b6 100644 --- 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 @@ -60,7 +60,15 @@ public class ImportIndividualObservationAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + return importContext.isTechnicalFilesValid() + && importContext.getSurveyFileResult().isValid() + && importContext.getOperationFileResult().isValid() + && importContext.getImportRequest().isImportIndividualObservation(); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.individualObservations")); } @Override 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 index a5c3973..0f4e94f 100644 --- 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 @@ -60,7 +60,15 @@ public class ImportMarineLitterAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + return importContext.isTechnicalFilesValid() + && importContext.getSurveyFileResult().isValid() + && importContext.getOperationFileResult().isValid() + && importContext.getImportRequest().isImportMarineLitter(); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.marineLitters")); } @Override 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 index d36008a..dde6d82 100644 --- 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 @@ -69,18 +69,28 @@ public class ImportOperationAction extends ImportActionSupport { } @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.operations")); + } + + @Override protected void doExecute() { if (log.isInfoEnabled()) { log.info("Import operation.csv file."); } importContext.increments(t("tutti.service.genericFormat.import.operations")); + + boolean importSpecies = importContext.getImportRequest().isImportSpecies(); + boolean importBenthos = importContext.getImportRequest().isImportBenthos(); + boolean importMarineLitter= importContext.getImportRequest().isImportMarineLitter(); + 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); + consumer.prepareRowForPersist(row, importSpecies, importBenthos, importMarineLitter); OperationRow bean = row.getBean(); 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 index 5369ccd..ed1d397 100644 --- 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 @@ -60,7 +60,14 @@ public class ImportParameterAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() && importContext.getOperationFileResult().isValid(); + return importContext.isTechnicalFilesValid() + && importContext.getSurveyFileResult().isValid() + && importContext.getOperationFileResult().isValid(); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.parameters")); } @Override 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 index b3795f0..f1801bc 100644 --- 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 @@ -64,7 +64,19 @@ public class ImportProtocolAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.getReferentialTemporarySpeciesFileResult().isValid() && importContext.getProtocolFileResult().isFound(); + return importContext.getReferentialTemporarySpeciesFileResult().isValid() + && importContext.getProtocolFileResult().isFound(); + } + + @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")); + } @Override @@ -134,15 +146,4 @@ public class ImportProtocolAction extends ImportActionSupport { } } - - @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 index 2e94785..468bb9b 100644 --- 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 @@ -66,6 +66,16 @@ public class ImportReferentialGearAction extends ImportActionSupport { } @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")); + + } + + @Override protected void doExecute() { if (log.isInfoEnabled()) { @@ -109,14 +119,4 @@ public class ImportReferentialGearAction extends ImportActionSupport { } } - - @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 index 3ad5c2c..7b84048 100644 --- 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 @@ -66,6 +66,16 @@ public class ImportReferentialPersonAction extends ImportActionSupport { } @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")); + + } + + @Override protected void doExecute() { importContext.increments(t("tutti.service.genericFormat.import.temporaryPersons")); @@ -109,15 +119,4 @@ public class ImportReferentialPersonAction extends ImportActionSupport { } } - - @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 index dcf2203..742ce33 100644 --- 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 @@ -66,6 +66,16 @@ public class ImportReferentialSpeciesAction extends ImportActionSupport { } @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")); + + } + + @Override protected void doExecute() { importContext.increments(t("tutti.service.genericFormat.import.temporarySpecies")); @@ -111,14 +121,4 @@ public class ImportReferentialSpeciesAction extends ImportActionSupport { } - - @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 index 78d46c3..e6a1615 100644 --- 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 @@ -66,6 +66,16 @@ public class ImportReferentialVesselAction extends ImportActionSupport { } @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")); + + } + + @Override protected void doExecute() { importContext.increments(t("tutti.service.genericFormat.import.temporaryVessels")); @@ -106,14 +116,4 @@ public class ImportReferentialVesselAction extends ImportActionSupport { } } - - @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 index 8739887..1abd298 100644 --- 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 @@ -66,6 +66,11 @@ public class ImportSurveyAction extends ImportActionSupport { } @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.import.cruises")); + } + + @Override protected void doExecute() { if (log.isInfoEnabled()) { @@ -73,27 +78,23 @@ public class ImportSurveyAction extends ImportActionSupport { } 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) { + GenericFormatCsvFileResult importFileResult = importContext.getSurveyFileResult(); + try (CsvConsumerForSurvey consumer = importContext.loadSurveys(true)) { + for (ImportRow<SurveyRow> row : consumer) { - consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(row); + consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(row); - SurveyRow bean = row.getBean(); - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SCIENTIFIC_CRUISE, bean.getObjectId()); - persitenceHelper.persistCruise(bean.getCruise(), attachmentRows); - - } - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close survey.csv file", e); - } catch (ImportRuntimeException e) { - - importFileResult.addGlobalError(e.getMessage()); + SurveyRow bean = row.getBean(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SCIENTIFIC_CRUISE, bean.getObjectId()); + persitenceHelper.persistCruise(bean.getCruise(), attachmentRows); } + } 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/LoadAttachmentsAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/LoadAttachmentsAction.java index 3640688..48b444c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/LoadAttachmentsAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/LoadAttachmentsAction.java @@ -33,7 +33,12 @@ public class LoadAttachmentsAction extends ImportActionSupport { @Override protected boolean canExecute() { - return true; + return importContext.getImportRequest().isImportAttachments(); + } + + @Override + protected void skipExecute() { + importContext.increments(t("tutti.service.genericFormat.skip.load.attachments")); } @Override @@ -68,7 +73,7 @@ public class LoadAttachmentsAction extends ImportActionSupport { importContext.setAttachmentRows(attachmentRowsByObjectId); } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close sampleCategory.csv file", e); + throw new ApplicationTechnicalException("Could not close attachments.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 index 486e1c7..0b60aad 100644 --- 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 @@ -56,7 +56,7 @@ public class ValidateGearCaracteristicAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid()&& importContext.getSurveyFileResult().isValid(); + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid(); } @Override @@ -74,8 +74,12 @@ public class ValidateGearCaracteristicAction extends ImportActionSupport { GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - if (row.isValid()) { - consumer.prepareRowForPersist(cruiseContext, row); + if (cruiseContext != null) { + + if (row.isValid()) { + consumer.prepareRowForPersist(cruiseContext, row); + } + } } 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 index 3238e0c..1962899 100644 --- 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 @@ -58,7 +58,7 @@ public class ValidateOperationAction extends ImportActionSupport { @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid()&& importContext.getSurveyFileResult().isValid(); + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid(); } @Override @@ -68,6 +68,10 @@ public class ValidateOperationAction extends ImportActionSupport { log.info("Validate operation.csv file."); } + boolean importSpecies = importContext.getImportRequest().isImportSpecies(); + boolean importBenthos = importContext.getImportRequest().isImportBenthos(); + boolean importMarineLitter = importContext.getImportRequest().isImportMarineLitter(); + GenericFormatCsvFileResult importFileResult = importContext.getOperationFileResult(); try (CsvConsumerForOperation consumer = importContext.loadOperations(false)) { for (ImportRow<OperationRow> row : consumer) { @@ -76,12 +80,13 @@ public class ValidateOperationAction extends ImportActionSupport { GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (cruiseContext != null && row.isValid()) { - consumer.prepareRowForPersist(cruiseContext, row); + consumer.prepareRowForPersist(row, importSpecies, importBenthos, importMarineLitter); OperationRow bean = row.getBean(); FishingOperation fishingOperation = bean.getFishingOperation(); + CatchBatch catchBatch = bean.getCatchBatch(); importContext.addImportedFishingOperation(fishingOperation, catchBatch); 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 index 436a807..a0355c7 100644 --- 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 @@ -24,8 +24,11 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ -import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.model.CruiseDataModel; +import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; @@ -37,6 +40,7 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -51,8 +55,11 @@ public class ValidateSurveyAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateSurveyAction.class); - public ValidateSurveyAction(GenericFormatContextSupport importContext) { + private final PersistenceService persistenceService; + + public ValidateSurveyAction(GenericFormatContextSupport importContext, PersistenceService persistenceService) { super(importContext); + this.persistenceService = persistenceService; } @Override @@ -78,8 +85,21 @@ public class ValidateSurveyAction extends ImportActionSupport { Cruise cruise = row.getBean().getCruise(); - boolean createCruise = TuttiEntities.isNew(cruise); - importContext.addImportedCruise(cruise, !createCruise); + CruiseDataModel existingCruiseData = importContext.getImportRequest().getExistingCruiseData(cruise); + + Set<FishingOperation> existingFishingOperations; + + if (existingCruiseData == null) { + + existingFishingOperations = null; + + } else { + + existingFishingOperations = Sets.newHashSet(persistenceService.getAllFishingOperation(existingCruiseData.getId())); + + } + + importContext.addImportedCruise(cruise, existingCruiseData, existingFishingOperations); } 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 5fb02a1..9689ff3 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 @@ -224,11 +224,20 @@ tutti.service.genericFormat.persist.operation.parameters= tutti.service.genericFormat.persist.operation.speciesBatches= tutti.service.genericFormat.remove.existingCruise.fishingOperation= tutti.service.genericFormat.reuse.protocol= +tutti.service.genericFormat.skip.import.accidentalCatches= +tutti.service.genericFormat.skip.import.catches= +tutti.service.genericFormat.skip.import.cruises= +tutti.service.genericFormat.skip.import.gearCaracteristics= +tutti.service.genericFormat.skip.import.individualObservations= +tutti.service.genericFormat.skip.import.marineLitters= +tutti.service.genericFormat.skip.import.operations= +tutti.service.genericFormat.skip.import.parameters= tutti.service.genericFormat.skip.import.protocol= tutti.service.genericFormat.skip.import.temporaryGears= tutti.service.genericFormat.skip.import.temporaryPersons= tutti.service.genericFormat.skip.import.temporarySpecies= tutti.service.genericFormat.skip.import.temporaryVessels= +tutti.service.genericFormat.skip.load.attachments= tutti.service.genericFormat.validate.accidentalCatches= tutti.service.genericFormat.validate.catches= tutti.service.genericFormat.validate.computeReport= 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 4bf7a12..1dcd543 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 @@ -162,6 +162,11 @@ tutti.service.genericFormat.import.sampleCategoryModel.error.alreadyUsedCaracter tutti.service.genericFormat.import.sampleCategoryModel.error.alreadyUsedCode=Le code %s est déja utilisé tutti.service.genericFormat.import.sampleCategoryModel.error.noCaracteristic=La catactéristique est obligatoire tutti.service.genericFormat.import.sampleCategoryModel.error.noCode=Le code est obligatoire +tutti.service.genericFormat.import.skip.gearCaracteristics=Ne pas importer les caractéristiques des engins +tutti.service.genericFormat.import.skip.individualObservations=Ne pas importer les observation individuelles +tutti.service.genericFormat.import.skip.marineLitters=Ne pas importer les macro déchets +tutti.service.genericFormat.import.skip.operations=Ne pas importer les traits +tutti.service.genericFormat.import.skip.parameters=Ne pas importer les caractéristiques des traits tutti.service.genericFormat.import.temporaryGears=Import des références temporaires d'engins tutti.service.genericFormat.import.temporaryPersons=Import des références temporaires de personnes tutti.service.genericFormat.import.temporarySpecies=Import des références temporaires de Taxons @@ -170,7 +175,7 @@ tutti.service.genericFormat.importError.archiveNotSane=L'archive ne respecte pas tutti.service.genericFormat.importError.missArchiveFile=Il manque le fichier %s dans l'archive tutti.service.genericFormat.invalid.cruise=Erreur d'élévation de poids sur les traits de la campagne %s \:<ul>%s</ul> tutti.service.genericFormat.invalid.fishingOperation=L'élévation des poids ne peut pas être réalisée sur le trait %s, pour la raison suivante \:<ul>%s</ul> -tutti.service.genericFormat.load.attachments= +tutti.service.genericFormat.load.attachments=Chargement des pièces jointes tutti.service.genericFormat.load.protocol=Import du protocol tutti.service.genericFormat.persist.cruise=Sauvegarde de la campagne <strong>%s</strong> tutti.service.genericFormat.persist.gearCaracteristics=Sauvegarde des caractéristiques des engins de la campagne <strong>%s</strong> @@ -183,11 +188,20 @@ tutti.service.genericFormat.persist.operation.parameters=Sauvegarde des caracté tutti.service.genericFormat.persist.operation.speciesBatches=Sauvegarde des lots espèces du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.remove.existingCruise.fishingOperation=Suppression du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.reuse.protocol=Réutilisation du protocol existant %s +tutti.service.genericFormat.skip.import.accidentalCatches= +tutti.service.genericFormat.skip.import.catches=Ne pas importer les captures +tutti.service.genericFormat.skip.import.cruises=Ne pas importer les caractéristiques de campagne +tutti.service.genericFormat.skip.import.gearCaracteristics= +tutti.service.genericFormat.skip.import.individualObservations= +tutti.service.genericFormat.skip.import.marineLitters= +tutti.service.genericFormat.skip.import.operations= +tutti.service.genericFormat.skip.import.parameters= tutti.service.genericFormat.skip.import.protocol=Pas de protocole à importer -tutti.service.genericFormat.skip.import.temporaryGears= -tutti.service.genericFormat.skip.import.temporaryPersons= -tutti.service.genericFormat.skip.import.temporarySpecies= -tutti.service.genericFormat.skip.import.temporaryVessels= +tutti.service.genericFormat.skip.import.temporaryGears=Pas d'engin temporaire à importer +tutti.service.genericFormat.skip.import.temporaryPersons=Pas de personne temporaire à importer +tutti.service.genericFormat.skip.import.temporarySpecies=Pas de taxon temporaire à importer +tutti.service.genericFormat.skip.import.temporaryVessels=Pas de navire temporaire à importer +tutti.service.genericFormat.skip.load.attachments=Ne pas charger les pièces-jointes tutti.service.genericFormat.validate.accidentalCatches=Validation du fichier <strong>accidentalCatch.csv</strong> - ligne %s tutti.service.genericFormat.validate.catches=Validation du fichier <strong>catch.csv</strong> - ligne %s tutti.service.genericFormat.validate.computeReport=Générigation du rapport de validation -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.