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 a8cfff8c3bb261dab943d61ce50834c46c421c66 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 1 12:03:17 2015 +0200 mise en place de l'import avec selection des données + meilleur design des actions (persistenceHelper ne contient plus de logique) --- .../tutti/persistence/entities/data/Cruises.java | 9 + .../entities/data/FishingOperations.java | 10 + .../genericformat/GenericFormatContextSupport.java | 38 +- .../GenericFormatImportCruiseContext.java | 60 ++- .../GenericFormatImportOperationContext.java | 3 + .../GenericFormatImportOperationResult.java | 4 +- .../genericformat/GenericFormatImportRequest.java | 17 + .../genericformat/GenericFormatImportService.java | 61 +-- .../GenericFormatImportValidationHelper.java | 74 ++- .../GenericFormatValidateFileContext.java | 20 - .../GenericformatImportPersistenceHelper.java | 277 ++++++++++ .../GenericformatImportPersitenceHelper.java | 566 --------------------- .../consumer/CsvConsumerForAccidentalCatch.java | 44 +- .../consumer/CsvConsumerForCatch.java | 26 +- .../consumer/CsvConsumerForGearCaracteristic.java | 55 +- .../CsvConsumerForIndividualObservation.java | 44 +- .../consumer/CsvConsumerForMarineLitter.java | 14 +- .../consumer/CsvConsumerForOperation.java | 57 +-- .../consumer/CsvConsumerForParameter.java | 57 +-- .../importactions/ImportAccidentalCatchAction.java | 85 +++- .../importactions/ImportCatchAction.java | 212 +++++++- .../ImportGearCaracteristicAction.java | 49 +- .../ImportIndividualObservationAction.java | 85 +++- .../importactions/ImportMarineLitterAction.java | 85 +++- .../importactions/ImportOperationAction.java | 163 +++++- .../importactions/ImportParameterAction.java | 78 ++- .../importactions/ImportProtocolAction.java | 21 +- .../importactions/ImportReferentialGearAction.java | 12 +- .../ImportReferentialPersonAction.java | 11 +- .../ImportReferentialSpeciesAction.java | 12 +- .../ImportReferentialVesselAction.java | 11 +- .../importactions/ImportSurveyAction.java | 142 +++++- .../importactions/ImpotSampleCategoryAction.java | 10 +- .../ValidateAccidentalCatchAction.java | 2 +- .../importactions/ValidateCatchAction.java | 2 +- .../ValidateGearCaracteristicAction.java | 4 +- .../ValidateIndividualObservationAction.java | 2 +- .../importactions/ValidateMarineLitterAction.java | 2 +- .../importactions/ValidateOperationAction.java | 2 +- .../importactions/ValidateParameterAction.java | 2 +- .../importactions/ValidateSurveyAction.java | 21 +- .../resources/i18n/tutti-service_en_GB.properties | 8 + .../resources/i18n/tutti-service_fr_FR.properties | 9 +- 43 files changed, 1512 insertions(+), 954 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 091766e..e2febdc 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 @@ -26,6 +26,7 @@ import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatu import org.apache.commons.lang3.builder.EqualsBuilder; import java.util.Calendar; +import java.util.Objects; public class Cruises extends AbstractCruises { @@ -44,6 +45,14 @@ public class Cruises extends AbstractCruises { return SynchronizationStatus.SYNCHRONIZED.getValue().equals(synchronizationStatus); } + public static boolean equalsNaturalId(Cruise cruise1, String naturalId2) { + + String naturalId1 = getNaturalId(cruise1); + boolean equals = Objects.equals(naturalId1, naturalId2); + return equals; + + } + public static boolean equals(Cruise cruise1, Cruise cruise2) { EqualsBuilder equalsBuilder = new EqualsBuilder(); 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 6332400..4f51874 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 @@ -26,6 +26,8 @@ package fr.ifremer.tutti.persistence.entities.data; import org.apache.commons.lang3.builder.EqualsBuilder; +import java.util.Objects; + public class FishingOperations extends AbstractFishingOperations { public static final String PROPERTY_GEAR_SHOOTING_START_DAY = "gearShootingStartDay"; @@ -53,6 +55,14 @@ public class FishingOperations extends AbstractFishingOperations { } + public static boolean equalsNaturalId(FishingOperation fishingOperation1, String naturalId2) { + + String naturalId1 = getNaturalId(fishingOperation1); + boolean equals = Objects.equals(naturalId1, naturalId2); + return equals; + + } + public static String getNaturalId(FishingOperation fishingOperation) { String cruiseId = Cruises.getNaturalId(fishingOperation.getCruise()); 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 0a77e48..12248f6 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 @@ -73,6 +73,7 @@ import java.nio.file.Path; import java.text.ParseException; import java.util.Collection; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -134,6 +135,8 @@ public abstract class GenericFormatContextSupport implements Closeable { private final Map<String, GenericFormatImportCruiseContext> cruiseContexts; + private final Set<String> skippedCruisesNaturalId; + private String protocolOriginalName; private final Multimap<String, AttachmentRow> attachmentRows; @@ -159,6 +162,7 @@ public abstract class GenericFormatContextSupport implements Closeable { this.importEntityParserFactory = new GenericFormatImportEntityParserFactory(persistenceService, this); this.validationHelper = new GenericFormatImportValidationHelper(this, new ValidationService()); this.cruiseContexts = new LinkedHashMap<>(); + this.skippedCruisesNaturalId = new LinkedHashSet<>(); GenericFormatArchive archive = importRequest.getArchive(); @@ -302,23 +306,39 @@ public abstract class GenericFormatContextSupport implements Closeable { } - public void addImportedCruise(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingFishingOperations) { + public void addImportedCruise(Cruise cruise, CruiseDataModel selectedCruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingFishingOperations) { String cruiseId = cruise.getId(); - GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, existingCruiseData, existingFishingOperations, cruiseDecorator.toString(cruise)); + GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, selectedCruise, existingCruiseData, existingFishingOperations, cruiseDecorator.toString(cruise)); cruiseContexts.put(cruiseId, cruiseContext); } + public void addSkippedCruise(Cruise cruise) { + + String naturalId = Cruises.getNaturalId(cruise); + skippedCruisesNaturalId.add(naturalId); + + } + public void addImportedFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch) { GenericFormatImportCruiseContext cruiseContext = getCruiseContext(fishingOperation.getCruise()); - String fishingOperationLabel = fishingOperationDecorator.toString(fishingOperation); + String fishingOperationLabel = decorate(fishingOperation); cruiseContext.addFishingOperation(fishingOperation, catchBatch, fishingOperationLabel); } + public boolean isCruiseSkipped(RowWithCruiseContextSupport row) { + + Cruise cruise = row.getCruise(); + String naturalId = Cruises.getNaturalId(cruise); + boolean skipped = skippedCruisesNaturalId.contains(naturalId); + return skipped; + + } + public GenericFormatImportCruiseContext getCruiseContext(RowWithCruiseContextSupport row) { Cruise cruise = row.getCruise(); @@ -460,10 +480,6 @@ public abstract class GenericFormatContextSupport implements Closeable { progressionModel.increments(message); } - public void addStepsInProgressionModel(int size) { - progressionModel.adaptTotal(progressionModel.getTotal() + size); - } - public GenericFormatImportValidationHelper getValidationHelper() { return validationHelper; } @@ -528,4 +544,12 @@ public abstract class GenericFormatContextSupport implements Closeable { } + public String decorate(Cruise cruise) { + return cruiseDecorator.toString(cruise); + } + + public String decorate(FishingOperation fishingOperation) { + return fishingOperationDecorator.toString(fishingOperation); + } + } 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 07fafab..4a98128 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 @@ -41,6 +41,7 @@ import java.io.Closeable; import java.io.Serializable; import java.util.Collection; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import java.util.TreeMap; @@ -53,8 +54,19 @@ import java.util.TreeMap; */ public class GenericFormatImportCruiseContext implements Closeable { + /** + * The imported cruise. + */ private final Cruise cruise; + /** + * The optional selection data. + */ + private final CruiseDataModel selectiontCruiseData; + + /** + * The optional existing cruise. + */ private final CruiseDataModel existingCruiseData; private final String cruiseLabel; @@ -65,13 +77,17 @@ public class GenericFormatImportCruiseContext implements Closeable { private final Set<FishingOperation> existingOperations; - public GenericFormatImportCruiseContext(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingOperations, String cruiseLabel) { + private final Set<String> skippedFishingOperationsNaturalId; + + public GenericFormatImportCruiseContext(Cruise cruise, CruiseDataModel selectiontCruiseData, CruiseDataModel existingCruiseData, Set<FishingOperation> existingOperations, String cruiseLabel) { this.cruise = cruise; + this.selectiontCruiseData = selectiontCruiseData; this.existingCruiseData = existingCruiseData; this.existingOperations = existingOperations; this.cruiseLabel = cruiseLabel; this.fishingOperationContexts = new TreeMap<>(); this.gearsWithcaracteristics = new HashSet<>(); + this.skippedFishingOperationsNaturalId = new LinkedHashSet<>(); } @Override @@ -94,14 +110,14 @@ public class GenericFormatImportCruiseContext implements Closeable { public OperationDataModel getExistingFishingOperationData(FishingOperation importRowCruise) { - String cruiseId = getExistingFishingOperationId(importRowCruise); OperationDataModel result = null; - if (cruiseId != null) { + String fishingOperationId = getExistingFishingOperationId(importRowCruise); + if (fishingOperationId != null) { - for (OperationDataModel cruiseDataModel : existingCruiseData) { - if (cruiseId.equals(cruiseDataModel.getId())) { - result = cruiseDataModel; + for (OperationDataModel operationDataModel : existingCruiseData) { + if (fishingOperationId.equals(operationDataModel.getId())) { + result = operationDataModel; break; } } @@ -138,6 +154,22 @@ public class GenericFormatImportCruiseContext implements Closeable { fishingOperationContexts.put(fishingOperation.getId(), new GenericFormatImportOperationContext(fishingOperation, catchBatch, existingFishingOperationData, fishingOperationLabel)); } + public void addSkippedFishingOperation(FishingOperation fishingOperation) { + + String naturalId = FishingOperations.getNaturalId(fishingOperation); + skippedFishingOperationsNaturalId.add(naturalId); + + } + + public boolean isFishingOperationSkipped(RowWithOperationContextSupport row) { + + FishingOperation fishingOperation = row.getFishingOperation(); + String naturalId = FishingOperations.getNaturalId(fishingOperation); + boolean skipped = skippedFishingOperationsNaturalId.contains(naturalId); + return skipped; + + } + public boolean isFishingOperationAlreadyImported(RowWithOperationContextSupport row) { GenericFormatImportOperationContext fishingOperationContext = getFishingOperationContext(row); @@ -146,6 +178,22 @@ public class GenericFormatImportCruiseContext implements Closeable { } + public OperationDataModel getSelectedFishingOperation(FishingOperation row) { + + OperationDataModel result = null; + + for (OperationDataModel selectedFishingOperation : selectiontCruiseData) { + boolean equals = FishingOperations.equalsNaturalId(row, selectedFishingOperation.getId()); + if (equals) { + result = selectedFishingOperation; + break; + } + } + + return result; + + } + public GenericFormatImportOperationContext getFishingOperationContext(RowWithOperationContextSupport row) { FishingOperation fishingOperation = row.getFishingOperation(); 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 e234dda..413fcd3 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 @@ -126,6 +126,9 @@ public class GenericFormatImportOperationContext implements Closeable { } + public boolean isOverride() { + return existingFishingOperationData!=null; + } public OperationDataModel getExistingFishingOperationData() { return existingFishingOperationData; } 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 1bcec3d..85c9f02 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 @@ -77,8 +77,8 @@ public class GenericFormatImportOperationResult implements Serializable { public GenericFormatImportOperationResult(GenericFormatImportOperationContext operationContext) { this.fishingOperation = operationContext.getFishingOperation(); - this.override = operationContext.getExistingFishingOperationData() != null; - catchBatch = operationContext.getCatchBatch(); + this.override = operationContext.isOverride(); + this.catchBatch = operationContext.getCatchBatch(); this.checkErrors = new LinkedHashSet<>(); flushContext(operationContext); } 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 5e061db..a2c072f 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 @@ -199,4 +199,21 @@ public class GenericFormatImportRequest implements Serializable { } + public CruiseDataModel getSelectedCruise(Cruise importRowCruise) { + + CruiseDataModel result = null; + + ProgramDataModel dataToExport = importConfiguration.getDataToExport(); + for (CruiseDataModel selectedCruise : dataToExport) { + boolean equals = Cruises.equalsNaturalId(importRowCruise, selectedCruise.getId()); + if (equals) { + result = selectedCruise; + 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 ce1617d..5cafde1 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 @@ -65,11 +65,6 @@ import fr.ifremer.tutti.service.genericformat.importactions.ValidateMarineLitter import fr.ifremer.tutti.service.genericformat.importactions.ValidateOperationAction; import fr.ifremer.tutti.service.genericformat.importactions.ValidateParameterAction; import fr.ifremer.tutti.service.genericformat.importactions.ValidateSurveyAction; -import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; -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 org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; @@ -92,22 +87,8 @@ public class GenericFormatImportService extends AbstractTuttiService { private PersistenceService persistenceService; - private ReferentialTemporaryGearService referentialTemporaryGearService; - - private ReferentialTemporaryPersonService referentialTemporaryPersonService; - - private ReferentialTemporarySpeciesService referentialTemporarySpeciesService; - - private ReferentialTemporaryVesselService referentialTemporaryVesselService; - - private ProtocolImportExportService protocolImportExportService; - - private WeightCleaningService weightCleaningService; - private PdfGeneratorService pdfGeneratorService; - private GenericFormatCheckDataService checkDataService; - private Decorator<FishingOperation> fishingOperationDecorator; private Decorator<Cruise> cruiseDecorator; @@ -117,15 +98,8 @@ public class GenericFormatImportService extends AbstractTuttiService { super.setServiceContext(context); - weightCleaningService = getService(WeightCleaningService.class); pdfGeneratorService = getService(PdfGeneratorService.class); - checkDataService = getService(GenericFormatCheckDataService.class); persistenceService = getService(PersistenceService.class); - referentialTemporaryGearService = getService(ReferentialTemporaryGearService.class); - referentialTemporaryPersonService = getService(ReferentialTemporaryPersonService.class); - referentialTemporarySpeciesService = getService(ReferentialTemporarySpeciesService.class); - referentialTemporaryVesselService = getService(ReferentialTemporaryVesselService.class); - protocolImportExportService = getService(ProtocolImportExportService.class); DecoratorService decoratorService = getService(DecoratorService.class); cruiseDecorator = decoratorService.getDecoratorByType(Cruise.class); @@ -199,6 +173,7 @@ public class GenericFormatImportService extends AbstractTuttiService { public int getImportProgramNbSteps(GenericFormatImportConfiguration importConfiguration) { + //TODO Recompute exact nb steps used... Preconditions.checkNotNull(importConfiguration); GenericFormatArchive archive = createArchive(importConfiguration); @@ -302,7 +277,9 @@ public class GenericFormatImportService extends AbstractTuttiService { if (importContext.isArchiveLayoutValid()) { - Set<ImportActionSupport> actions = createValidateActions(importContext); + GenericformatImportPersistenceHelper persitenceHelper = new GenericformatImportPersistenceHelper(context, importContext); + + Set<ImportActionSupport> actions = createValidateActions(importContext, persitenceHelper); for (ImportActionSupport action : actions) { @@ -327,7 +304,7 @@ public class GenericFormatImportService extends AbstractTuttiService { if (importContext.isArchiveLayoutValid()) { - GenericformatImportPersitenceHelper persitenceHelper = new GenericformatImportPersitenceHelper(importContext, persistenceService, cruiseDecorator, fishingOperationDecorator); + GenericformatImportPersistenceHelper persitenceHelper = new GenericformatImportPersistenceHelper(context, importContext); Set<ImportActionSupport> actions = createImportActions(importContext, persitenceHelper); @@ -394,12 +371,12 @@ public class GenericFormatImportService extends AbstractTuttiService { } - protected Set<ImportActionSupport> createValidateActions(GenericFormatValidateFileContext importContext) { + protected Set<ImportActionSupport> createValidateActions(GenericFormatValidateFileContext importContext, GenericformatImportPersistenceHelper persitenceHelper) { Set<ImportActionSupport> actions = new LinkedHashSet<>(); - addTechnicalActions(importContext, actions); + addTechnicalActions(importContext, actions, persitenceHelper); actions.add(new LoadAttachmentsAction(importContext)); - actions.add(new ValidateSurveyAction(importContext, persistenceService)); + actions.add(new ValidateSurveyAction(importContext, persitenceHelper)); actions.add(new ValidateGearCaracteristicAction(importContext)); actions.add(new ValidateOperationAction(importContext)); actions.add(new ValidateParameterAction(importContext)); @@ -411,10 +388,10 @@ public class GenericFormatImportService extends AbstractTuttiService { } - protected Set<ImportActionSupport> createImportActions(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + protected Set<ImportActionSupport> createImportActions(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persitenceHelper) { Set<ImportActionSupport> actions = new LinkedHashSet<>(); - addTechnicalActions(importContext, actions); + addTechnicalActions(importContext, actions, persitenceHelper); actions.add(new LoadAttachmentsAction(importContext)); actions.add(new ImportSurveyAction(importContext, persitenceHelper)); actions.add(new ImportGearCaracteristicAction(importContext, persitenceHelper)); @@ -424,20 +401,20 @@ public class GenericFormatImportService extends AbstractTuttiService { actions.add(new ImportMarineLitterAction(importContext, persitenceHelper)); actions.add(new ImportAccidentalCatchAction(importContext, persitenceHelper)); actions.add(new ImportIndividualObservationAction(importContext, persitenceHelper)); - actions.add(new DoCleanWeightAction(importContext, weightCleaningService)); - actions.add(new DoCheckWeightAction(importContext, checkDataService)); + actions.add(new DoCleanWeightAction(importContext, context.getService(WeightCleaningService.class))); + actions.add(new DoCheckWeightAction(importContext, context.getService(GenericFormatCheckDataService.class))); return actions; } - protected void addTechnicalActions(GenericFormatContextSupport importContext, Set<ImportActionSupport> actions) { + protected void addTechnicalActions(GenericFormatContextSupport importContext, Set<ImportActionSupport> actions, GenericformatImportPersistenceHelper persitenceHelper) { - actions.add(new ImpotSampleCategoryAction(importContext, persistenceService)); - actions.add(new ImportReferentialGearAction(importContext, referentialTemporaryGearService)); - actions.add(new ImportReferentialPersonAction(importContext, referentialTemporaryPersonService)); - actions.add(new ImportReferentialSpeciesAction(importContext, referentialTemporarySpeciesService)); - actions.add(new ImportReferentialVesselAction(importContext, referentialTemporaryVesselService)); - actions.add(new ImportProtocolAction(importContext, persistenceService, protocolImportExportService)); + actions.add(new ImpotSampleCategoryAction(importContext, persitenceHelper)); + actions.add(new ImportReferentialGearAction(importContext, persitenceHelper)); + actions.add(new ImportReferentialPersonAction(importContext, persitenceHelper)); + actions.add(new ImportReferentialSpeciesAction(importContext, persitenceHelper)); + actions.add(new ImportReferentialVesselAction(importContext, persitenceHelper)); + actions.add(new ImportProtocolAction(importContext, persitenceHelper)); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java index 31b9d94..8edbff0 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java @@ -150,40 +150,39 @@ public class GenericFormatImportValidationHelper implements Closeable { public <R extends RowWithCruiseContextSupport> GenericFormatImportCruiseContext getCruise(CsvComsumer<R, ?> consumer, ImportRow<R> row, GenericFormatContextSupport importContext) { - R bean = row.getBean(); + GenericFormatImportCruiseContext cruiseContext = null; - GenericFormatImportCruiseContext cruiseContext = importContext.getCruiseContext(bean); + if (row.isValid()) { - if (cruiseContext == null) { + R bean = row.getBean(); - consumer.addCheckError(row, new CruiseNotFoundException(bean.getCruise())); + boolean cruiseSkipped = importContext instanceof GenericFormatImportContext + && importContext.isCruiseSkipped(bean); - } else { + if (!cruiseSkipped) { - Cruise cruise = cruiseContext.getCruise(); - bean.setCruise(cruise); - if (bean instanceof RowWithOperationContextSupport) { - ((RowWithOperationContextSupport) bean).getFishingOperation().setCruise(cruise); + cruiseContext = importContext.getCruiseContext(bean); - } + if (cruiseContext == null) { - } + consumer.addCheckError(row, new CruiseNotFoundException(bean.getCruise())); - return cruiseContext; + } else { - } + Cruise cruise = cruiseContext.getCruise(); + bean.setCruise(cruise); + if (bean instanceof RowWithOperationContextSupport) { + ((RowWithOperationContextSupport) bean).getFishingOperation().setCruise(cruise); - public <R extends RowWithCruiseContextSupport> Gear getGear(CsvComsumer<R, ?> consumer, GenericFormatContextSupport importContext, ImportRow<R> row, Gear gear, short rankOrder) { + } - Cruise cruise = row.getBean().getCruise(); - GenericFormatImportCruiseContext cruiseContext = importContext.getCruiseContext(cruise); + } + + } - Gear cruiseGear = cruiseContext.getGear(gear, rankOrder); - if (cruiseGear == null) { - consumer.addCheckError(row, new GearNotFoundInCruiseException(cruise, gear, rankOrder)); } - return cruiseGear; + return cruiseContext; } @@ -197,21 +196,46 @@ public class GenericFormatImportValidationHelper implements Closeable { R bean = row.getBean(); - fishingOperationContext = cruiseContext.getFishingOperationContext(bean); + boolean fishingOperationSkipped = importContext instanceof GenericFormatImportContext + && cruiseContext.isFishingOperationSkipped(bean); + + if (!fishingOperationSkipped) { + + fishingOperationContext = cruiseContext.getFishingOperationContext(bean); - if (fishingOperationContext == null) { + if (fishingOperationContext == null) { - consumer.addCheckError(row, new FishingOperationNotFoundInCruiseException(bean.getFishingOperation())); + consumer.addCheckError(row, new FishingOperationNotFoundInCruiseException(bean.getFishingOperation())); - } else { + } else { - bean.setFishingOperation(fishingOperationContext.getFishingOperation()); + bean.setFishingOperation(fishingOperationContext.getFishingOperation()); + + } } + } return fishingOperationContext; } + public <R extends RowWithCruiseContextSupport> Gear getGear(CsvComsumer<R, ?> consumer, GenericFormatContextSupport importContext, ImportRow<R> row, Gear gear, short rankOrder) { + + Gear cruiseGear = null; + + Cruise cruise = row.getBean().getCruise(); + GenericFormatImportCruiseContext cruiseContext = importContext.getCruiseContext(cruise); + if (cruiseContext != null) { + cruiseGear = cruiseContext.getGear(gear, rankOrder); + if (cruiseGear == null) { + consumer.addCheckError(row, new GearNotFoundInCruiseException(cruise, gear, rankOrder)); + } + } + + return cruiseGear; + + } + } 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 2f123e4..ce8dd46 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 @@ -118,20 +118,6 @@ public class GenericFormatValidateFileContext extends GenericFormatContextSuppor } - @Override - public void addImportedCruise(Cruise cruise, CruiseDataModel existingCruiseData, Set<FishingOperation> existingFishingOperations) { - - if (existingCruiseData == null) { - - // add a temporary id to simulate persist behaviour - cruise.setId(getNextCruiseId()); - - } - - super.addImportedCruise(cruise, existingCruiseData, existingFishingOperations); - - } - public void addImportedFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch) { // add a temporary id to simulate persist behaviour @@ -144,16 +130,10 @@ public class GenericFormatValidateFileContext extends GenericFormatContextSuppor } - private int cruiseId = -1; - private int fishinOperationId = -1; private int catchBatchId = -1; - private int getNextCruiseId() { - return cruiseId--; - } - private int getNextFishingOperationId() { return fishinOperationId--; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java new file mode 100644 index 0000000..3b1aac4 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java @@ -0,0 +1,277 @@ +package fr.ifremer.tutti.service.genericformat; + +/* + * #%L + * Tutti :: Service + * $Id:$ + * $HeadURL:$ + * %% + * Copyright (C) 2012 - 2015 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.Sets; +import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; +import fr.ifremer.tutti.persistence.entities.data.Attachment; +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; +import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; +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.PersistenceService; +import fr.ifremer.tutti.service.TuttiServiceContext; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; +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 org.apache.commons.collections4.CollectionUtils; + +import java.io.File; +import java.util.Collection; +import java.util.List; +import java.util.Set; + +/** + * Created on 2/19/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericformatImportPersistenceHelper { + + private final GenericFormatContextSupport importContext; + + private final PersistenceService persistenceService; + + private final ReferentialTemporaryGearService referentialTemporaryGearService; + + private final ReferentialTemporaryPersonService referentialTemporaryPersonService; + + private final ReferentialTemporarySpeciesService referentialTemporarySpeciesService; + + private final ReferentialTemporaryVesselService referentialTemporaryVesselService; + + private final ProtocolImportExportService protocolImportExportService; + + public GenericformatImportPersistenceHelper(TuttiServiceContext context, GenericFormatContextSupport importContext) { + this.importContext = importContext; + this.persistenceService = context.getService(PersistenceService.class); + this.referentialTemporaryGearService = context.getService(ReferentialTemporaryGearService.class); + this.referentialTemporaryPersonService = context.getService(ReferentialTemporaryPersonService.class); + this.referentialTemporarySpeciesService = context.getService(ReferentialTemporarySpeciesService.class); + this.referentialTemporaryVesselService = context.getService(ReferentialTemporaryVesselService.class); + this.protocolImportExportService = context.getService(ProtocolImportExportService.class); + } + + public Set<FishingOperation> getFishingOperations(String cruiseId) { + + List<FishingOperation> allFishingOperation = persistenceService.getAllFishingOperation(cruiseId); + Set<FishingOperation> existingFishingOperations = Sets.newLinkedHashSet(allFishingOperation); + return existingFishingOperations; + + } + + public void deleteAllAttachments(ObjectTypeCode objectTypeCode, Integer objectId) { + + persistenceService.deleteAllAttachment(objectTypeCode, objectId); + + } + + public void persistAttachments(Integer objectId, Collection<AttachmentRow> attachmentRows) { + + if (importContext.getImportRequest().isImportAttachments() && CollectionUtils.isNotEmpty(attachmentRows)) { + + for (AttachmentRow attachmentRow : attachmentRows) { + + Attachment attachment = attachmentRow.toAttachment(objectId); + File attachmentFile = importContext.getImportRequest().getArchive().extractAttachment(attachment.getPath()); + persistenceService.createAttachment(attachment, attachmentFile); + + } + + } + + } + + public Cruise createCruise(Cruise cruise) { + return persistenceService.createCruise(cruise); + } + + public Cruise saveCruise(Cruise cruise) { + return persistenceService.saveCruise(cruise, false, false); + } + + public void saveGearCaracteristics(Gear gear, Cruise cruise) { + persistenceService.saveGearCaracteristics(gear, cruise); + } + + public FishingOperation createFishingOperation(FishingOperation fishingOperation) { + FishingOperation saveFishingOperation = persistenceService.createFishingOperation(fishingOperation); + return saveFishingOperation; + } + + + public FishingOperation saveFishingOperation(FishingOperation fishingOperation) { + FishingOperation saveFishingOperation = persistenceService.saveFishingOperation(fishingOperation); + return saveFishingOperation; + } + + public String getCatchBatchId(String operationId) { + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operationId); + return catchBatch.getId(); + } + + public CatchBatch createCatchBatch(CatchBatch catchBatch) { + return persistenceService.createCatchBatch(catchBatch); + } + + public CatchBatch saveCatchBatch(CatchBatch catchBatch) { + return persistenceService.saveCatchBatch(catchBatch); + } + + public SpeciesBatch createSpeciesBatch(SpeciesBatch batch, String parentId) { + return persistenceService.createSpeciesBatch(batch, parentId); + } + + public void saveSpeciesBatchFrequency(String batchId, List<SpeciesBatchFrequency> frequencies) { + persistenceService.saveSpeciesBatchFrequency(batchId, frequencies); + } + + public void deleteSpeciesBatchForFishingOperation(String fishingOperationId) { + + BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(fishingOperationId, false); + for (SpeciesBatch batch : rootSpeciesBatch.getChildren()) { + persistenceService.deleteSpeciesBatch(batch.getId()); + } + + } + + public BenthosBatch createBenthosBatch(BenthosBatch batch, String parentId) { + return persistenceService.createBenthosBatch(batch, parentId); + } + + public void saveBenthosBatchFrequency(String batchId, List<BenthosBatchFrequency> frequencies) { + persistenceService.saveBenthosBatchFrequency(batchId, frequencies); + } + + public void deleteBenthosBatchForFishingOperation(String fishingOperationId) { + + BatchContainer<BenthosBatch> rootBenthosBatch = persistenceService.getRootBenthosBatch(fishingOperationId, false); + for (BenthosBatch batch : rootBenthosBatch.getChildren()) { + persistenceService.deleteBenthosBatch(batch.getId()); + } + + } + + public MarineLitterBatch createMarineLitterBatch(MarineLitterBatch marineLitterBatch) { + return persistenceService.createMarineLitterBatch(marineLitterBatch); + } + + public void deleteMarineLitterForFishingOperation(String fishingOperationId) { + + BatchContainer<MarineLitterBatch> rootMarineLitters = persistenceService.getRootMarineLitterBatch(fishingOperationId); + for (MarineLitterBatch batch : rootMarineLitters.getChildren()) { + persistenceService.deleteMarineLitterBatch(batch.getId()); + } + } + + public AccidentalBatch createAccidentalBatch(AccidentalBatch accidentalBatch) { + return persistenceService.createAccidentalBatch(accidentalBatch); + } + + public void deleteAccidentalBatchForFishingOperation(String fishingOperationId) { + persistenceService.deleteAccidentalBatchForFishingOperation(fishingOperationId); + } + + public IndividualObservationBatch createIndividualObservationBatch(IndividualObservationBatch individualObservationBatch) { + return persistenceService.createIndividualObservationBatch(individualObservationBatch); + } + + public void deleteIndividualObservationBatchForFishingOperation(String fishingOperationId) { + persistenceService.deleteIndividualObservationBatchForFishingOperation(fishingOperationId); + } + + public void setSampleCategoryModel(SampleCategoryModel sampleCategoryModel) { + persistenceService.setSampleCategoryModel(sampleCategoryModel); + } + + public ReferentialImportRequest<Gear, Integer> createGearImportRequest() { + return referentialTemporaryGearService.createReferentialImportRequest(); + } + + public ReferentialImportResult<Gear> importGears(ReferentialImportRequest<Gear, Integer> referentialImportRequest) { + return referentialTemporaryGearService.executeImportRequest(referentialImportRequest); + } + + public ReferentialImportRequest<Person, Integer> createPersonImportRequest() { + return referentialTemporaryPersonService.createReferentialImportRequest(); + } + + public ReferentialImportResult<Person> importPersons(ReferentialImportRequest<Person, Integer> referentialImportRequest) { + return referentialTemporaryPersonService.executeImportRequest(referentialImportRequest); + } + + public ReferentialImportRequest<Vessel, String> createVesselsImportRequest() { + return referentialTemporaryVesselService.createReferentialImportRequest(); + } + + public ReferentialImportResult<Vessel> importVessels(ReferentialImportRequest<Vessel, String> referentialImportRequest) { + return referentialTemporaryVesselService.executeImportRequest(referentialImportRequest); + } + + public ReferentialImportRequest<Species, Integer> createSpeciesImportRequest() { + return referentialTemporarySpeciesService.createReferentialImportRequest(); + } + + public ReferentialImportResult<Species> importSpecies(ReferentialImportRequest<Species, Integer> referentialImportRequest) { + return referentialTemporarySpeciesService.executeImportRequest(referentialImportRequest); + } + + public TuttiProtocol importProtocol(File file) { + return protocolImportExportService.importProtocol(file); + } + + public List<Species> getAllReferentSpecies() { + return persistenceService.getAllReferentSpecies(); + } + + public TuttiProtocol createProtocol(TuttiProtocol tuttiProtocol) { + TuttiProtocol createdProtocol = persistenceService.createProtocol(tuttiProtocol); + persistenceService.setProtocol(createdProtocol); + return createdProtocol; + } + + public String getProtocolFirstAvailableName(String protocolOriginalName) { + return persistenceService.getFirstAvailableName(protocolOriginalName); + } +} 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 deleted file mode 100644 index 05ca563..0000000 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java +++ /dev/null @@ -1,566 +0,0 @@ -package fr.ifremer.tutti.service.genericformat; - -/* - * #%L - * Tutti :: Service - * $Id:$ - * $HeadURL:$ - * %% - * Copyright (C) 2012 - 2015 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #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; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; -import fr.ifremer.tutti.persistence.entities.data.Attachment; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; -import fr.ifremer.tutti.persistence.entities.data.CatchBatch; -import fr.ifremer.tutti.persistence.entities.data.Cruise; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; -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; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.decorator.Decorator; - -import java.io.File; -import java.util.Collection; -import java.util.List; -import java.util.Set; - -import static org.nuiton.i18n.I18n.t; - -/** - * Created on 2/19/15. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.14 - */ -public class GenericformatImportPersitenceHelper { - - /** Logger. */ - private static final Log log = LogFactory.getLog(GenericformatImportPersitenceHelper.class); - - private final GenericFormatImportContext importContext; - - private final PersistenceService persistenceService; - - private final Decorator<Cruise> cruiseDecorator; - - private final Decorator<FishingOperation> fishingOperationDecorator; - - public GenericformatImportPersitenceHelper(GenericFormatImportContext importContext, PersistenceService persistenceService, Decorator<Cruise> cruiseDecorator, Decorator<FishingOperation> fishingOperationDecorator) { - this.importContext = importContext; - this.persistenceService = persistenceService; - this.cruiseDecorator = cruiseDecorator; - this.fishingOperationDecorator = fishingOperationDecorator; - } - - public void persistCruise(Cruise cruise, Collection<AttachmentRow> attachmentRows) { - - String cruiseStr = cruiseDecorator.toString(cruise); - - boolean createCruise = TuttiEntities.isNew(cruise); - - Cruise savedCruise; - - CruiseDataModel existingCruiseData; - - Set<FishingOperation> existingFishingOperations; - - if (createCruise) { - - if (log.isInfoEnabled()) { - log.info("Create cruise: " + cruiseStr); - } - importContext.increments(t("tutti.service.genericFormat.persist.cruise", cruiseStr)); - - savedCruise = persistenceService.createCruise(cruise); - - existingCruiseData = null; - - existingFishingOperations = null; - - } else { - - if (log.isInfoEnabled()) { - log.info("Save existing cruise: " + cruiseStr); - } - - importContext.increments(t("tutti.service.genericFormat.persist.cruise", cruiseStr)); - - savedCruise = cruise; - - existingFishingOperations = Sets.newLinkedHashSet(persistenceService.getAllFishingOperation(cruise.getId())); - - existingCruiseData = importContext.getImportRequest().getExistingCruiseData(cruise); - - if (importContext.getImportRequest().isUpdateCruises()) { - - savedCruise = persistenceService.saveCruise(cruise, false, false); - - 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, existingCruiseData, existingFishingOperations); - - } - - public void persistGearCaracteristics() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - importContext.increments(t("tutti.service.genericFormat.persist.gearCaracteristics", cruiseContext.getCruiseLabel())); - - if (cruiseContext.withGearCaracteristics()) { - - Set<Gear> gears = cruiseContext.getGearsWithcaracteristics(); - - Cruise cruise = cruiseContext.getCruise(); - - for (Gear gear : gears) { - - if (log.isInfoEnabled()) { - log.info("Persist " + gear.getCaracteristics().size() + " gear caracteristics for gear: " + gear.getName() + " for cruise: " + cruiseContext.getCruiseLabel()); - } - persistenceService.saveGearCaracteristics(gear, cruise); - - } - - } - - } - }); - - } - - 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); - String cruiseStr = cruiseContext.getCruiseLabel(); - if (log.isInfoEnabled()) { - log.info("Persist fishing Operation: " + operationStr + " for cruise: " + cruiseStr); - } - importContext.increments(t("tutti.service.genericFormat.persist.operation", cruiseStr, operationStr)); - FishingOperation createdFishingOperation = persistenceService.createFishingOperation(fishingOperation); - catchBatch.setFishingOperation(createdFishingOperation); - - CatchBatch createdCatchBatch = persistenceService.createCatchBatch(catchBatch); - - persistAttachments(createdFishingOperation.getIdAsInt(), operationAttachmentRows); - persistAttachments(createdCatchBatch.getIdAsInt(), catchAttachmentRows); - - importContext.addImportedFishingOperation(createdFishingOperation, createdCatchBatch); - - } - - public void persistFishingOperationParameters() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.parameters", cruiseStr, operationStr)); - - boolean persist = false; - - FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); - - if (fishingOperationContext.withGearFeatures()) { - - CaracteristicMap gearUseFeatures = fishingOperationContext.getGearUseFeatures(); - fishingOperation.setGearUseFeatures(gearUseFeatures); - if (log.isInfoEnabled()) { - log.info("Persist " + gearUseFeatures.size() + " gear use features of " + operationStr + " for cruise: " + cruiseStr); - } - - persist = true; - - } - - if (fishingOperationContext.withVesselFeatures()) { - - CaracteristicMap vesselUseFeatures = fishingOperationContext.getVesselUseFeatures(); - fishingOperation.setVesselUseFeatures(vesselUseFeatures); - if (log.isInfoEnabled()) { - log.info("Persist " + vesselUseFeatures.size() + " vessel use features of " + operationStr + " for cruise: " + cruiseStr); - } - - persist = true; - - } - - if (persist) { - - persistenceService.saveFishingOperation(fishingOperation); - - } - - } - } - }); - - } - - public void persistSpeciesBatches() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.speciesBatches", cruiseStr, operationStr)); - - if (fishingOperationContext.withSpeciesBatches(true)) { - - Collection<SpeciesBatch> batches = fishingOperationContext.getSpeciesBatches(true); - if (log.isInfoEnabled()) { - log.info("Persist " + batches.size() + " VRAC root species batch(es) of " + operationStr + " for cruise: " + cruiseStr); - } - persistSpeciesBatches(fishingOperationContext, batches, null); - - } - - if (fishingOperationContext.withSpeciesBatches(false)) { - - Collection<SpeciesBatch> batches = fishingOperationContext.getSpeciesBatches(false); - if (log.isInfoEnabled()) { - log.info("Persist " + batches.size() + " HORS VRAC root species batch(es) of " + operationStr + " for cruise: " + cruiseStr); - } - persistSpeciesBatches(fishingOperationContext, batches, null); - - } - - } - - } - - protected void persistSpeciesBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<SpeciesBatch> batches, String parentId) { - - for (SpeciesBatch batch : batches) { - - Integer batchObjectId = fishingOperationContext.getBatchObjectId(batch.getIdAsInt()); - - List<SpeciesBatchFrequency> frequencies = fishingOperationContext.getSpeciesFrequencies(batch); - - // reset temporary id to persist batch - batch.setId((Integer) null); - SpeciesBatch createdBatch = persistenceService.createSpeciesBatch(batch, parentId); - - if (batchObjectId != null) { - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, batchObjectId); - if (CollectionUtils.isNotEmpty(attachmentRows)) { - persistAttachments(createdBatch.getIdAsInt(), attachmentRows); - } - } - - if (CollectionUtils.isNotEmpty(frequencies)) { - - String batchId = batch.getId(); - if (log.isInfoEnabled()) { - log.info("Persist " + frequencies.size() + " frequency(ies) (species batch: " + batchId + ") of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperationContext.getFishingOperation().getCruise())); - } - persistenceService.saveSpeciesBatchFrequency(batchId, frequencies); - - } - - if (!batch.isChildBatchsEmpty()) { - - persistSpeciesBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); - - } - - } - - } - - }); - - - } - - public void persistBenthosBatches() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.benthosBatches", cruiseStr, operationStr)); - - if (fishingOperationContext.withBenthosBatches(true)) { - - Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(true); - if (log.isInfoEnabled()) { - log.info("Persist " + batches.size() + " VRAC benthos batch(es) of " + operationStr + " for cruise: " + cruiseStr); - } - persistBenthosBatches(fishingOperationContext, batches, null); - - } - - if (fishingOperationContext.withBenthosBatches(false)) { - - Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(false); - if (log.isInfoEnabled()) { - log.info("Persist " + batches.size() + " HORS VRAC benthos batch(es) of " + operationStr + " for cruise: " + cruiseContext.getCruiseLabel()); - } - persistBenthosBatches(fishingOperationContext, batches, null); - - } - - } - } - - protected void persistBenthosBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<BenthosBatch> batches, String parentId) { - - for (BenthosBatch batch : batches) { - - Integer batchObjectId = fishingOperationContext.getBatchObjectId(batch.getIdAsInt()); - - List<BenthosBatchFrequency> frequencies = fishingOperationContext.getBenthosFrequencies(batch); - - // reset temporary id to persist batch - batch.setId((Integer) null); - - BenthosBatch createdBatch = persistenceService.createBenthosBatch(batch, parentId); - - if (batchObjectId != null) { - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, batchObjectId); - if (CollectionUtils.isNotEmpty(attachmentRows)) { - persistAttachments(createdBatch.getIdAsInt(), attachmentRows); - } - } - - if (CollectionUtils.isNotEmpty(frequencies)) { - - String batchId = batch.getId(); - if (log.isInfoEnabled()) { - log.info("Persist " + frequencies.size() + " frequency(ies) (benthos batch: " + batchId + ") of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperationContext.getFishingOperation().getCruise())); - } - persistenceService.saveBenthosBatchFrequency(batchId, frequencies); - - } - - if (!batch.isChildBatchsEmpty()) { - - persistBenthosBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); - - } - } - - } - - }); - - } - - public void persistMarineLitterBatches() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.marineLitters", cruiseStr, operationStr)); - - if (fishingOperationContext.withMarineLitterBatches()) { - -// FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); -// String fishingOperationId = fishingOperation.getId(); - Collection<MarineLitterBatch> marineLitterBatches = fishingOperationContext.getMarineLitterBatches(); - if (log.isInfoEnabled()) { - log.info("Persist " + marineLitterBatches.size() + " marine litter(s) of " + operationStr + " for cruise: " + cruiseStr); - } - //FIXME Does not work (all batches are persisted, but the last one only displayed later in application) -// persistenceService.createMarineLitterBatches(fishingOperationId, marineLitterBatches); - for (MarineLitterBatch marineLitterBatch : marineLitterBatches) { - - Integer objectId = marineLitterBatch.getIdAsInt(); - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, objectId); - - // Id was only here to get attachments - marineLitterBatch.setId((String) null); - - MarineLitterBatch createdMarineLitterBatch = persistenceService.createMarineLitterBatch(marineLitterBatch); - persistAttachments(createdMarineLitterBatch.getIdAsInt(), attachmentRows); - - } - - } - - } - - } - }); - - } - - public void persistIndividualObservationBatches() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.individualObservations", cruiseStr, operationStr)); - - if (fishingOperationContext.withIndividualObservationBatches()) { - -// FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); -// String fishingOperationId = fishingOperation.getId(); - Collection<IndividualObservationBatch> individualObservationBatches = fishingOperationContext.getIndividualObservationBatches(); - if (log.isInfoEnabled()) { - log.info("Persist " + individualObservationBatches.size() + " individual observation(s) of " + operationStr + " for cruise: " + cruiseStr); - } -// persistenceService.createIndividualObservationBatches(fishingOperationId, individualObservationBatches); - - for (IndividualObservationBatch individualObservationBatch : individualObservationBatches) { - - Integer objectId = individualObservationBatch.getIdAsInt(); - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE, objectId); - - // Id was only here to get attachments - individualObservationBatch.setId((String) null); - - IndividualObservationBatch createdIndividualObservationBatch = persistenceService.createIndividualObservationBatch(individualObservationBatch); - persistAttachments(createdIndividualObservationBatch.getIdAsInt(), attachmentRows); - - } - - } - - } - - } - }); - - } - - public void persistAccidentalBatches() { - - importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - - @Override - public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - - for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { - - String cruiseStr = cruiseContext.getCruiseLabel(); - String operationStr = fishingOperationContext.getFishingOperationLabel(); - - importContext.increments(t("tutti.service.genericFormat.persist.operation.accidentalBatches", cruiseStr, operationStr)); - - if (fishingOperationContext.withAccidentalBatches()) { - -// FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); -// String fishingOperationId = fishingOperation.getId(); - Collection<AccidentalBatch> accidentalBatches = fishingOperationContext.getAccidentalBatches(); - if (log.isInfoEnabled()) { - log.info("Persist " + accidentalBatches.size() + " accidental batch(es) of " + operationStr + " for cruise: " + cruiseStr); - } - - for (AccidentalBatch accidentalBatch : accidentalBatches) { - - Integer objectId = accidentalBatch.getIdAsInt(); - Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE, objectId); - - // Id was only here to get attachments - accidentalBatch.setId((String) null); - - AccidentalBatch createdAccidentalBatch = persistenceService.createAccidentalBatch(accidentalBatch); - persistAttachments(createdAccidentalBatch.getIdAsInt(), attachmentRows); - - } - - } - - } - - } - }); - - } - -} 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 3913e48..86446a0 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 @@ -59,37 +59,31 @@ public class CsvConsumerForAccidentalCatch extends CsvComsumer<AccidentalCatchRo public GenericFormatImportOperationContext validateRow(ImportRow<AccidentalCatchRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportOperationContext operationContext = null; + GenericFormatImportOperationContext operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (row.isValid()) { + if (operationContext != null) { - operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + //TODO checks! + AccidentalCatchRow bean = row.getBean(); - if (operationContext != null) { - - //TODO checks! - AccidentalCatchRow bean = row.getBean(); - - //TODO Use a validator ? - Caracteristic caracteristic = bean.getCaracteristic(); - if (caracteristic == null) { - //TODO Should done by parser ? - } - - //TODO Use a validator ? - if (bean.getCaracteristicValue() == null) { + //TODO Use a validator ? + Caracteristic caracteristic = bean.getCaracteristic(); + if (caracteristic == null) { + //TODO Should done by parser ? + } - } + //TODO Use a validator ? + if (bean.getCaracteristicValue() == null) { - // parse caracteristic value - String value = (String) bean.getCaracteristicValue(); - try { - Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); - bean.setCaracteristicValue(serializable); - } catch (CaracteristicValueParseException e) { - addCheckError(row, e); - } + } + // parse caracteristic value + String value = (String) bean.getCaracteristicValue(); + try { + Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); + bean.setCaracteristicValue(serializable); + } catch (CaracteristicValueParseException e) { + addCheckError(row, e); } } 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 6390ed4..257b877 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 @@ -82,27 +82,21 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { public GenericFormatImportOperationContext validateRow(ImportRow<CatchRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportOperationContext operationContext = null; + GenericFormatImportOperationContext operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (row.isValid()) { + if (operationContext != null) { - operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + //TODO checks! + CatchRow bean = row.getBean(); - if (operationContext != null) { + for (ExportSampleCategory sampleCategory : bean.getSampleCategory()) { - //TODO checks! - CatchRow bean = row.getBean(); + if (sampleCategory.isFilled()) { - for (ExportSampleCategory sampleCategory : bean.getSampleCategory()) { - - if (sampleCategory.isFilled()) { - - if (sampleCategory.getCategoryValue() == null) { - //TODO - } + if (sampleCategory.getCategoryValue() == null) { + //TODO } } - } } @@ -239,7 +233,7 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { } - protected <A extends SpeciesAbleBatch> A fillBatchCategories(GenericFormatImportOperationContext operationContext,A batch, CatchRow bean) { + protected <A extends SpeciesAbleBatch> A fillBatchCategories(GenericFormatImportOperationContext operationContext, A batch, CatchRow bean) { for (ExportSampleCategory exportSampleCategory : bean.getFilledSampleCategories()) { batch = fillBatchCategories(operationContext, batch, exportSampleCategory); @@ -249,7 +243,7 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { } - protected <A extends SpeciesAbleBatch> A fillBatchCategories(GenericFormatImportOperationContext operationContext,A batch, ExportSampleCategory sampleCategory) { + protected <A extends SpeciesAbleBatch> A fillBatchCategories(GenericFormatImportOperationContext operationContext, A batch, ExportSampleCategory sampleCategory) { A result = null; 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 7dcbd28..eee12c3 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 @@ -53,46 +53,41 @@ public class CsvConsumerForGearCaracteristic extends CsvComsumer<GearCaracterist public GenericFormatImportCruiseContext validateRow(ImportRow<GearCaracteristicRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportCruiseContext cruiseContext = null; - if (row.isValid()) { + GenericFormatImportValidationHelper validationHelper = importContext.getValidationHelper(); - GenericFormatImportValidationHelper validationHelper = importContext.getValidationHelper(); + GenericFormatImportCruiseContext cruiseContext = validationHelper.getCruise(this, row, importContext); - cruiseContext = validationHelper.getCruise(this, row, importContext); + if (cruiseContext != null) { - if (cruiseContext != null) { + GearCaracteristicRow bean = row.getBean(); - GearCaracteristicRow bean = row.getBean(); + Gear gear = bean.getGear(); + short rankOrder = bean.getRankOrder(); - Gear gear = bean.getGear(); - short rankOrder = bean.getRankOrder(); - - Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); - if (cruiseGear != null) { - bean.setGear(cruiseGear); - } - - //TODO Use a validator ? - Caracteristic caracteristic = bean.getCaracteristic(); - if (caracteristic == null) { - //TODO Should done by parser ? - } + Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); + if (cruiseGear != null) { + bean.setGear(cruiseGear); + } - //TODO Use a validator ? - if (bean.getValue() == null) { + //TODO Use a validator ? + Caracteristic caracteristic = bean.getCaracteristic(); + if (caracteristic == null) { + //TODO Should done by parser ? + } - } + //TODO Use a validator ? + if (bean.getValue() == null) { - // parse caracteristic value - String value = (String) bean.getValue(); - try { - Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); - bean.setValue(serializable); - } catch (CaracteristicValueParseException e) { - addCheckError(row, e); - } + } + // parse caracteristic value + String value = (String) bean.getValue(); + try { + Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); + bean.setValue(serializable); + } catch (CaracteristicValueParseException e) { + addCheckError(row, e); } } 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 33e101b..f0ca721 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 @@ -59,37 +59,31 @@ public class CsvConsumerForIndividualObservation extends CsvComsumer<IndividualO public GenericFormatImportOperationContext validateRow(ImportRow<IndividualObservationRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportOperationContext operationContext = null; + GenericFormatImportOperationContext operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (row.isValid()) { + if (operationContext != null) { - operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + //TODO checks! + IndividualObservationRow bean = row.getBean(); - if (operationContext != null) { - - //TODO checks! - IndividualObservationRow bean = row.getBean(); - - //TODO Use a validator ? - Caracteristic caracteristic = bean.getCaracteristic(); - if (caracteristic == null) { - //TODO Should done by parser ? - } - - //TODO Use a validator ? - if (bean.getCaracteristicValue() == null) { + //TODO Use a validator ? + Caracteristic caracteristic = bean.getCaracteristic(); + if (caracteristic == null) { + //TODO Should done by parser ? + } - } + //TODO Use a validator ? + if (bean.getCaracteristicValue() == null) { - // parse caracteristic value - String value = (String) bean.getCaracteristicValue(); - try { - Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); - bean.setCaracteristicValue(serializable); - } catch (CaracteristicValueParseException e) { - addCheckError(row, e); - } + } + // parse caracteristic value + String value = (String) bean.getCaracteristicValue(); + try { + Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); + bean.setCaracteristicValue(serializable); + } catch (CaracteristicValueParseException e) { + addCheckError(row, e); } } 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 a233c52..c898935 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 @@ -49,18 +49,12 @@ public class CsvConsumerForMarineLitter extends CsvComsumer<MarineLitterRow, Mar public GenericFormatImportOperationContext validateRow(ImportRow<MarineLitterRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportOperationContext operationContext = null; + GenericFormatImportOperationContext operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (row.isValid()) { + if (operationContext != null) { - operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - - if (operationContext != null) { - - //TODO checks! - MarineLitterRow bean = row.getBean(); - - } + //TODO checks! + MarineLitterRow bean = row.getBean(); } 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 c79602e..ce8074e 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 @@ -56,50 +56,45 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation public GenericFormatImportCruiseContext validateRow(ImportRow<OperationRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportCruiseContext cruiseContext = null; + GenericFormatImportValidationHelper validationHelper = importContext.getValidationHelper(); - if (row.isValid()) { + GenericFormatImportCruiseContext cruiseContext = validationHelper.getCruise(this, row, importContext); - GenericFormatImportValidationHelper validationHelper = importContext.getValidationHelper(); + if (cruiseContext != null) { - cruiseContext = validationHelper.getCruise(this, row, importContext); + OperationRow bean = row.getBean(); - if (cruiseContext != null) { + FishingOperation fishingOperation = bean.getFishingOperation(); - OperationRow bean = row.getBean(); + if (cruiseContext.isFishingOperationAlreadyImported(bean)) { - FishingOperation fishingOperation = bean.getFishingOperation(); + addCheckError(row, new FishingOperationAlreadyImportedException(fishingOperation)); - if (cruiseContext.isFishingOperationAlreadyImported(bean)) { + } else { - addCheckError(row, new FishingOperationAlreadyImportedException(fishingOperation)); + Gear gear = bean.getGear(); + Short rankOrder = bean.getGearRankOrder(); - } else { + if (gear != null && rankOrder != null) { - Gear gear = bean.getGear(); - Short rankOrder = bean.getGearRankOrder(); - - if (gear != null && rankOrder != null) { - - Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); - if (cruiseGear != null) { - bean.setGear(cruiseGear); - } + Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); + if (cruiseGear != null) { + bean.setGear(cruiseGear); } - NuitonValidatorResult validatorResult = validationHelper.validateFishingOperation(fishingOperation); - - if (validatorResult.hasFatalMessages()) { - - Set<String> errorMessages = validationHelper.getMessages(validatorResult, NuitonValidatorScope.FATAL); - addCheckError(row, new FishingOperationNotValidException(fishingOperation, errorMessages)); + } + NuitonValidatorResult validatorResult = validationHelper.validateFishingOperation(fishingOperation); - } + if (validatorResult.hasFatalMessages()) { - //TODO other checks ? + Set<String> errorMessages = validationHelper.getMessages(validatorResult, NuitonValidatorScope.FATAL); + addCheckError(row, new FishingOperationNotValidException(fishingOperation, errorMessages)); } + //TODO other checks ? + } + } reportError(row); @@ -143,14 +138,14 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation } - protected void prepareBenthos(boolean importBenthos , OperationRow bean, CatchBatch catchBatch) { - if (!importBenthos ||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 (!importBenthos ||BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalInertWeightComputed(), false)) { + if (!importBenthos || BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalInertWeightComputed(), false)) { catchBatch.setBenthosTotalInertWeight(null); } - if (!importBenthos ||BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalLivingNotItemizedWeightComputed(), false)) { + if (!importBenthos || BooleanUtils.toBooleanDefaultIfNull(bean.getBenthosTotalLivingNotItemizedWeightComputed(), false)) { catchBatch.setBenthosTotalLivingNotItemizedWeight(null); } } 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 129e6ea..a3fbbfb 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 @@ -51,48 +51,41 @@ public class CsvConsumerForParameter extends CsvComsumer<ParameterRow, Parameter public GenericFormatImportOperationContext validateRow(ImportRow<ParameterRow> row, GenericFormatContextSupport importContext) { - GenericFormatImportOperationContext operationContext = null; + GenericFormatImportOperationContext operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (row.isValid()) { + if (operationContext != null) { + ParameterRow bean = row.getBean(); - operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + bean.setFishingOperation(operationContext.getFishingOperation()); - if (operationContext != null) { - - ParameterRow bean = row.getBean(); - - bean.setFishingOperation(operationContext.getFishingOperation()); - - //TODO Use a validator ? - if (bean.getParameterType() == null) { - //TODO Should done by parser ? - } - - //TODO Use a validator ? - Caracteristic caracteristic = bean.getCaracteristic(); - if (caracteristic == null) { - //TODO Should done by parser ? - } - - //TODO Use a validator ? - if (bean.getValue() == null) { + //TODO Use a validator ? + if (bean.getParameterType() == null) { + //TODO Should done by parser ? + } - } + //TODO Use a validator ? + Caracteristic caracteristic = bean.getCaracteristic(); + if (caracteristic == null) { + //TODO Should done by parser ? + } - // parse caracteristic value - String value = (String) bean.getValue(); - try { - Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); - bean.setValue(serializable); - } catch (CaracteristicValueParseException e) { - addCheckError(row, e); - } + //TODO Use a validator ? + if (bean.getValue() == null) { - //TODO other checks ? + } + // parse caracteristic value + String value = (String) bean.getValue(); + try { + Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value); + bean.setValue(serializable); + } catch (CaracteristicValueParseException e) { + addCheckError(row, e); } + //TODO other checks ? + } reportError(row); 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 f1905b4..10c1f38 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 @@ -24,12 +24,18 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAccidentalCatch; import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchRow; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ImportRow; @@ -37,6 +43,7 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Collection; import static org.nuiton.i18n.I18n.t; @@ -51,11 +58,11 @@ public class ImportAccidentalCatchAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportAccidentalCatchAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportAccidentalCatchAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportAccidentalCatchAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -83,7 +90,9 @@ public class ImportAccidentalCatchAction extends ImportActionSupport { for (ImportRow<AccidentalCatchRow> row : consumer) { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); + if (operationContext != null) { + consumer.prepareRowForPersist(operationContext, row); + } } } catch (IOException e) { @@ -94,7 +103,71 @@ public class ImportAccidentalCatchAction extends ImportActionSupport { } - persitenceHelper.persistAccidentalBatches(); + persistAccidentalBatches(); + + } + + private void persistAccidentalBatches() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + boolean override = fishingOperationContext.isOverride(); + + if (override) { + + deleteAccidentalBatches(fishingOperationContext); + + } + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.accidentalBatches", cruiseStr, operationStr)); + + if (fishingOperationContext.withAccidentalBatches()) { + + Collection<AccidentalBatch> accidentalBatches = fishingOperationContext.getAccidentalBatches(); + if (log.isInfoEnabled()) { + log.info("Persist " + accidentalBatches.size() + " accidental batch(es) of " + operationStr + " for cruise: " + cruiseStr); + } + persistAccidentalBatches(accidentalBatches); + + } + + } + + } + + private void deleteAccidentalBatches(GenericFormatImportOperationContext fishingOperationContext) { + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + persistenceHelper.deleteAccidentalBatchForFishingOperation(fishingOperation.getId()); + + } + + private void persistAccidentalBatches(Collection<AccidentalBatch> batches) { + + for (AccidentalBatch accidentalBatch : batches) { + + Integer objectId = accidentalBatch.getIdAsInt(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE, objectId); + + // Id was only here to get attachments + accidentalBatch.setId((String) null); + + AccidentalBatch createdAccidentalBatch = persistenceHelper.createAccidentalBatch(accidentalBatch); + persistenceHelper.persistAttachments(createdAccidentalBatch.getIdAsInt(), attachmentRows); + + } + + } + + }); } 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 a43995a..79c2c83 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 @@ -24,12 +24,22 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForCatch; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.CatchRow; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ImportRow; @@ -37,6 +47,8 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Collection; +import java.util.List; import static org.nuiton.i18n.I18n.t; @@ -51,11 +63,11 @@ public class ImportCatchAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportCatchAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportCatchAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportCatchAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -84,7 +96,9 @@ public class ImportCatchAction extends ImportActionSupport { for (ImportRow<CatchRow> row : consumer) { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); + if (operationContext != null) { + consumer.prepareRowForPersist(operationContext, row); + } } } catch (IOException e) { @@ -95,8 +109,192 @@ public class ImportCatchAction extends ImportActionSupport { } - persitenceHelper.persistSpeciesBatches(); - persitenceHelper.persistBenthosBatches(); + persistSpeciesBatches(); + persistBenthosBatches(); + + } + + public void persistSpeciesBatches() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + boolean override = fishingOperationContext.isOverride(); + + if (override) { + + deleteSpeciesBatches(fishingOperationContext); + + } + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.speciesBatches", cruiseStr, operationStr)); + + if (fishingOperationContext.withSpeciesBatches(true)) { + + Collection<SpeciesBatch> batches = fishingOperationContext.getSpeciesBatches(true); + if (log.isInfoEnabled()) { + log.info("Persist " + batches.size() + " VRAC root species batch(es) of " + operationStr + " for cruise: " + cruiseStr); + } + persistSpeciesBatches(fishingOperationContext, batches, null); + + } + + if (fishingOperationContext.withSpeciesBatches(false)) { + + Collection<SpeciesBatch> batches = fishingOperationContext.getSpeciesBatches(false); + if (log.isInfoEnabled()) { + log.info("Persist " + batches.size() + " HORS VRAC root species batch(es) of " + operationStr + " for cruise: " + cruiseStr); + } + persistSpeciesBatches(fishingOperationContext, batches, null); + + } + + } + + } + + private void persistSpeciesBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<SpeciesBatch> batches, String parentId) { + + for (SpeciesBatch batch : batches) { + + Integer batchObjectId = fishingOperationContext.getBatchObjectId(batch.getIdAsInt()); + + List<SpeciesBatchFrequency> frequencies = fishingOperationContext.getSpeciesFrequencies(batch); + + // reset temporary id to persist batch + batch.setId((Integer) null); + SpeciesBatch createdBatch = persistenceHelper.createSpeciesBatch(batch, parentId); + + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, batchObjectId); + persistenceHelper.persistAttachments(createdBatch.getIdAsInt(), attachmentRows); + + if (CollectionUtils.isNotEmpty(frequencies)) { + + String batchId = batch.getId(); + if (log.isInfoEnabled()) { + log.info("Persist " + frequencies.size() + " frequency(ies) (species batch: " + batchId + ") of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + importContext.decorate(fishingOperationContext.getFishingOperation().getCruise())); + } + persistenceHelper.saveSpeciesBatchFrequency(batchId, frequencies); + + } + + if (!batch.isChildBatchsEmpty()) { + + persistSpeciesBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); + + } + + } + + } + + private void deleteSpeciesBatches(GenericFormatImportOperationContext fishingOperationContext) { + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + persistenceHelper.deleteSpeciesBatchForFishingOperation(fishingOperation.getId()); + + } + + }); + + + } + + public void persistBenthosBatches() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + boolean override = fishingOperationContext.isOverride(); + + if (override) { + + deleteBenthosBatches(fishingOperationContext); + + } + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.benthosBatches", cruiseStr, operationStr)); + + if (fishingOperationContext.withBenthosBatches(true)) { + + Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(true); + if (log.isInfoEnabled()) { + log.info("Persist " + batches.size() + " VRAC benthos batch(es) of " + operationStr + " for cruise: " + cruiseStr); + } + persistBenthosBatches(fishingOperationContext, batches, null); + + } + + if (fishingOperationContext.withBenthosBatches(false)) { + + Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(false); + if (log.isInfoEnabled()) { + log.info("Persist " + batches.size() + " HORS VRAC benthos batch(es) of " + operationStr + " for cruise: " + cruiseContext.getCruiseLabel()); + } + persistBenthosBatches(fishingOperationContext, batches, null); + + } + + } + } + + private void persistBenthosBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<BenthosBatch> batches, String parentId) { + + for (BenthosBatch batch : batches) { + + Integer batchObjectId = fishingOperationContext.getBatchObjectId(batch.getIdAsInt()); + + List<BenthosBatchFrequency> frequencies = fishingOperationContext.getBenthosFrequencies(batch); + + // reset temporary id to persist batch + batch.setId((Integer) null); + + BenthosBatch createdBatch = persistenceHelper.createBenthosBatch(batch, parentId); + + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, batchObjectId); + persistenceHelper.persistAttachments(createdBatch.getIdAsInt(), attachmentRows); + + if (CollectionUtils.isNotEmpty(frequencies)) { + + String batchId = batch.getId(); + if (log.isInfoEnabled()) { + log.info("Persist " + frequencies.size() + " frequency(ies) (benthos batch: " + batchId + ") of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + importContext.decorate(fishingOperationContext.getFishingOperation().getCruise())); + } + persistenceHelper.saveBenthosBatchFrequency(batchId, frequencies); + + } + + if (!batch.isChildBatchsEmpty()) { + + persistBenthosBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); + + } + } + + } + + private void deleteBenthosBatches(GenericFormatImportOperationContext fishingOperationContext) { + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + persistenceHelper.deleteBenthosBatchForFishingOperation(fishingOperation.getId()); + + } + + }); } 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 effad1b..e18f143 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 @@ -24,10 +24,13 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForGearCaracteristic; import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicRow; import org.apache.commons.logging.Log; @@ -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,11 +55,11 @@ public class ImportGearCaracteristicAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportGearCaracteristicAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportGearCaracteristicAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportGearCaracteristicAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -83,9 +87,7 @@ public class ImportGearCaracteristicAction extends ImportActionSupport { if (cruiseContext != null) { - if (row.isValid()) { - consumer.prepareRowForPersist(cruiseContext, row); - } + consumer.prepareRowForPersist(cruiseContext, row); } @@ -98,7 +100,38 @@ public class ImportGearCaracteristicAction extends ImportActionSupport { } - persitenceHelper.persistGearCaracteristics(); + persistGearCaracteristics(); + + } + + public void persistGearCaracteristics() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + importContext.increments(t("tutti.service.genericFormat.persist.gearCaracteristics", cruiseContext.getCruiseLabel())); + + if (cruiseContext.withGearCaracteristics()) { + + Set<Gear> gears = cruiseContext.getGearsWithcaracteristics(); + + Cruise cruise = cruiseContext.getCruise(); + + for (Gear gear : gears) { + + if (log.isInfoEnabled()) { + log.info("Persist " + gear.getCaracteristics().size() + " gear caracteristics for gear: " + gear.getName() + " for cruise: " + cruiseContext.getCruiseLabel()); + } + persistenceHelper.saveGearCaracteristics(gear, cruise); + + } + + } + + } + }); } 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 d2bb9b6..946731a 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 @@ -24,11 +24,17 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForIndividualObservation; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -37,6 +43,7 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Collection; import static org.nuiton.i18n.I18n.t; @@ -51,11 +58,11 @@ public class ImportIndividualObservationAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportIndividualObservationAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportIndividualObservationAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportIndividualObservationAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -83,7 +90,9 @@ public class ImportIndividualObservationAction extends ImportActionSupport { for (ImportRow<IndividualObservationRow> row : consumer) { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); + if (operationContext != null) { + consumer.prepareRowForPersist(operationContext, row); + } } } catch (IOException e) { @@ -94,7 +103,71 @@ public class ImportIndividualObservationAction extends ImportActionSupport { } - persitenceHelper.persistIndividualObservationBatches(); + persistIndividualObservationBatches(); + + } + + private void persistIndividualObservationBatches() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + boolean override = fishingOperationContext.isOverride(); + + if (override) { + + deleteIndividualObservationBatches(fishingOperationContext); + + } + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.individualObservations", cruiseStr, operationStr)); + + if (fishingOperationContext.withIndividualObservationBatches()) { + + Collection<IndividualObservationBatch> individualObservationBatches = fishingOperationContext.getIndividualObservationBatches(); + if (log.isInfoEnabled()) { + log.info("Persist " + individualObservationBatches.size() + " individual observation(s) of " + operationStr + " for cruise: " + cruiseStr); + } + persistIndividualObservationBatches(individualObservationBatches); + + } + + } + + } + + private void deleteIndividualObservationBatches(GenericFormatImportOperationContext fishingOperationContext) { + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + persistenceHelper.deleteIndividualObservationBatchForFishingOperation(fishingOperation.getId()); + + } + + private void persistIndividualObservationBatches(Collection<IndividualObservationBatch> batches) { + + for (IndividualObservationBatch individualObservationBatch : batches) { + + Integer objectId = individualObservationBatch.getIdAsInt(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE, objectId); + + // Id was only here to get attachments + individualObservationBatch.setId((String) null); + + IndividualObservationBatch createdIndividualObservationBatch = persistenceHelper.createIndividualObservationBatch(individualObservationBatch); + persistenceHelper.persistAttachments(createdIndividualObservationBatch.getIdAsInt(), attachmentRows); + + } + + } + + }); } 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 0f4e94f..d052502 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 @@ -24,11 +24,17 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForMarineLitter; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.MarineLitterRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -37,6 +43,7 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Collection; import static org.nuiton.i18n.I18n.t; @@ -51,11 +58,11 @@ public class ImportMarineLitterAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportMarineLitterAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportMarineLitterAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportMarineLitterAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -83,7 +90,9 @@ public class ImportMarineLitterAction extends ImportActionSupport { for (ImportRow<MarineLitterRow> row : consumer) { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); + if (operationContext != null) { + consumer.prepareRowForPersist(operationContext, row); + } } } catch (IOException e) { @@ -94,7 +103,71 @@ public class ImportMarineLitterAction extends ImportActionSupport { } - persitenceHelper.persistMarineLitterBatches(); + persistMarineLitterBatches(); + + } + + public void persistMarineLitterBatches() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + boolean override = fishingOperationContext.isOverride(); + + if (override) { + + deleteMarineLitterBatches(fishingOperationContext); + + } + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.marineLitters", cruiseStr, operationStr)); + + if (fishingOperationContext.withMarineLitterBatches()) { + + Collection<MarineLitterBatch> marineLitterBatches = fishingOperationContext.getMarineLitterBatches(); + if (log.isInfoEnabled()) { + log.info("Persist " + marineLitterBatches.size() + " marine litter(s) of " + operationStr + " for cruise: " + cruiseStr); + } + persistMarineLitterBatches(marineLitterBatches); + + } + + } + + } + + private void persistMarineLitterBatches(Collection<MarineLitterBatch> batches) { + + for (MarineLitterBatch marineLitterBatch : batches) { + + Integer objectId = marineLitterBatch.getIdAsInt(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, objectId); + + // Id was only here to get attachments + marineLitterBatch.setId((String) null); + + MarineLitterBatch createdMarineLitterBatch = persistenceHelper.createMarineLitterBatch(marineLitterBatch); + persistenceHelper.persistAttachments(createdMarineLitterBatch.getIdAsInt(), attachmentRows); + + } + + } + + private void deleteMarineLitterBatches(GenericFormatImportOperationContext fishingOperationContext) { + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + persistenceHelper.deleteMarineLitterForFishingOperation(fishingOperation.getId()); + + } + + }); } 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 dde6d82..a90370d 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 @@ -24,16 +24,19 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import com.google.common.base.Preconditions; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.persistence.model.OperationDataModel; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForOperation; import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.OperationRow; +import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ImportRow; @@ -56,16 +59,16 @@ public class ImportOperationAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportOperationAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportOperationAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportOperationAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override protected boolean canExecute() { - return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid() ; + return importContext.isTechnicalFilesValid() && importContext.getSurveyFileResult().isValid(); } @Override @@ -83,34 +86,162 @@ public class ImportOperationAction extends ImportActionSupport { boolean importSpecies = importContext.getImportRequest().isImportSpecies(); boolean importBenthos = importContext.getImportRequest().isImportBenthos(); - boolean importMarineLitter= importContext.getImportRequest().isImportMarineLitter(); + 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(row, importSpecies, importBenthos, importMarineLitter); - OperationRow bean = row.getBean(); + if (cruiseContext != null) { - Collection<AttachmentRow> operationAttachmentRows = importContext.popAttachmentRows(ObjectTypeCode.OPERATION, bean.getFishingOperationObjectId()); - Collection<AttachmentRow> catchAttachmentRows = importContext.popAttachmentRows(ObjectTypeCode.CATCH_BATCH, bean.getCatchObjectId()); + OperationRow bean = row.getBean(); + FishingOperation fishingOperation = bean.getFishingOperation(); + CatchBatch catchBatch = bean.getCatchBatch(); - FishingOperation fishingOperation = bean.getFishingOperation(); - CatchBatch catchBatch = bean.getCatchBatch(); + Collection<AttachmentRow> operationAttachmentRows = importContext.popAttachmentRows(ObjectTypeCode.OPERATION, bean.getFishingOperationObjectId()); + Collection<AttachmentRow> catchAttachmentRows = importContext.popAttachmentRows(ObjectTypeCode.CATCH_BATCH, bean.getCatchObjectId()); - persitenceHelper.persistFishingOperation(cruiseContext, fishingOperation, catchBatch, operationAttachmentRows, catchAttachmentRows); + OperationDataModel selectionFishingOperation = cruiseContext.getSelectedFishingOperation(fishingOperation); + + if (selectionFishingOperation == null) { + + // skip this operation (not selected) + skipOperation(cruiseContext, fishingOperation); + + } else { + + // process this operation + + consumer.prepareRowForPersist(row, importSpecies, importBenthos, importMarineLitter); + + processOperation(cruiseContext, fishingOperation, catchBatch, operationAttachmentRows, catchAttachmentRows); + + } + + } } } catch (IOException e) { throw new ApplicationTechnicalException("Could not close operation.csv file", e); } catch (ImportRuntimeException e) { - importFileResult.addGlobalError(e.getMessage()); + importContext.getOperationFileResult().addGlobalError(e.getMessage()); + + } + + } + + private void skipOperation(GenericFormatImportCruiseContext cruiseContext, FishingOperation fishingOperation) { + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = importContext.decorate(fishingOperation); + importContext.increments(t("tutti.service.genericFormat.persist.skipNotSelected.operation", cruiseStr, operationStr)); + cruiseContext.addSkippedFishingOperation(fishingOperation); + + } + + private void processOperation(GenericFormatImportCruiseContext cruiseContext, FishingOperation fishingOperation, CatchBatch catchBatch, Collection<AttachmentRow> operationAttachmentRows, Collection<AttachmentRow> catchAttachmentRows) { + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = importContext.decorate(fishingOperation); + OperationDataModel existingOperationData = cruiseContext.getExistingFishingOperationData(fishingOperation); + + Pair<FishingOperation, CatchBatch> savedFishingOperation; + + if (existingOperationData == null) { + + // New operation + importContext.increments(t("tutti.service.genericFormat.persist.create.operation", cruiseStr, operationStr)); + savedFishingOperation = addFishingOperation(fishingOperation, catchBatch, operationAttachmentRows, catchAttachmentRows); + + } else { + + // Existing operation + fishingOperation.setId(existingOperationData.getId()); + if (importContext.getImportRequest().isUpdateOperations()) { + + // Update operation + importContext.increments(t("tutti.service.genericFormat.persist.update.operation", cruiseStr, operationStr)); + savedFishingOperation = updateFishingOperation(fishingOperation, catchBatch, operationAttachmentRows, catchAttachmentRows); + + } else { + + // Skip update operation + importContext.increments(t("tutti.service.genericFormat.persist.skip.operation", cruiseStr, operationStr)); + savedFishingOperation = Pair.of(fishingOperation, catchBatch); + + } + } + + importContext.addImportedFishingOperation(savedFishingOperation.getLeft(), savedFishingOperation.getRight()); + + } + + private Pair<FishingOperation, CatchBatch> addFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch, Collection<AttachmentRow> operationAttachmentRows, Collection<AttachmentRow> catchAttachmentRows) { + + String cruiseStr = importContext.decorate(fishingOperation); + + boolean createCruise = TuttiEntities.isNew(fishingOperation); + Preconditions.checkState(createCruise, "In addFishingOperation method, can't update existing operation: " + cruiseStr); + + if (log.isInfoEnabled()) { + log.info("Create operation: " + cruiseStr); + } + + FishingOperation createdFishingOperation = persistenceHelper.createFishingOperation(fishingOperation); + + catchBatch.setFishingOperation(createdFishingOperation); + CatchBatch createdCatchBatch = persistenceHelper.createCatchBatch(catchBatch); + + boolean importAttachments = importContext.getImportRequest().isImportAttachments(); + + if (importAttachments) { + + persistenceHelper.persistAttachments(createdFishingOperation.getIdAsInt(), operationAttachmentRows); + persistenceHelper.persistAttachments(createdCatchBatch.getIdAsInt(), catchAttachmentRows); } + return Pair.of(createdFishingOperation, createdCatchBatch); + + } + + private Pair<FishingOperation, CatchBatch> updateFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch, Collection<AttachmentRow> operationAttachmentRows, Collection<AttachmentRow> catchAttachmentRows) { + + String operationStr = importContext.decorate(fishingOperation); + + boolean createFishingOperation = TuttiEntities.isNew(fishingOperation); + Preconditions.checkState(!createFishingOperation, "In updateFishingOperation method, can't create new operation: " + operationStr); + Preconditions.checkState(importContext.getImportRequest().isUpdateOperations(), "In updateFishingOperation method, must be allowed to update operation: " + operationStr); + + if (log.isInfoEnabled()) { + log.info("Persist fishing Operation: " + operationStr); + } + + FishingOperation updatedFishingOperation = persistenceHelper.saveFishingOperation(fishingOperation); + + String existingCatchBatchId = persistenceHelper.getCatchBatchId(updatedFishingOperation.getId()); + catchBatch.setId(existingCatchBatchId); + catchBatch.setFishingOperation(updatedFishingOperation); + + CatchBatch updatedCatchBatch = persistenceHelper.saveCatchBatch(catchBatch); + + boolean importAttachments = importContext.getImportRequest().isImportAttachments(); + + if (importAttachments) { + + // delete previous attachments + persistenceHelper.deleteAllAttachments(ObjectTypeCode.OPERATION, fishingOperation.getIdAsInt()); + persistenceHelper.deleteAllAttachments(ObjectTypeCode.CATCH_BATCH, catchBatch.getIdAsInt()); + + persistenceHelper.persistAttachments(updatedFishingOperation.getIdAsInt(), operationAttachmentRows); + persistenceHelper.persistAttachments(updatedCatchBatch.getIdAsInt(), catchAttachmentRows); + + } + + return Pair.of(updatedFishingOperation, updatedCatchBatch); + } } 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 ed1d397..a7c7975 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 @@ -24,10 +24,14 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForParameter; import fr.ifremer.tutti.service.genericformat.csv.ParameterRow; import org.apache.commons.logging.Log; @@ -51,11 +55,11 @@ public class ImportParameterAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportParameterAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportParameterAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportParameterAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -82,7 +86,9 @@ public class ImportParameterAction extends ImportActionSupport { for (ImportRow<ParameterRow> row : consumer) { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(operationContext, row); + if (operationContext != null) { + consumer.prepareRowForPersist(operationContext, row); + } } } catch (IOException e) { @@ -93,7 +99,67 @@ public class ImportParameterAction extends ImportActionSupport { } - persitenceHelper.persistFishingOperationParameters(); + persistFishingOperationParameters(); + + } + + public void persistFishingOperationParameters() { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + boolean updateOperations = importContext.getImportRequest().isUpdateOperations(); + + for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext.getFishingOperationContexts()) { + + String cruiseStr = cruiseContext.getCruiseLabel(); + String operationStr = fishingOperationContext.getFishingOperationLabel(); + + importContext.increments(t("tutti.service.genericFormat.persist.operation.parameters", cruiseStr, operationStr)); + + if (updateOperations) { + + boolean persist = false; + + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + + if (fishingOperationContext.withGearFeatures()) { + + CaracteristicMap gearUseFeatures = fishingOperationContext.getGearUseFeatures(); + fishingOperation.setGearUseFeatures(gearUseFeatures); + if (log.isInfoEnabled()) { + log.info("Persist " + gearUseFeatures.size() + " gear use features of " + operationStr + " for cruise: " + cruiseStr); + } + + persist = true; + + } + + if (fishingOperationContext.withVesselFeatures()) { + + CaracteristicMap vesselUseFeatures = fishingOperationContext.getVesselUseFeatures(); + fishingOperation.setVesselUseFeatures(vesselUseFeatures); + if (log.isInfoEnabled()) { + log.info("Persist " + vesselUseFeatures.size() + " vessel use features of " + operationStr + " for cruise: " + cruiseStr); + } + + persist = true; + + } + + if (persist) { + + persistenceHelper.saveFishingOperation(fishingOperation); + + } + + } + + } + } + }); } 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 f1801bc..2ff1643 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 @@ -27,11 +27,10 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.genericformat.GenericFormatArchive; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatFileResult; -import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.application.ApplicationTechnicalException; @@ -52,14 +51,11 @@ public class ImportProtocolAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportProtocolAction.class); - private final PersistenceService persistenceService; + private final GenericformatImportPersistenceHelper persistenceHelper; - private final ProtocolImportExportService protocolImportExportService; - - public ImportProtocolAction(GenericFormatContextSupport importContext, PersistenceService persistenceService, ProtocolImportExportService protocolImportExportService) { + public ImportProtocolAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persistenceService = persistenceService; - this.protocolImportExportService = protocolImportExportService; + this.persistenceHelper = persistenceHelper; } @Override @@ -92,17 +88,17 @@ public class ImportProtocolAction extends ImportActionSupport { try { - TuttiProtocol tuttiProtocol = protocolImportExportService.importProtocol(archive.getProtocolPath().toFile()); + TuttiProtocol tuttiProtocol = persistenceHelper.importProtocol(archive.getProtocolPath().toFile()); Map<String, String> idTranslationMap = importContext.getReferentialTemporarySpeciesFileResult().getIdTranslationMap(); TuttiProtocols.translateReferenceTaxonIds(tuttiProtocol, idTranslationMap); String protocolOriginalName = tuttiProtocol.getName(); - String newName = persistenceService.getFirstAvailableName(protocolOriginalName); + String newName = persistenceHelper.getProtocolFirstAvailableName(protocolOriginalName); tuttiProtocol.setName(newName); - List<Species> referentSpecies = persistenceService.getAllReferentSpecies(); + List<Species> referentSpecies = persistenceHelper.getAllReferentSpecies(); // Check missing species Map<Integer, String> missingSpecies = TuttiProtocols.detectMissingSpecies(tuttiProtocol, referentSpecies); @@ -127,8 +123,7 @@ public class ImportProtocolAction extends ImportActionSupport { importContext.increments(t("tutti.service.genericFormat.import.protocol", protocolOriginalName)); - tuttiProtocol = persistenceService.createProtocol(tuttiProtocol); - persistenceService.setProtocol(tuttiProtocol); + tuttiProtocol = persistenceHelper.createProtocol(tuttiProtocol); importContext.setImportedProtocol(tuttiProtocol); importContext.setProtocolOriginalName(protocolOriginalName); 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 468bb9b..ec108ee 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 @@ -27,9 +27,9 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; -import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryGear; import fr.ifremer.tutti.service.referential.csv.GearRow; import org.apache.commons.logging.Log; @@ -53,11 +53,11 @@ public class ImportReferentialGearAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportReferentialGearAction.class); - private final ReferentialTemporaryGearService referentialTemporaryGearService; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportReferentialGearAction(GenericFormatContextSupport importContext, ReferentialTemporaryGearService referentialTemporaryGearService) { + public ImportReferentialGearAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.referentialTemporaryGearService = referentialTemporaryGearService; + this.persistenceHelper = persistenceHelper; } @Override @@ -84,7 +84,7 @@ public class ImportReferentialGearAction extends ImportActionSupport { importContext.increments(t("tutti.service.genericFormat.import.temporaryGears")); - ReferentialImportRequest<Gear, Integer> referentialImportRequest = referentialTemporaryGearService.createReferentialImportRequest(); + ReferentialImportRequest<Gear, Integer> referentialImportRequest = persistenceHelper.createGearImportRequest(); GenericFormatReferentialImportResult<Gear, Integer> importFileResult = importContext.getReferentialTemporaryGearFileResult(); try (CsvConsumerForTemporaryGear consumer = importContext.loadTemporaryGears(false)) { @@ -104,7 +104,7 @@ public class ImportReferentialGearAction extends ImportActionSupport { if (importFileResult.isValid()) { - ReferentialImportResult<Gear> referentialImportResult = referentialTemporaryGearService.executeImportRequest(referentialImportRequest); + ReferentialImportResult<Gear> referentialImportResult = persistenceHelper.importGears(referentialImportRequest); importFileResult.flushResult(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { log.info("Temporary gears import result: " + importFileResult.getReport()); 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 7b84048..cdde930 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 @@ -27,6 +27,7 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; @@ -53,11 +54,11 @@ public class ImportReferentialPersonAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportReferentialPersonAction.class); - private final ReferentialTemporaryPersonService referentialTemporaryPersonService; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportReferentialPersonAction(GenericFormatContextSupport importContext, ReferentialTemporaryPersonService referentialTemporaryPersonService) { + public ImportReferentialPersonAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.referentialTemporaryPersonService = referentialTemporaryPersonService; + this.persistenceHelper = persistenceHelper; } @Override @@ -86,7 +87,7 @@ public class ImportReferentialPersonAction extends ImportActionSupport { GenericFormatReferentialImportResult<Person, Integer> importFileResult = importContext.getReferentialTemporaryPersonFileResult(); - ReferentialImportRequest<Person, Integer> referentialImportRequest = referentialTemporaryPersonService.createReferentialImportRequest(); + ReferentialImportRequest<Person, Integer> referentialImportRequest = persistenceHelper.createPersonImportRequest(); try (CsvConsumerForTemporaryPerson consumer = importContext.loadTemporaryPersons(false)) { for (ImportRow<PersonRow> row : consumer) { consumer.checkRowForGenericFormatImport(row, referentialImportRequest); @@ -104,7 +105,7 @@ public class ImportReferentialPersonAction extends ImportActionSupport { if (importFileResult.isValid()) { - ReferentialImportResult<Person> referentialImportResult = referentialTemporaryPersonService.executeImportRequest(referentialImportRequest); + ReferentialImportResult<Person> referentialImportResult = persistenceHelper.importPersons(referentialImportRequest); importFileResult.flushResult(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { log.info("Temporary persons import result: " + importFileResult.getReport()); 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 742ce33..0de96d8 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 @@ -27,9 +27,9 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; -import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies; import fr.ifremer.tutti.service.referential.csv.SpeciesRow; import org.apache.commons.logging.Log; @@ -53,11 +53,11 @@ public class ImportReferentialSpeciesAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportReferentialSpeciesAction.class); - private final ReferentialTemporarySpeciesService referentialTemporarySpeciesService; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportReferentialSpeciesAction(GenericFormatContextSupport importContext, ReferentialTemporarySpeciesService referentialTemporarySpeciesService) { + public ImportReferentialSpeciesAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.referentialTemporarySpeciesService = referentialTemporarySpeciesService; + this.persistenceHelper = persistenceHelper; } @Override @@ -84,7 +84,7 @@ public class ImportReferentialSpeciesAction extends ImportActionSupport { log.info("Import temporary species."); } - ReferentialImportRequest<Species, Integer> referentialImportRequest = referentialTemporarySpeciesService.createReferentialImportRequest(); + ReferentialImportRequest<Species, Integer> referentialImportRequest = persistenceHelper.createSpeciesImportRequest(); GenericFormatReferentialImportResult<Species, Integer> importFileResult = importContext.getReferentialTemporarySpeciesFileResult(); try (CsvConsumerForTemporarySpecies consumer = importContext.loadTemporarySpecies(false)) { @@ -104,7 +104,7 @@ public class ImportReferentialSpeciesAction extends ImportActionSupport { if (importFileResult.isValid()) { - ReferentialImportResult<Species> referentialImportResult = referentialTemporarySpeciesService.executeImportRequest(referentialImportRequest); + ReferentialImportResult<Species> referentialImportResult = persistenceHelper.importSpecies(referentialImportRequest); importFileResult.flushResult(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { 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 e6a1615..a275391 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 @@ -27,6 +27,7 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService; @@ -53,11 +54,11 @@ public class ImportReferentialVesselAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportReferentialVesselAction.class); - private final ReferentialTemporaryVesselService referentialTemporaryVesselService; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportReferentialVesselAction(GenericFormatContextSupport importContext, ReferentialTemporaryVesselService referentialTemporaryVesselService) { + public ImportReferentialVesselAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.referentialTemporaryVesselService = referentialTemporaryVesselService; + this.persistenceHelper = persistenceHelper; } @Override @@ -80,7 +81,7 @@ public class ImportReferentialVesselAction extends ImportActionSupport { importContext.increments(t("tutti.service.genericFormat.import.temporaryVessels")); - ReferentialImportRequest<Vessel, String> referentialImportRequest = referentialTemporaryVesselService.createReferentialImportRequest(); + ReferentialImportRequest<Vessel, String> referentialImportRequest = persistenceHelper.createVesselsImportRequest(); GenericFormatReferentialImportResult<Vessel, String> importFileResult = importContext.getReferentialTemporaryVesselFileResult(); try (CsvConsumerForTemporaryVessel consumer = importContext.loadTemporaryVessels(false)) { @@ -100,7 +101,7 @@ public class ImportReferentialVesselAction extends ImportActionSupport { if (importFileResult.isValid()) { - ReferentialImportResult<Vessel> referentialImportResult = referentialTemporaryVesselService.executeImportRequest(referentialImportRequest); + ReferentialImportResult<Vessel> referentialImportResult = persistenceHelper.importVessels(referentialImportRequest); importFileResult.flushResult(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { 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 1abd298..ef6f88b 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 @@ -24,13 +24,19 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import com.google.common.base.Preconditions; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +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.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; -import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; +import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.SurveyRow; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ImportRow; @@ -39,6 +45,7 @@ import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; import java.util.Collection; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -53,11 +60,11 @@ public class ImportSurveyAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportSurveyAction.class); - private final GenericformatImportPersitenceHelper persitenceHelper; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImportSurveyAction(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { + public ImportSurveyAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persitenceHelper = persitenceHelper; + this.persistenceHelper = persistenceHelper; } @Override @@ -83,11 +90,27 @@ public class ImportSurveyAction extends ImportActionSupport { for (ImportRow<SurveyRow> row : consumer) { consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(row); SurveyRow bean = row.getBean(); + Cruise cruise = bean.getCruise(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SCIENTIFIC_CRUISE, bean.getObjectId()); - persitenceHelper.persistCruise(bean.getCruise(), attachmentRows); + + CruiseDataModel selectionCruiseData = importContext.getImportRequest().getSelectedCruise(cruise); + + if (selectionCruiseData == null) { + + // skip this cruise (not selected) + skipCruise(cruise); + + } else { + + // process this cruise + processCruise(cruise, attachmentRows, selectionCruiseData); + + } } } catch (IOException e) { @@ -100,4 +123,113 @@ public class ImportSurveyAction extends ImportActionSupport { } + protected void skipCruise(Cruise cruise) { + + String cruiseStr = importContext.decorate(cruise); + importContext.increments(t("tutti.service.genericFormat.persist.skipNotSelected.cruise", cruiseStr)); + importContext.addSkippedCruise(cruise); + + } + + protected void processCruise(Cruise cruise, Collection<AttachmentRow> attachmentRows, CruiseDataModel selectionCruiseData) { + + String cruiseStr = importContext.decorate(cruise); + + CruiseDataModel existingCruiseData = importContext.getImportRequest().getExistingCruiseData(cruise); + + Set<FishingOperation> existingFishingOperations; + + Cruise savedCruise; + + if (existingCruiseData == null) { + + // New cruise + importContext.increments(t("tutti.service.genericFormat.persist.create.cruise", cruiseStr)); + savedCruise = addCruise(cruise, attachmentRows); + + existingFishingOperations = null; + + } else { + + // Existing cruise + + if (importContext.getImportRequest().isUpdateCruises()) { + + // Update cruise + importContext.increments(t("tutti.service.genericFormat.persist.update.cruise", cruiseStr)); + savedCruise = updateCruise(cruise, attachmentRows); + + } else { + + // skip update cruise + importContext.increments(t("tutti.service.genericFormat.persist.skip.cruise", cruiseStr)); + savedCruise = cruise; + + } + + existingFishingOperations = persistenceHelper.getFishingOperations(existingCruiseData.getId()); + + } + + importContext.addImportedCruise(savedCruise, selectionCruiseData, existingCruiseData, existingFishingOperations); + + } + + public Cruise addCruise(Cruise cruise, Collection<AttachmentRow> attachmentRows) { + + String cruiseStr = importContext.decorate(cruise); + + boolean createCruise = TuttiEntities.isNew(cruise); + Preconditions.checkState(createCruise, "In addCruise method, can't update existing cruise: " + cruiseStr); + + if (log.isInfoEnabled()) { + log.info("Create cruise: " + cruiseStr); + } + + + Cruise savedCruise = persistenceHelper.createCruise(cruise); + + boolean importAttachments = importContext.getImportRequest().isImportAttachments(); + + if (importAttachments) { + + if (CollectionUtils.isNotEmpty(attachmentRows)) { + persistenceHelper. persistAttachments(savedCruise.getIdAsInt(), attachmentRows); + } + + } + + return savedCruise; + + } + + public Cruise updateCruise(Cruise cruise, Collection<AttachmentRow> attachmentRows) { + + String cruiseStr = importContext.decorate(cruise); + + boolean createCruise = TuttiEntities.isNew(cruise); + Preconditions.checkState(!createCruise, "In updateCruise method, can't create new cruise: " + cruiseStr); + Preconditions.checkState(importContext.getImportRequest().isUpdateCruises(), "In updateCruise method, must be allowed to update cruise: " + cruiseStr); + + if (log.isInfoEnabled()) { + log.info("Update existing cruise: " + cruiseStr); + } + + Cruise savedCruise = persistenceHelper.saveCruise(cruise); + + boolean importAttachments = importContext.getImportRequest().isImportAttachments(); + + if (importAttachments) { + + // delete previous attachments + persistenceHelper.deleteAllAttachments(ObjectTypeCode.SCIENTIFIC_CRUISE, cruise.getIdAsInt()); + + persistenceHelper.persistAttachments(savedCruise.getIdAsInt(), attachmentRows); + + } + + return savedCruise; + + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImpotSampleCategoryAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImpotSampleCategoryAction.java index 8b805a5..0b3a14d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImpotSampleCategoryAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImpotSampleCategoryAction.java @@ -26,9 +26,9 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; -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.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSampleCategory; import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryRow; import org.apache.commons.logging.Log; @@ -56,11 +56,11 @@ public class ImpotSampleCategoryAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImpotSampleCategoryAction.class); - private final PersistenceService persistenceService; + private final GenericformatImportPersistenceHelper persistenceHelper; - public ImpotSampleCategoryAction(GenericFormatContextSupport importContext, PersistenceService persistenceService) { + public ImpotSampleCategoryAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persistenceService = persistenceService; + this.persistenceHelper = persistenceHelper; } @Override @@ -116,7 +116,7 @@ public class ImpotSampleCategoryAction extends ImportActionSupport { if (log.isInfoEnabled()) { log.info("Will use sample category model: " + sampleCategoryModel); } - persistenceService.setSampleCategoryModel(sampleCategoryModel); + persistenceHelper.setSampleCategoryModel(sampleCategoryModel); importContext.setImportedSampleCategoryModel(sampleCategoryModel); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java index 56b7627..4417916 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java @@ -74,7 +74,7 @@ public class ValidateAccidentalCatchAction extends ImportActionSupport { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (operationContext != null) { consumer.prepareRowForPersist(operationContext, row); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java index 94037ee..2fda8f4 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java @@ -74,7 +74,7 @@ public class ValidateCatchAction extends ImportActionSupport { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (operationContext != null) { consumer.prepareRowForPersist(operationContext, row); } 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 0b60aad..dabd0cc 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 @@ -76,9 +76,7 @@ public class ValidateGearCaracteristicAction extends ImportActionSupport { if (cruiseContext != null) { - if (row.isValid()) { - consumer.prepareRowForPersist(cruiseContext, row); - } + consumer.prepareRowForPersist(cruiseContext, row); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java index a17bd42..6d35e1c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java @@ -75,7 +75,7 @@ public class ValidateIndividualObservationAction extends ImportActionSupport { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (operationContext != null) { consumer.prepareRowForPersist(operationContext, row); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java index 43f929a..0dd8656 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java @@ -74,7 +74,7 @@ public class ValidateMarineLitterAction extends ImportActionSupport { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (operationContext != null) { consumer.prepareRowForPersist(operationContext, 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 1962899..ab1718f 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 @@ -80,7 +80,7 @@ public class ValidateOperationAction extends ImportActionSupport { GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); - if (cruiseContext != null && row.isValid()) { + if (cruiseContext != null) { consumer.prepareRowForPersist(row, importSpecies, importBenthos, importMarineLitter); OperationRow bean = row.getBean(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java index db7bc11..8bcb592 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java @@ -74,7 +74,7 @@ public class ValidateParameterAction extends ImportActionSupport { GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - if (row.isValid()) { + if (operationContext != null) { consumer.prepareRowForPersist(operationContext, row); } 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 a0355c7..bf78825 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,13 +24,12 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ -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.GenericformatImportPersistenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; import fr.ifremer.tutti.service.genericformat.csv.SurveyRow; import org.apache.commons.logging.Log; @@ -55,11 +54,13 @@ public class ValidateSurveyAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateSurveyAction.class); - private final PersistenceService persistenceService; + private static int cruiseId = -1; - public ValidateSurveyAction(GenericFormatContextSupport importContext, PersistenceService persistenceService) { + private final GenericformatImportPersistenceHelper persistenceHelper; + + public ValidateSurveyAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) { super(importContext); - this.persistenceService = persistenceService; + this.persistenceHelper = persistenceHelper; } @Override @@ -93,13 +94,16 @@ public class ValidateSurveyAction extends ImportActionSupport { existingFishingOperations = null; + // add a temporary id to simulate persist behaviour + cruise.setId(getNextCruiseId()); + } else { - existingFishingOperations = Sets.newHashSet(persistenceService.getAllFishingOperation(existingCruiseData.getId())); + existingFishingOperations = persistenceHelper.getFishingOperations(existingCruiseData.getId()); } - importContext.addImportedCruise(cruise, existingCruiseData, existingFishingOperations); + importContext.addImportedCruise(cruise, null, existingCruiseData, existingFishingOperations); } @@ -115,4 +119,7 @@ public class ValidateSurveyAction extends ImportActionSupport { } + private static int getNextCruiseId() { + return cruiseId--; + } } 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 9689ff3..382ef25 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 @@ -213,6 +213,8 @@ tutti.service.genericFormat.invalid.cruise= tutti.service.genericFormat.invalid.fishingOperation= tutti.service.genericFormat.load.attachments= tutti.service.genericFormat.load.protocol= +tutti.service.genericFormat.persist.create.cruise= +tutti.service.genericFormat.persist.create.operation= tutti.service.genericFormat.persist.cruise= tutti.service.genericFormat.persist.gearCaracteristics= tutti.service.genericFormat.persist.operation= @@ -222,6 +224,12 @@ tutti.service.genericFormat.persist.operation.individualObservations= tutti.service.genericFormat.persist.operation.marineLitters= tutti.service.genericFormat.persist.operation.parameters= tutti.service.genericFormat.persist.operation.speciesBatches= +tutti.service.genericFormat.persist.skip.cruise= +tutti.service.genericFormat.persist.skip.operation= +tutti.service.genericFormat.persist.skipNotSelected.cruise= +tutti.service.genericFormat.persist.skipNotSelected.operation= +tutti.service.genericFormat.persist.update.cruise= +tutti.service.genericFormat.persist.update.operation= tutti.service.genericFormat.remove.existingCruise.fishingOperation= tutti.service.genericFormat.reuse.protocol= tutti.service.genericFormat.skip.import.accidentalCatches= 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 1dcd543..e9b9ee0 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 @@ -177,15 +177,22 @@ tutti.service.genericFormat.invalid.cruise=Erreur d'élévation de poids sur les 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=Chargement des pièces jointes tutti.service.genericFormat.load.protocol=Import du protocol +tutti.service.genericFormat.persist.create.cruise=Création de la campagne <strong>%s</strong> +tutti.service.genericFormat.persist.create.operation=Création du trait <strong>%s</strong> - <strong>%s</strong> 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> -tutti.service.genericFormat.persist.operation=Sauvegarde du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.accidentalBatches=Sauvegarde des captures accidentelles du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.benthosBatches=Sauvegarde des lots benthos du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.individualObservations=Sauvegarde des observations individuelles du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.marineLitters=Sauvegarde des macro-déchets du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.parameters=Sauvegarde des caractéristiques du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.speciesBatches=Sauvegarde des lots espèces du trait <strong>%s</strong> - <strong>%s</strong> +tutti.service.genericFormat.persist.skip.cruise=Ne pas mettre à jour la campagne <strong>%s</strong> +tutti.service.genericFormat.persist.skip.operation=Ne pas mettre à jour le trait <strong>%s</strong> - <strong>%s</strong> +tutti.service.genericFormat.persist.skipNotSelected.cruise=Ne pas mettre à jour la campagne non sélectionnée <strong>%s</strong> +tutti.service.genericFormat.persist.skipNotSelected.operation=Ne pas mettre à jour le trait non sélectionné <strong>%s</strong> - <strong>%s</strong> +tutti.service.genericFormat.persist.update.cruise=Mise à jour de la campagne <strong>%s</strong> +tutti.service.genericFormat.persist.update.operation=Mise à jour 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= -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.