This is an automated email from the git hooks/post-receive script. New commit to branch feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit 86c2f9e8c402ec888a6b3588e97866d88c2f9c9b Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Feb 22 13:37:17 2015 +0100 - normalize i18n keys - finalize import - improve import result API - imporve import context API - add clean weights + ccheck weights on imported operations --- .../tutti/persistence/entities/TuttiEntities.java | 5 +- .../genericformat/GenericFormatArchive.java | 8 +- .../genericformat/GenericFormatExportContext.java | 7 +- .../genericformat/GenericFormatExportService.java | 237 ++++--------- .../genericformat/GenericFormatImportContext.java | 218 ++++++------ .../GenericFormatImportCruiseContext.java | 154 +++++++++ .../GenericFormatImportCruiseResult.java | 64 ++++ .../GenericFormatImportEntityParserFactory.java | 24 +- .../GenericFormatImportOperationContext.java | 79 ++++- .../GenericFormatImportOperationResult.java | 145 ++++++++ .../genericformat/GenericFormatImportRequest.java | 17 + .../genericformat/GenericFormatImportResult.java | 105 +++--- .../genericformat/GenericFormatImportService.java | 305 +++++++++-------- .../GenericFormatImportValidationDataContext.java | 7 +- .../GenericFormatImportValidationHelper.java | 41 ++- .../genericformat/GenericFormatServiceSupport.java | 139 ++++++++ .../GenericformatImportPersitenceHelper.java | 378 ++++++++++++--------- .../consumer/CruiseAlreadyExistException.java | 2 +- .../consumer/CruiseAlreadyImportedException.java | 2 +- .../consumer/CruiseNotFoundException.java | 2 +- .../consumer/CruiseNotValidException.java | 2 +- .../consumer/CsvConsumerForAccidentalCatch.java | 18 +- .../consumer/CsvConsumerForCatch.java | 40 ++- .../consumer/CsvConsumerForGearCaracteristic.java | 29 +- .../CsvConsumerForIndividualObservation.java | 19 +- .../consumer/CsvConsumerForMarineLitter.java | 16 +- .../consumer/CsvConsumerForOperation.java | 25 +- .../consumer/CsvConsumerForParameter.java | 19 +- .../consumer/CsvConsumerForSampleCategory.java | 10 +- .../FishingOperationAlreadyImportedException.java | 2 +- .../FishingOperationNotFoundInCruiseException.java | 2 +- .../FishingOperationNotValidException.java | 2 +- .../consumer/GearNotFoundInCruiseException.java | 2 +- .../resources/i18n/tutti-service_en_GB.properties | 160 ++++----- .../resources/i18n/tutti-service_fr_FR.properties | 137 ++++---- 35 files changed, 1505 insertions(+), 917 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java index 1e95bdb..d9a9337 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java @@ -28,6 +28,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -45,10 +46,10 @@ public class TuttiEntities { // helper class does not instanciate } - public static <B extends TuttiEntity> List<String> toIds(List<B> list) { + public static <B extends TuttiEntity> List<String> toIds(Collection<B> list) { List<String> result = list == null ? Collections.<String>emptyList() : - Lists.transform(list, GET_ID); + Lists.transform(list instanceof List? (List<B>)list: new ArrayList<>(list), GET_ID); return result; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java index d9524b2..9498c46 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java @@ -207,11 +207,11 @@ public class GenericFormatArchive { if (progressionModel != null) { - progressionModel.increments(t("tutti.service.genericExport.buildZip", archiveFile)); + progressionModel.increments(t("tutti.service.genericFormat.export.buildZip", archiveFile)); } - ApplicationIOUtil.zip(workingDirectory.toFile(), archiveFile, t("tutti.service.genericExport.zip.error", archiveFile)); + ApplicationIOUtil.zip(workingDirectory.toFile(), archiveFile, t("tutti.service.genericFormat.export.zip.error", archiveFile)); } @@ -338,7 +338,7 @@ public class GenericFormatArchive { if (log.isErrorEnabled()) { log.error("Mandatory entry " + zipEntryPath + " not found."); } - errors.add(t("tutti.genericformat.importError.missArchiveFile", archiveFilePath.getFilename())); + errors.add(t("tutti.service.genericFormat.importError.missArchiveFile", archiveFilePath.getFilename())); } else { @@ -357,7 +357,7 @@ public class GenericFormatArchive { if (!errors.isEmpty()) { - String message = t("tutti.genericFormat.importError.archiveNotSane", Joiner.on("\n").join(errors)); + String message = t("tutti.service.genericFormat.importError.archiveNotSane", Joiner.on("\n").join(errors)); throw new ApplicationBusinessException(message); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportContext.java index b8d8889..d947d00 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportContext.java @@ -1,5 +1,6 @@ package fr.ifremer.tutti.service.genericformat; +import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.data.Cruise; @@ -115,6 +116,7 @@ public class GenericFormatExportContext implements Closeable { Decorator<FishingOperation> fishingOperationDecorator, SampleCategoryModel sampleCategoryModel) { + Preconditions.checkNotNull(progressionModel); this.progressionModel = progressionModel; this.archive = archive; @@ -286,9 +288,8 @@ public class GenericFormatExportContext implements Closeable { } public void increments(String message) { - if (progressionModel != null) { - progressionModel.increments(message); - } + progressionModel.increments(message); + if (log.isInfoEnabled()) { log.info(message); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportService.java index 83b5bb7..5750514 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportService.java @@ -33,7 +33,6 @@ import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; 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.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; @@ -44,11 +43,6 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.Vessel; -import fr.ifremer.tutti.service.AbstractTuttiService; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.TuttiServiceContext; -import fr.ifremer.tutti.service.catches.WeightComputingService; import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchRow; import fr.ifremer.tutti.service.genericformat.csv.CatchRow; import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicRow; @@ -64,11 +58,6 @@ import fr.ifremer.tutti.service.genericformat.producer.CsvProducerForGearCaracte import fr.ifremer.tutti.service.genericformat.producer.CsvProducerForSampleCategory; import fr.ifremer.tutti.service.genericformat.producer.CsvProducerForSpecies; import fr.ifremer.tutti.service.genericformat.producer.CsvProducerForSurvey; -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 fr.ifremer.tutti.service.referential.csv.GearRow; import fr.ifremer.tutti.service.referential.csv.PersonRow; import fr.ifremer.tutti.service.referential.csv.SpeciesRow; @@ -80,15 +69,16 @@ import fr.ifremer.tutti.service.referential.producer.CsvProducerForTemporaryVess import fr.ifremer.tutti.util.Numbers; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.ApplicationBusinessException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.LinkedHashSet; +import java.util.Collection; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -101,46 +91,10 @@ import static org.nuiton.i18n.I18n.t; * @author tchemit <chemit@codelutin.com> * @since 1.3 */ -public class GenericFormatExportService extends AbstractTuttiService { +public class GenericFormatExportService extends GenericFormatServiceSupport { private static final Log log = LogFactory.getLog(GenericFormatExportService.class); - protected PersistenceService persistenceService; - - protected WeightComputingService weightComputingService; - - protected ReferentialTemporaryGearService referentialTemporaryGearService; - - protected ReferentialTemporaryPersonService referentialTemporaryPersonService; - - protected ReferentialTemporarySpeciesService referentialTemporarySpeciesService; - - protected ReferentialTemporaryVesselService referentialTemporaryVesselService; - - protected ProtocolImportExportService protocolImportExportService; - - protected Decorator<FishingOperation> fishingOperationDecorator; - - protected Decorator<Cruise> cruiseDecorator; - - @Override - public void setServiceContext(TuttiServiceContext context) { - - super.setServiceContext(context); - persistenceService = getService(PersistenceService.class); - weightComputingService = getService(WeightComputingService.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); - fishingOperationDecorator = decoratorService.getDecoratorByType(FishingOperation.class); - - } - public int getExportProgramNbSteps(String programId) { // nbCruise * (check cruise / export cruise / gear caracteristics / operation / parameter / catches / individual observation / accidental catches / marine litters) + @@ -233,7 +187,7 @@ public class GenericFormatExportService extends AbstractTuttiService { try { List<String> fishingOperationIds = persistenceService.getAllFishingOperationIds(cruise.getId()); - String error = getCruiseErrors(progressionModel, cruise, fishingOperationIds); + String error = getCruiseErrors(cruise, fishingOperationIds, progressionModel); if (error != null) { throw new ApplicationBusinessException(error); } @@ -277,6 +231,9 @@ public class GenericFormatExportService extends AbstractTuttiService { Preconditions.checkNotNull(cruiseId); + ProgressionModel progressionModel = new ProgressionModel(); + progressionModel.setTotal(1000); + Cruise cruise = persistenceService.getCruise(cruiseId); Preconditions.checkNotNull(cruise); @@ -288,7 +245,7 @@ public class GenericFormatExportService extends AbstractTuttiService { ApplicationBusinessException checkError = null; try { - String error = getCruiseErrors(null, cruise, Lists.newArrayList(fishingOperationId)); + String error = getCruiseErrors(cruise, Lists.newArrayList(fishingOperationId), progressionModel); if (error != null) { throw new ApplicationBusinessException(error); } @@ -303,7 +260,7 @@ public class GenericFormatExportService extends AbstractTuttiService { GenericFormatArchive genericFormatArchive = GenericFormatArchive.forExport(null, context.getConfig().getTmpDirectory()); - try (GenericFormatExportContext exportContext = createExportContext(null, genericFormatArchive)) { + try (GenericFormatExportContext exportContext = createExportContext(progressionModel, genericFormatArchive)) { FishingOperation fishingOperation = persistenceService.getFishingOperation(fishingOperationId); @@ -344,7 +301,7 @@ public class GenericFormatExportService extends AbstractTuttiService { cruise = persistenceService.getCruise(cruise.getId()); List<String> allFishingOperation = persistenceService.getAllFishingOperationIds(cruise.getId()); - String error = getCruiseErrors(progressionModel, cruise, allFishingOperation); + String error = getCruiseErrors(cruise, allFishingOperation, progressionModel); if (error != null) { @@ -364,15 +321,7 @@ public class GenericFormatExportService extends AbstractTuttiService { throw new ApplicationBusinessException(errorMessage); } - } - protected void increments(ProgressionModel progressionModel, String message) { - if (progressionModel != null) { - progressionModel.increments(message); - } - if (log.isInfoEnabled()) { - log.info(message); - } } protected void terminatesExport(GenericFormatExportContext exportContext) { @@ -400,7 +349,7 @@ public class GenericFormatExportService extends AbstractTuttiService { protected void exportTemporaryGears(GenericFormatExportContext exportContext, List<Gear> temporaryGears) { - exportContext.increments(t("tutti.service.genericExport.exportTemporaryGear", temporaryGears.size())); + exportContext.increments(t("tutti.service.genericFormat.export.exportTemporaryGear", temporaryGears.size())); try { @@ -417,7 +366,7 @@ public class GenericFormatExportService extends AbstractTuttiService { protected void exportTemporaryPersons(GenericFormatExportContext exportContext, List<Person> temporaryPersons) { - exportContext.increments(t("tutti.service.genericExport.exportTemporaryPerson", temporaryPersons.size())); + exportContext.increments(t("tutti.service.genericFormat.export.exportTemporaryPerson", temporaryPersons.size())); try { @@ -434,7 +383,7 @@ public class GenericFormatExportService extends AbstractTuttiService { protected void exportTemporarySpeciess(GenericFormatExportContext exportContext, List<Species> temporarySpeciess) { - exportContext.increments(t("tutti.service.genericExport.exportTemporarySpecies", temporarySpeciess.size())); + exportContext.increments(t("tutti.service.genericFormat.export.exportTemporarySpecies", temporarySpeciess.size())); try { @@ -451,7 +400,7 @@ public class GenericFormatExportService extends AbstractTuttiService { protected void exportTemporaryVessels(GenericFormatExportContext exportContext, List<Vessel> temporaryVessels) { - exportContext.increments(t("tutti.service.genericExport.exportTemporaryVessel", temporaryVessels.size())); + exportContext.increments(t("tutti.service.genericFormat.export.exportTemporaryVessel", temporaryVessels.size())); try { @@ -468,7 +417,7 @@ public class GenericFormatExportService extends AbstractTuttiService { protected void exportSampleCategoryModel(GenericFormatExportContext exportContext, SampleCategoryModel sampleCategoryModel) { - exportContext.increments(t("tutti.service.genericExport.exportSampleCategoyModel", sampleCategoryModel.getNbSampling())); + exportContext.increments(t("tutti.service.genericFormat.export.exportSampleCategoyModel", sampleCategoryModel.getNbSampling())); try { @@ -489,11 +438,11 @@ public class GenericFormatExportService extends AbstractTuttiService { if (protocolFilled) { TuttiProtocol protocol = persistenceService.getProtocol(); - exportContext.increments(t("tutti.service.genericExport.exportProtocol", protocol.getName())); + exportContext.increments(t("tutti.service.genericFormat.export.exportProtocol", protocol.getName())); protocolImportExportService.exportProtocol(protocol, exportContext.getProtocolFile()); } else { - exportContext.increments(t("tutti.service.genericExport.skipProtocolExport")); + exportContext.increments(t("tutti.service.genericFormat.export.skipProtocolExport")); } } @@ -523,7 +472,7 @@ public class GenericFormatExportService extends AbstractTuttiService { private void exportSurvey(GenericFormatExportContext exportContext, Cruise cruise) { - exportContext.increments(t("tutti.service.exportCruise.exportSurvey", cruise.getName())); + exportContext.increments(t("tutti.service.genericFormat.exportCruise.exportSurvey", cruise.getName())); List<TuttiLocation> allCountry = persistenceService.getAllCountry(); String countryId = context.getConfig().getExportCountryId(); @@ -537,13 +486,13 @@ public class GenericFormatExportService extends AbstractTuttiService { producerForSurvey.write(surveyRow); } catch (Exception e) { - throw new ApplicationTechnicalException(t("tutti.service.export.survey.error"), e); + throw new ApplicationTechnicalException(t("tutti.service.genericFormat.export.survey.error"), e); } } protected void exportGearCaracteristics(GenericFormatExportContext exportContext, Cruise cruise) { - exportContext.increments(t("tutti.service.exportCruise.exportGearCaracteristics", cruise.getName())); + exportContext.increments(t("tutti.service.genericFormat.exportCruise.exportGearCaracteristics", cruise.getName())); try { @@ -565,14 +514,14 @@ public class GenericFormatExportService extends AbstractTuttiService { producerForGearCaracteristics.write(rows); } catch (Exception e) { - throw new ApplicationTechnicalException(t("tutti.service.export.gearCaracteristics.error"), e); + throw new ApplicationTechnicalException(t("tutti.service.genericFormat.export.gearCaracteristics.error"), e); } } protected void exportOperation(GenericFormatExportContext exportContext, Cruise cruise, FishingOperation operation) { GenericFormatExportOperationContext operationContext = exportContext.newOperationContext(cruise, operation); - exportContext.increments(t("tutti.service.exportCruise.exportOperation", cruise.getName(), operationContext.getOperationLabel())); + exportContext.increments(t("tutti.service.genericFormat.exportCruise.exportOperation", cruise.getName(), operationContext.getOperationLabel())); CatchBatch catchBatch = operationContext.getCatchBatch(); @@ -614,7 +563,7 @@ public class GenericFormatExportService extends AbstractTuttiService { } catch (Exception e) { - throw new ApplicationTechnicalException(t("tutti.service.export.operation.error", operationContext.getOperationLabel(), operationContext.getCruise().getName()), e); + throw new ApplicationTechnicalException(t("tutti.service.genericFormat.export.operation.error", operationContext.getOperationLabel(), operationContext.getCruise().getName()), e); } @@ -685,7 +634,7 @@ public class GenericFormatExportService extends AbstractTuttiService { protected void exportSpecies(GenericFormatExportContext exportContext) { - exportContext.increments(t("tutti.service.genericExport.exportSpecies")); + exportContext.increments(t("tutti.service.genericFormat.export.exportSpecies")); try { @@ -694,44 +643,42 @@ public class GenericFormatExportService extends AbstractTuttiService { producerForSpecies.write(rows); } catch (Exception e) { - throw new ApplicationTechnicalException(t("tutti.service.export.species.error"), e); + throw new ApplicationTechnicalException(t("tutti.service.genericFormat.export.species.error"), e); } } - protected String getCruiseErrors(ProgressionModel progressionModel, Cruise cruise, List<String> allFishingOperation) { + protected int getCruiseNbStep(String cruiseId) { + Cruise cruise = persistenceService.getCruise(cruiseId); Preconditions.checkNotNull(cruise); + List<String> allFishingOperationIds = persistenceService.getAllFishingOperationIds(cruiseId); + int nbFishingOperations = allFishingOperationIds.size(); - increments(progressionModel, t("tutti.service.exportCruise.checkCruise", cruise.getName())); + int result = 1 + nbFishingOperations // check cruise + operations + + 1 // export cruise + + 1 // export gear caracteristics + + nbFishingOperations; // export operation - // check cruise fishing operations + return result; - StringBuilder errorMessageBuilder = new StringBuilder(); + } - boolean withErrors = false; + protected String getCruiseErrors(Cruise cruise, Collection<String> fishingOperationIds, ProgressionModel progressionModel) { - for (String fishingOperationId : allFishingOperation) { + Map<String, String> errors = getFishingOperationsErrors(cruise, fishingOperationIds, progressionModel); - FishingOperation fishingOperation = persistenceService.getFishingOperation(fishingOperationId); - increments(progressionModel, t("tutti.service.exportCruise.checkCruiseFishingOperation", cruise.getName(), fishingOperationDecorator.toString(fishingOperation))); + String result; - String error = checkCruiseFishingOperation(fishingOperationId); + if (errors.isEmpty()) { - if (error != null) { + StringBuilder errorMessageBuilder = new StringBuilder(); - withErrors = true; + for (String error : errors.values()) { errorMessageBuilder.append("<li>").append(error).append("</li>"); - } - } - - String result; - - if (withErrors) { - String cruiseStr = cruiseDecorator.toString(cruise); - result = t("tutti.service.export.invalid.cruise", cruiseStr, errorMessageBuilder.toString()); + result = t("tutti.service.genericFormat.invalid.cruise", cruiseStr, errorMessageBuilder.toString()); } else { @@ -743,102 +690,38 @@ public class GenericFormatExportService extends AbstractTuttiService { } - protected String checkCruiseFishingOperation(String fishingOperationId) { + protected Map<String, String> getFishingOperationsErrors(Cruise cruise, Collection<String> fishingOperationIds, ProgressionModel progressionModel) { - if (log.isDebugEnabled()) { - log.debug("Will check operation: " + fishingOperationId); - } - - Set<String> errors = new LinkedHashSet<>(); - - boolean withCatchBatch = persistenceService.isFishingOperationWithCatchBatch(fishingOperationId); - - if (!withCatchBatch) { - - if (log.isWarnEnabled()) { - log.warn("Skip fishing operation " + fishingOperationId + " since no catchBatch associated."); - } - - } else { + Preconditions.checkNotNull(cruise); + Preconditions.checkNotNull(progressionModel); - BatchContainer<SpeciesBatch> rootSpeciesBatch; - try { - rootSpeciesBatch = weightComputingService.getComputedSpeciesBatches(fishingOperationId); + progressionModel.increments(t("tutti.service.genericFormat.checkCruise", cruise.getName())); - } catch (ApplicationBusinessException e) { - errors.add(e.getMessage()); - rootSpeciesBatch = persistenceService.getRootSpeciesBatch(fishingOperationId, false); - } + Map<String, String> errors = new LinkedHashMap<>(); - BatchContainer<BenthosBatch> rootBenthosBatch; - try { - rootBenthosBatch = weightComputingService.getComputedBenthosBatches(fishingOperationId); + for (String fishingOperationId : fishingOperationIds) { - } catch (ApplicationBusinessException e) { - errors.add(e.getMessage()); - rootBenthosBatch = persistenceService.getRootBenthosBatch(fishingOperationId, false); - } + FishingOperation fishingOperation = persistenceService.getFishingOperation(fishingOperationId); + progressionModel.increments(t("tutti.service.genericFormat.checkCruiseFishingOperation", cruise.getName(), fishingOperationDecorator.toString(fishingOperation))); - CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(fishingOperationId); + Set<String> errorsForOperation = checkFishingOperation(fishingOperationId); + if (!errorsForOperation.isEmpty()) { - BatchContainer<MarineLitterBatch> rootMarineLitterBatch; - try { - Float weight = catchBatch == null ? null : catchBatch.getMarineLitterTotalWeight(); - rootMarineLitterBatch = weightComputingService.getComputedMarineLitterBatches(fishingOperationId, weight); - } catch (ApplicationBusinessException e) { - errors.add(e.getMessage()); - rootMarineLitterBatch = persistenceService.getRootMarineLitterBatch(fishingOperationId); - } + String fishingOperationStr = fishingOperationDecorator.toString(fishingOperation); - try { - if (catchBatch != null) { - weightComputingService.computeCatchBatchWeights(catchBatch, - rootSpeciesBatch, - rootBenthosBatch, - rootMarineLitterBatch); + StringBuilder sb = new StringBuilder(); + for (String error : errorsForOperation) { + sb.append("<li>").append(error).append("</li>"); } - } catch (ApplicationBusinessException e) { - errors.add(e.getMessage()); - } - } - - String errorMessage; - - if (errors.isEmpty()) { - - errorMessage = null; + String errorMessage = t("tutti.service.genericFormat.invalid.fishingOperation", fishingOperationStr, sb.toString()); + errors.put(fishingOperationId, errorMessage); - } else { - - FishingOperation fishingOperation = persistenceService.getFishingOperation(fishingOperationId); - String fishingOperationStr = fishingOperationDecorator.toString(fishingOperation); - - StringBuilder sb = new StringBuilder(); - for (String error : errors) { - sb.append("<li>").append(error).append("</li>"); } - errorMessage = t("tutti.service.export.invalid.fishingOperation", fishingOperationStr, sb.toString()); } - return errorMessage; - - } - - protected int getCruiseNbStep(String cruiseId) { - - Cruise cruise = persistenceService.getCruise(cruiseId); - Preconditions.checkNotNull(cruise); - List<String> allFishingOperationIds = persistenceService.getAllFishingOperationIds(cruiseId); - int nbFishingOperations = allFishingOperationIds.size(); - - int result = 1 + nbFishingOperations // check cruise + operations - + 1 // export cruise - + 1 // export gear caracteristics - + nbFishingOperations; // export operation - - return result; + return errors; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java index df2831b..0824f2c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java @@ -1,16 +1,17 @@ package fr.ifremer.tutti.service.genericformat; -import com.google.common.base.Predicate; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Iterables; -import com.google.common.collect.Multimap; +import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Cruises; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.FishingOperations; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; 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.ValidationService; import fr.ifremer.tutti.service.csv.CaracteristicValueParseException; @@ -24,19 +25,18 @@ import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForOperation; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForParameter; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSampleCategory; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; -import fr.ifremer.tutti.service.genericformat.csv.RowWithOperationContextSupport; +import fr.ifremer.tutti.service.genericformat.csv.RowWithCruiseContextSupport; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryGear; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryPerson; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryVessel; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; import java.io.Closeable; -import java.io.IOException; import java.io.Serializable; import java.text.ParseException; +import java.util.LinkedHashMap; +import java.util.Map; /** * Created on 2/5/15. @@ -46,132 +46,148 @@ import java.text.ParseException; */ public class GenericFormatImportContext implements Closeable { - /** Logger. */ - private static final Log log = LogFactory.getLog(GenericFormatImportContext.class); - private final GenericFormatImportRequest importRequest; - private final GenericFormatImportResult importResult; - private final ProgressionModel progressionModel; + private final Decorator<Cruise> cruiseDecorator; + private final Decorator<FishingOperation> fishingOperationDecorator; private final GenericFormatImportEntityParserFactory importEntityParserFactory; - private final GenericformatImportPersitenceHelper persitenceHelper; - private final GenericFormatImportValidationHelper validationHelper; - private final Multimap<Cruise, GenericFormatImportOperationContext> fishingOperationsContexts; + private TuttiProtocol importedProtocol; + + private GenericFormatReferentialImportResult<Gear, Integer> importedGears; + private GenericFormatReferentialImportResult<Person, Integer> importedPersons; + + private GenericFormatReferentialImportResult<Species, Integer> importedSpecies; + + private GenericFormatReferentialImportResult<Vessel, String> importedVessels; + + private final Map<String, GenericFormatImportCruiseContext> cruiseContexts; public GenericFormatImportContext(GenericFormatImportRequest importRequest, ProgressionModel progressionModel, PersistenceService persistenceService, Decorator<Cruise> cruiseDecorator, Decorator<FishingOperation> fishingOperationDecorator) { + + Preconditions.checkNotNull(importRequest); + Preconditions.checkNotNull(progressionModel); + Preconditions.checkNotNull(persistenceService); + Preconditions.checkNotNull(cruiseDecorator); + Preconditions.checkNotNull(fishingOperationDecorator); + this.importRequest = importRequest; this.progressionModel = progressionModel; + this.cruiseDecorator = cruiseDecorator; this.fishingOperationDecorator = fishingOperationDecorator; - this.importResult = new GenericFormatImportResult(importRequest); - this.importEntityParserFactory = new GenericFormatImportEntityParserFactory(persistenceService, importRequest, importResult); - this.persitenceHelper = new GenericformatImportPersitenceHelper(this, persistenceService, cruiseDecorator, fishingOperationDecorator); + this.importEntityParserFactory = new GenericFormatImportEntityParserFactory(persistenceService, this); this.validationHelper = new GenericFormatImportValidationHelper(this, new ValidationService()); - this.fishingOperationsContexts = ArrayListMultimap.create(); + this.cruiseContexts = new LinkedHashMap<>(); + + } + + @Override + public void close() { + + validationHelper.close(); + + for (GenericFormatImportCruiseContext cruiseContext : cruiseContexts.values()) { + cruiseContext.close(); + } + cruiseContexts.clear(); + } public GenericFormatImportRequest getImportRequest() { return importRequest; } - public GenericFormatImportResult getImportResult() { - return importResult; + public TuttiProtocol getImportedProtocol() { + return importedProtocol; } - @Override - public void close() throws IOException { - - validationHelper.close(); - - //TODO Close - //getArchive().close(); + public void setImportedProtocol(TuttiProtocol importedProtocol) { + this.importedProtocol = importedProtocol; + } + public GenericFormatReferentialImportResult<Gear, Integer> getImportedGears() { + return importedGears; } - public boolean isCruiseAlreadyExists(Cruise cruise) { + public void setImportedGears(GenericFormatReferentialImportResult<Gear, Integer> importedGears) { + this.importedGears = importedGears; + } - boolean equals = false; - for (Cruise existingCruise : importRequest.getExistingCruises()) { + public GenericFormatReferentialImportResult<Person, Integer> getImportedPersons() { + return importedPersons; + } - equals = Cruises.equals(cruise, existingCruise); - if (equals) { - break; - } + public void setImportedPersons(GenericFormatReferentialImportResult<Person, Integer> importedPersons) { + this.importedPersons = importedPersons; + } - } - return equals; + public GenericFormatReferentialImportResult<Species, Integer> getImportedSpecies() { + return importedSpecies; + } + public void setImportedSpecies(GenericFormatReferentialImportResult<Species, Integer> importedSpecies) { + this.importedSpecies = importedSpecies; } - public Cruise getImportedCruise(Cruise importRowCruise) { + public GenericFormatReferentialImportResult<Vessel, String> getImportedVessels() { + return importedVessels; + } - Cruise result = null; - for (Cruise importedCruise : importResult.getImportedCruises()) { + public void setImportedVessels(GenericFormatReferentialImportResult<Vessel, String> importedVessels) { + this.importedVessels = importedVessels; + } - boolean equals = Cruises.equals(importRowCruise, importedCruise); - if (equals) { - result = importedCruise; - break; - } + public boolean isCruiseAlreadyExists(Cruise cruise) { - } - return result; + Cruise existingCruise = importRequest.getExistingCruise(cruise); + return existingCruise != null; } public boolean isCruiseAlreadyImported(Cruise cruise) { - Cruise importedCruise = getImportedCruise(cruise); - return importedCruise != null; + GenericFormatImportCruiseContext cruiseContext = getCruiseContext(cruise); + return cruiseContext != null; } - public Gear getGear(Cruise cruise, Gear gear, int rankOrder) { + public void addImportedCruise(Cruise cruise) { - Gear result = null; - - int index = rankOrder - 1; - boolean gearExists = cruise.sizeGear() > index; - if (gearExists) { - Gear cruiseGear = cruise.getGear(index); - gearExists = cruiseGear.getId().equals(gear.getId()); - if (gearExists) { - result = cruiseGear; - } - } - return result; + String cruiseId = cruise.getId(); + GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, cruiseDecorator.toString(cruise)); + cruiseContexts.put(cruiseId, cruiseContext); } - public void addImportedFishingOperation(FishingOperation fishingOperation) { - importResult.addImportedFishingOperation(fishingOperation); + public void addImportedFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch) { + + GenericFormatImportCruiseContext cruiseContext = getCruiseContext(fishingOperation.getCruise()); String fishingOperationLabel = fishingOperationDecorator.toString(fishingOperation); - fishingOperationsContexts.put(fishingOperation.getCruise(), new GenericFormatImportOperationContext(fishingOperation, fishingOperationLabel)); + cruiseContext.addFishingOperation(fishingOperation, catchBatch, fishingOperationLabel); + } - public GenericFormatImportOperationContext getImportedFishingOperationContext(RowWithOperationContextSupport row) { + public GenericFormatImportCruiseContext getCruiseContext(RowWithCruiseContextSupport row) { Cruise cruise = row.getCruise(); - FishingOperation fishingOperation = row.getFishingOperation(); - GenericFormatImportOperationContext result = null; - for (GenericFormatImportOperationContext importOperationContext : fishingOperationsContexts.get(cruise)) { + GenericFormatImportCruiseContext result = null; + for (GenericFormatImportCruiseContext cruiseContext : cruiseContexts.values()) { - FishingOperation importedFishingOperation = importOperationContext.getFishingOperation(); - boolean equals = FishingOperations.equals(importedFishingOperation, fishingOperation); + boolean equals = Cruises.equals(cruise, cruiseContext.getCruise()); if (equals) { - result = importOperationContext; + result = cruiseContext; break; } @@ -180,33 +196,18 @@ public class GenericFormatImportContext implements Closeable { } - public GenericFormatImportOperationContext getImportedFishingOperationContext(FishingOperation importRowFishingOperation) { - - Cruise cruise = importRowFishingOperation.getCruise(); + public GenericFormatImportCruiseContext getCruiseContext(Cruise cruise) { - GenericFormatImportOperationContext result = null; - for (GenericFormatImportOperationContext importOperationContext : fishingOperationsContexts.get(cruise)) { + GenericFormatImportCruiseContext cruiseContext = cruiseContexts.get(cruise.getId()); + return cruiseContext; - FishingOperation fishingOperation = importOperationContext.getFishingOperation(); - boolean equals = FishingOperations.equals(importRowFishingOperation, fishingOperation); - if (equals) { - result = importOperationContext; - break; - } - - } - return result; - - } - - public Iterable<GenericFormatImportOperationContext> getImportedFishingOperationContexts(Predicate<GenericFormatImportOperationContext> predicate) { - return Iterables.filter(fishingOperationsContexts.values(), predicate); } - public boolean isFishingOperationAlreadyImported(FishingOperation fishingOperation) { + public GenericFormatImportOperationContext getFishingOperationContext(FishingOperation fishingOperation) { - GenericFormatImportOperationContext importedFishingOperation = getImportedFishingOperationContext(fishingOperation); - return importedFishingOperation != null; + GenericFormatImportCruiseContext cruiseContext = getCruiseContext(fishingOperation.getCruise()); + GenericFormatImportOperationContext result = cruiseContext.getFishingOperationContext(fishingOperation); + return result; } @@ -290,20 +291,25 @@ public class GenericFormatImportContext implements Closeable { } public void increments(String message) { - if (progressionModel != null) { - progressionModel.increments(message); - } - if (log.isInfoEnabled()) { - log.info(message); - } - } - - public GenericformatImportPersitenceHelper getPersitenceHelper() { - return persitenceHelper; + progressionModel.increments(message); } public GenericFormatImportValidationHelper getValidationHelper() { return validationHelper; } + public void doActionOnCruiseContexts(CruiseContextAction action) { + + for (GenericFormatImportCruiseContext cruiseContext : cruiseContexts.values()) { + + action.onCruise(cruiseContext, progressionModel); + + } + } + + public static interface CruiseContextAction { + + void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel); + + } } 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 new file mode 100644 index 0000000..5a1e971 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseContext.java @@ -0,0 +1,154 @@ +package fr.ifremer.tutti.service.genericformat; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +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.FishingOperations; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.service.genericformat.csv.RowWithOperationContextSupport; + +import java.io.Closeable; +import java.io.Serializable; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +/** + * Created on 2/22/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatImportCruiseContext implements Closeable { + + private final Cruise cruise; + + private final String cruiseLabel; + + private final Map<String, GenericFormatImportOperationContext> fishingOperationContexts; + + private final Set<Gear> gearsWithcaracteristics; + + public GenericFormatImportCruiseContext(Cruise cruise, String cruiseLabel) { + this.cruise = cruise; + this.cruiseLabel = cruiseLabel; + this.fishingOperationContexts = new TreeMap<>(); + this.gearsWithcaracteristics = new HashSet<>(); + } + + @Override + public void close() { + + for (GenericFormatImportOperationContext cruiseContext : fishingOperationContexts.values()) { + cruiseContext.close(); + } + fishingOperationContexts.clear(); + + } + + public Cruise getCruise() { + return cruise; + } + + public String getCruiseLabel() { + return cruiseLabel; + } + + public Gear getGear(Gear gear, int rankOrder) { + + Gear result = null; + + int index = rankOrder - 1; + boolean gearExists = cruise.sizeGear() > index; + if (gearExists) { + Gear cruiseGear = cruise.getGear(index); + gearExists = cruiseGear.getId().equals(gear.getId()); + if (gearExists) { + result = cruiseGear; + } + } + return result; + + } + + public void addFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch, String fishingOperationLabel) { + fishingOperationContexts.put(fishingOperation.getId(), new GenericFormatImportOperationContext(fishingOperation, catchBatch, fishingOperationLabel)); + } + + public GenericFormatImportOperationContext getFishingOperationContext(FishingOperation fishingOperation) { + + GenericFormatImportOperationContext result = fishingOperationContexts.get(fishingOperation.getId()); + return result; + + } + + public boolean isFishingOperationAlreadyImported(RowWithOperationContextSupport row) { + + GenericFormatImportOperationContext fishingOperationContext = getFishingOperationContext(row); + boolean found = fishingOperationContext != null; + return found; + + } + + public GenericFormatImportOperationContext getFishingOperationContext(RowWithOperationContextSupport row) { + + FishingOperation fishingOperation = row.getFishingOperation(); + GenericFormatImportOperationContext result = null; + for (GenericFormatImportOperationContext importOperationContext : fishingOperationContexts.values()) { + + FishingOperation importedFishingOperation = importOperationContext.getFishingOperation(); + boolean equals = FishingOperations.equals(importedFishingOperation, fishingOperation); + if (equals) { + result = importOperationContext; + break; + } + + } + + return result; + + } + + + public Iterable<GenericFormatImportOperationContext> getFishingOperationContexts(Predicate<GenericFormatImportOperationContext> predicate) { + + Iterable<GenericFormatImportOperationContext> result; + if (predicate == null) { + result = fishingOperationContexts.values(); + } else { + result = Iterables.filter(fishingOperationContexts.values(), predicate); + } + return result; + + } + + public Iterable<FishingOperation> getFishingOperations() { + return Iterables.transform(fishingOperationContexts.values(), GenericFormatImportOperationContext.TO_FISHING_OPERATION_FUNCTION); + } + + public boolean withGearCaracteristics() { + return !gearsWithcaracteristics.isEmpty(); + } + + public void addGearCaracteristic(Gear gear, Caracteristic caracteristic, Serializable caracteristicValue) { + + gearsWithcaracteristics.add(gear); + + CaracteristicMap caracteristics = gear.getCaracteristics(); + if (caracteristics == null) { + caracteristics = new CaracteristicMap(); + gear.setCaracteristics(caracteristics); + } + caracteristics.put(caracteristic, caracteristicValue); + + } + + public Set<Gear> getGearsWithcaracteristics() { + return gearsWithcaracteristics; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java new file mode 100644 index 0000000..51c0d82 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java @@ -0,0 +1,64 @@ +package fr.ifremer.tutti.service.genericformat; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * Created on 2/22/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatImportCruiseResult { + + public static final Function<GenericFormatImportCruiseResult, Cruise> TO_CRUISE_FUNCTION = new Function<GenericFormatImportCruiseResult, Cruise>() { + @Override + public Cruise apply(GenericFormatImportCruiseResult input) { + return input.getCruise(); + } + }; + + private final Cruise cruise; + + private final Map<String, GenericFormatImportOperationResult> fishingOperationResults; + + public GenericFormatImportCruiseResult(GenericFormatImportCruiseContext cruiseContext) { + + this.cruise = cruiseContext.getCruise(); + this.fishingOperationResults = new HashMap<>(); + + Iterable<GenericFormatImportOperationContext> operationContexts = cruiseContext.getFishingOperationContexts(null); + for (GenericFormatImportOperationContext operationContext : operationContexts) { + + GenericFormatImportOperationResult operationResult = new GenericFormatImportOperationResult(operationContext); + fishingOperationResults.put(operationContext.getFishingOperation().getId(), operationResult); + + } + + } + + public Cruise getCruise() { + return cruise; + } + + public GenericFormatImportOperationResult getFishingOperationResult(String fishingOperationId) { + return fishingOperationResults.get(fishingOperationId); + } + + public Collection<String> getFishingOperationIds() { + return fishingOperationResults.keySet(); + } + + public Set<FishingOperation> getFishingOperations() { + return ImmutableSet.copyOf(Iterables.transform(fishingOperationResults.values(), GenericFormatImportOperationResult.TO_FISHING_OPERATION_FUNCTION)); + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportEntityParserFactory.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportEntityParserFactory.java index 7ae8fd3..17da0d6 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportEntityParserFactory.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportEntityParserFactory.java @@ -30,9 +30,7 @@ public class GenericFormatImportEntityParserFactory { private final PersistenceService persistenceService; - private final GenericFormatImportRequest importRequest; - - private final GenericFormatImportResult importResult; + private final GenericFormatImportContext importContext; private ProgramParserFormatter programParser; @@ -67,16 +65,14 @@ public class GenericFormatImportEntityParserFactory { private CaracteristicValueParserFormatter marineLitterSizeCategoryValueParser; public GenericFormatImportEntityParserFactory(PersistenceService persistenceService, - GenericFormatImportRequest importRequest, - GenericFormatImportResult importResult) { + GenericFormatImportContext importContext) { this.persistenceService = persistenceService; - this.importRequest = importRequest; - this.importResult = importResult; + this.importContext = importContext; } public VesselParserFormatter getVesselParser() { if (vesselParser == null) { - vesselParser = VesselParserFormatter.newParser(persistenceService, importResult.getImportedVessels().getIdTranslationMap()); + vesselParser = VesselParserFormatter.newParser(persistenceService, importContext.getImportedVessels().getIdTranslationMap()); } return vesselParser; } @@ -90,7 +86,7 @@ public class GenericFormatImportEntityParserFactory { public GearParserFormatter getGearParser() { if (gearParser == null) { - gearParser = GearParserFormatter.newParser(persistenceService, importResult.getImportedGears().getIdTranslationMap()); + gearParser = GearParserFormatter.newParser(persistenceService, importContext.getImportedGears().getIdTranslationMap()); } return gearParser; } @@ -105,7 +101,7 @@ public class GenericFormatImportEntityParserFactory { public PersonListParserFormatter getPersonListParser() { if (personListParser == null) { - PersonParserFormatter delegateParserFormatter = PersonParserFormatter.newParser(persistenceService, importResult.getImportedPersons().getIdTranslationMap()); + PersonParserFormatter delegateParserFormatter = PersonParserFormatter.newParser(persistenceService, importContext.getImportedPersons().getIdTranslationMap()); personListParser = PersonListParserFormatter.newParser(delegateParserFormatter); } return personListParser; @@ -145,7 +141,7 @@ public class GenericFormatImportEntityParserFactory { public FishingOperationStrataParserFormatter getFishingOperationStrataParser() { if (fishingOperationStrataParser == null) { - Program program = importRequest.getProgram(); + Program program = importContext.getImportRequest().getProgram(); fishingOperationStrataParser = FishingOperationStrataParserFormatter.newParser(persistenceService, program.getZone().getId()); } return fishingOperationStrataParser; @@ -153,7 +149,7 @@ public class GenericFormatImportEntityParserFactory { public FishingOperationSubStrataParserFormatter getFishingOperationSubStrataParser() { if (fishingOperationSubStrataParser == null) { - Program program = importRequest.getProgram(); + Program program = importContext.getImportRequest().getProgram(); fishingOperationSubStrataParser = FishingOperationSubStrataParserFormatter.newParser(persistenceService, program.getZone().getId()); } return fishingOperationSubStrataParser; @@ -161,7 +157,7 @@ public class GenericFormatImportEntityParserFactory { public FishingOperationLocationParserFormatter getFishingOperationLocationParser() { if (fishingOperationLocationParser == null) { - Program program = importRequest.getProgram(); + Program program = importContext.getImportRequest().getProgram(); fishingOperationLocationParser = FishingOperationLocationParserFormatter.newParser(persistenceService, program.getZone().getId()); } return fishingOperationLocationParser; @@ -176,7 +172,7 @@ public class GenericFormatImportEntityParserFactory { public SpeciesParserFormatter getSpeciesParser() { if (speciesParser == null) { - speciesParser = SpeciesParserFormatter.newParser(persistenceService, importResult.getImportedSpecies().getIdTranslationMap()); + speciesParser = SpeciesParserFormatter.newParser(persistenceService, importContext.getImportedSpecies().getIdTranslationMap()); } return speciesParser; } 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 e614a49..5c5d38f 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 @@ -1,11 +1,13 @@ package fr.ifremer.tutti.service.genericformat; +import com.google.common.base.Function; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableList; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; 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.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; @@ -15,11 +17,15 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; +import javax.annotation.Nullable; +import java.io.Closeable; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.TreeMap; /** @@ -28,10 +34,20 @@ import java.util.TreeMap; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatImportOperationContext { +public class GenericFormatImportOperationContext implements Closeable { + + public static final Function<GenericFormatImportOperationContext, FishingOperation> TO_FISHING_OPERATION_FUNCTION = new Function<GenericFormatImportOperationContext, FishingOperation>() { + @Nullable + @Override + public FishingOperation apply(GenericFormatImportOperationContext input) { + return input.getFishingOperation(); + } + }; private final FishingOperation fishingOperation; + private final CatchBatch catchBatch; + private final String fishingOperationLabel; private final Collection<MarineLitterBatch> marineLitterBatches; @@ -52,13 +68,18 @@ public class GenericFormatImportOperationContext { private final ArrayListMultimap<Integer, BenthosBatchFrequency> benthosFrequencies; - private final CaracteristicMap fishinOperationGearUseFeatures; + private final CaracteristicMap gearUseFeatures; - private final CaracteristicMap fishinOperationVesselUseFeatures; + private final CaracteristicMap vesselUseFeatures; - public GenericFormatImportOperationContext(FishingOperation fishingOperation, String fishingOperationLabel) { + private final Set<String> checkErrors; + + public GenericFormatImportOperationContext(FishingOperation fishingOperation, + CatchBatch catchBatch, + String fishingOperationLabel) { this.fishingOperation = fishingOperation; + this.catchBatch = catchBatch; this.fishingOperationLabel = fishingOperationLabel; this.marineLitterBatches = new ArrayList<>(); this.accidentalBatchesById = new TreeMap<>(); @@ -69,25 +90,29 @@ public class GenericFormatImportOperationContext { this.vracBenthosBatches = new TreeMap<>(); this.horsVracBenthosBatches = new TreeMap<>(); this.benthosFrequencies = ArrayListMultimap.create(); - this.fishinOperationGearUseFeatures = new CaracteristicMap(); - this.fishinOperationVesselUseFeatures = new CaracteristicMap(); - + this.gearUseFeatures = new CaracteristicMap(); + this.vesselUseFeatures = new CaracteristicMap(); + this.checkErrors = new LinkedHashSet<>(); } public FishingOperation getFishingOperation() { return fishingOperation; } + public CatchBatch getCatchBatch() { + return catchBatch; + } + public String getFishingOperationLabel() { return fishingOperationLabel; } public boolean withGearFeatures() { - return MapUtils.isNotEmpty(fishinOperationGearUseFeatures); + return MapUtils.isNotEmpty(gearUseFeatures); } public boolean withVesselFeatures() { - return MapUtils.isNotEmpty(fishinOperationVesselUseFeatures); + return MapUtils.isNotEmpty(vesselUseFeatures); } public boolean withMarineLitterBatches() { @@ -127,11 +152,11 @@ public class GenericFormatImportOperationContext { } public void addGearUseFeature(Caracteristic caracteristic, Serializable value) { - fishinOperationGearUseFeatures.put(caracteristic, value); + gearUseFeatures.put(caracteristic, value); } public void addVesselUseFeature(Caracteristic caracteristic, Serializable value) { - fishinOperationVesselUseFeatures.put(caracteristic, value); + vesselUseFeatures.put(caracteristic, value); } public void addMarineLitterBatch(MarineLitterBatch marineLitterBatch) { @@ -162,6 +187,10 @@ public class GenericFormatImportOperationContext { benthosFrequencies.put(batch.getIdAsInt(), frequency); } + public void addCheckErrors(Set<String> checkErrors) { + this.checkErrors.addAll(checkErrors); + } + public Collection<MarineLitterBatch> getMarineLitterBatches() { return ImmutableList.copyOf(marineLitterBatches); } @@ -190,12 +219,12 @@ public class GenericFormatImportOperationContext { return speciesFrequencies.get(speciesBatch.getIdAsInt()); } - public CaracteristicMap getFishinOperationGearUseFeatures() { - return fishinOperationGearUseFeatures; + public CaracteristicMap getGearUseFeatures() { + return gearUseFeatures; } - public CaracteristicMap getFishinOperationVesselUseFeatures() { - return fishinOperationVesselUseFeatures; + public CaracteristicMap getVesselUseFeatures() { + return vesselUseFeatures; } private Map<Integer, SpeciesBatch> getSpeciesBatchMap(boolean vrac) { @@ -206,5 +235,25 @@ public class GenericFormatImportOperationContext { return vrac ? vracBenthosBatches : horsVracBenthosBatches; } + public Set<String> getCheckErrors() { + return checkErrors; + } + + @Override + public void close() { + + gearUseFeatures.clear(); + vesselUseFeatures.clear(); + marineLitterBatches.clear(); + individualObservationBatchesById.clear(); + accidentalBatchesById.clear(); + benthosFrequencies.clear(); + vracBenthosBatches.clear(); + horsVracBenthosBatches.clear(); + speciesFrequencies.clear(); + vracSpeciesBatches.clear(); + horsVracSpeciesBatches.clear(); + + } } 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 new file mode 100644 index 0000000..159e75b --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java @@ -0,0 +1,145 @@ +package fr.ifremer.tutti.service.genericformat; + +import com.google.common.base.Function; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; + +import javax.annotation.Nullable; +import java.util.LinkedHashSet; +import java.util.Set; + +/** + * Created on 2/22/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatImportOperationResult { + + public static final Function<GenericFormatImportOperationResult, FishingOperation> TO_FISHING_OPERATION_FUNCTION = new Function<GenericFormatImportOperationResult, FishingOperation>() { + @Nullable + @Override + public FishingOperation apply(GenericFormatImportOperationResult input) { + return input.getFishingOperation(); + } + }; + + private final Set<String> checkErrors; + + private final FishingOperation fishingOperation; + + private final CatchBatch catchBatch; + + private int nbGearFeautres; + + private int nbVesselFeautres; + + private int nbAccidentalCatches; + + private int nbMarineLitters; + + private int nbIndividualObservations; + + private int nbSpeciesBatchesVrac; + + private int nbSpeciesBatchesHorsVrac; + + private int nbBenthosBatchesVrac; + + private int nbBenthosBatchesHorsVrac; + + public GenericFormatImportOperationResult(GenericFormatImportOperationContext operationContext) { + this.fishingOperation = operationContext.getFishingOperation(); + catchBatch = operationContext.getCatchBatch(); + this.checkErrors = new LinkedHashSet<>(); + flushContext(operationContext); + } + + public void addCheckError(String error) { + checkErrors.add(error); + } + + public Set<String> getCheckErrors() { + return checkErrors; + } + + public FishingOperation getFishingOperation() { + return fishingOperation; + } + + public CatchBatch getCatchBatch() { + return catchBatch; + } + + public int getNbGearFeautres() { + return nbGearFeautres; + } + + public int getNbVesselFeautres() { + return nbVesselFeautres; + } + + public int getNbAccidentalCatches() { + return nbAccidentalCatches; + } + + public int getNbMarineLitters() { + return nbMarineLitters; + } + + public int getNbIndividualObservations() { + return nbIndividualObservations; + } + + public int getNbSpeciesBatchesVrac() { + return nbSpeciesBatchesVrac; + } + + public int getNbSpeciesBatchesHorsVrac() { + return nbSpeciesBatchesHorsVrac; + } + + public int getNbBenthosBatchesVrac() { + return nbBenthosBatchesVrac; + } + + public int getNbBenthosBatchesHorsVrac() { + return nbBenthosBatchesHorsVrac; + } + + protected void flushContext(GenericFormatImportOperationContext operationContext) { + + //TODO See what else to set here (catch stuff ?) + if (operationContext.withGearFeatures()) { + nbGearFeautres = operationContext.getGearUseFeatures().size(); + } + if (operationContext.withVesselFeatures()) { + nbVesselFeautres = operationContext.getVesselUseFeatures().size(); + } + if (operationContext.withAccidentalBatches()) { + nbAccidentalCatches = operationContext.getAccidentalBatches().size(); + } + if (operationContext.withMarineLitterBatches()) { + nbMarineLitters = operationContext.getMarineLitterBatches().size(); + } + if (operationContext.withIndividualObservationBatches()) { + nbIndividualObservations = operationContext.getIndividualObservationBatches().size(); + } + + if (operationContext.withSpeciesBatches(true)) { + nbSpeciesBatchesVrac = operationContext.getSpeciesBatches(true).size(); + } + if (operationContext.withSpeciesBatches(false)) { + nbSpeciesBatchesHorsVrac = operationContext.getSpeciesBatches(false).size(); + } + if (operationContext.withBenthosBatches(true)) { + nbBenthosBatchesVrac = operationContext.getBenthosBatches(true).size(); + } + if (operationContext.withBenthosBatches(false)) { + nbBenthosBatchesHorsVrac = operationContext.getBenthosBatches(false).size(); + } + checkErrors.addAll(operationContext.getCheckErrors()); + + } + +} 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 052113b..13af96d 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 @@ -2,6 +2,7 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.collect.ImmutableSet; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.Cruises; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; @@ -70,4 +71,20 @@ public class GenericFormatImportRequest { return program; } + public Cruise getExistingCruise(Cruise importRowCruise) { + + Cruise result = null; + for (Cruise cruise : existingCruises) { + + boolean equals = Cruises.equals(importRowCruise, cruise); + if (equals) { + result = cruise; + break; + } + + } + return result; + + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java index 24471a5..251d58d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java @@ -1,10 +1,9 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSetMultimap; -import com.google.common.collect.LinkedHashMultimap; -import com.google.common.collect.Multimap; +import com.google.common.collect.Iterables; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.Cruises; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Gear; @@ -12,7 +11,10 @@ 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 java.util.Collection; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; +import java.util.Map; import java.util.Set; /** @@ -23,29 +25,32 @@ import java.util.Set; */ public class GenericFormatImportResult { - private final Set<Cruise> importedCruises; - - private final Multimap<Cruise, FishingOperation> importedFishingOperations; + private final Map<String, GenericFormatImportCruiseResult> cruiseResults; private final Set<String> errors; - private TuttiProtocol protocol; + private final TuttiProtocol protocol; - private GenericFormatReferentialImportResult<Gear, Integer> importedGears; + private final GenericFormatReferentialImportResult<Gear, Integer> importedGears; - private GenericFormatReferentialImportResult<Person, Integer> importedPersons; + private final GenericFormatReferentialImportResult<Person, Integer> importedPersons; - private GenericFormatReferentialImportResult<Species, Integer> importedSpecies; + private final GenericFormatReferentialImportResult<Species, Integer> importedSpecies; - private GenericFormatReferentialImportResult<Vessel, String> importedVessels; + private final GenericFormatReferentialImportResult<Vessel, String> importedVessels; private final GenericFormatImportRequest importRequest; - public GenericFormatImportResult(GenericFormatImportRequest importRequest) { - this.importRequest = importRequest; - this.importedCruises = new LinkedHashSet<>(); + public GenericFormatImportResult(GenericFormatImportContext importContext) { + this.importRequest = importContext.getImportRequest(); + this.cruiseResults = new LinkedHashMap<>(); this.errors = new LinkedHashSet<>(); - this.importedFishingOperations = LinkedHashMultimap.create(); + this.protocol = importContext.getImportedProtocol(); + this.importedGears = importContext.getImportedGears(); + this.importedPersons = importContext.getImportedPersons(); + this.importedSpecies = importContext.getImportedSpecies(); + this.importedVessels = importContext.getImportedVessels(); + } public GenericFormatImportRequest getImportRequest() { @@ -53,71 +58,81 @@ public class GenericFormatImportResult { } public Set<Cruise> getImportedCruises() { - return ImmutableSet.copyOf(importedCruises); + return ImmutableSet.copyOf(Iterables.transform(cruiseResults.values(), GenericFormatImportCruiseResult.TO_CRUISE_FUNCTION)); } - public Multimap<Cruise, FishingOperation> getImportedFishingOperations() { - return ImmutableSetMultimap.copyOf(importedFishingOperations); - } + public Cruise getCruise(Cruise importRowCruise) { + + Cruise result = null; + for (GenericFormatImportCruiseResult importCruiseResult : cruiseResults.values()) { + + Cruise cruise = importCruiseResult.getCruise(); + boolean equals = Cruises.equals(importRowCruise, cruise); + if (equals) { + result = cruise; + break; + } + + } + return result; - public Set<FishingOperation> getImportedFishingOperations(Cruise cruise) { - return ImmutableSet.copyOf(importedFishingOperations.get(cruise)); } - public TuttiProtocol getProtocol() { - return protocol; + public GenericFormatImportCruiseResult getImportedCruiseResult(String cruiseId) { + return cruiseResults.get(cruiseId); } - public Set<String> getErrors() { - return ImmutableSet.copyOf(errors); + public Set<FishingOperation> getImportedFishingOperations(Cruise cruise) { + GenericFormatImportCruiseResult importCruiseResult = getImportedCruiseResult(cruise.getId()); + return ImmutableSet.copyOf(importCruiseResult.getFishingOperations()); } - public void addImportedCruise(Cruise cruise) { - importedCruises.add(cruise); + public Collection<String> getImportedFishingOperationIds(Cruise cruise) { + GenericFormatImportCruiseResult importCruiseResult = getImportedCruiseResult(cruise.getId()); + return ImmutableSet.copyOf(importCruiseResult.getFishingOperationIds()); } - public void addImportedFishingOperation(FishingOperation fishingOperation) { - importedFishingOperations.put(fishingOperation.getCruise(), fishingOperation); + public Set<String> getErrors() { + return ImmutableSet.copyOf(errors); } public void addError(String error) { errors.add(error); } - public void setProtocol(TuttiProtocol protocol) { - this.protocol = protocol; + public TuttiProtocol getProtocol() { + return protocol; } public GenericFormatReferentialImportResult<Gear, Integer> getImportedGears() { return importedGears; } - public void setImportedGears(GenericFormatReferentialImportResult<Gear, Integer> importedGears) { - this.importedGears = importedGears; - } - public GenericFormatReferentialImportResult<Person, Integer> getImportedPersons() { return importedPersons; } - public void setImportedPersons(GenericFormatReferentialImportResult<Person, Integer> importedPersons) { - this.importedPersons = importedPersons; - } - public GenericFormatReferentialImportResult<Species, Integer> getImportedSpecies() { return importedSpecies; } - public void setImportedSpecies(GenericFormatReferentialImportResult<Species, Integer> importedSpecies) { - this.importedSpecies = importedSpecies; - } - public GenericFormatReferentialImportResult<Vessel, String> getImportedVessels() { return importedVessels; } - public void setImportedVessels(GenericFormatReferentialImportResult<Vessel, String> importedVessels) { - this.importedVessels = importedVessels; + public void addFishingOperationCheckError(Cruise cruise, String fishingOperationId, String checkError) { + + GenericFormatImportCruiseResult importedCruiseResult = getImportedCruiseResult(cruise.getId()); + GenericFormatImportOperationResult fishingOperationResult = importedCruiseResult.getFishingOperationResult(fishingOperationId); + fishingOperationResult.addCheckError(checkError); + } + public void flushContext(GenericFormatImportCruiseContext cruiseContext) { + + Cruise cruise = cruiseContext.getCruise(); + GenericFormatImportCruiseResult cruiseResult = new GenericFormatImportCruiseResult(cruiseContext); + cruiseResults.put(cruise.getId(), cruiseResult); + + } } 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 eb1bbea..ba129f5 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java @@ -3,7 +3,6 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; -import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; @@ -12,11 +11,9 @@ import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; -import fr.ifremer.tutti.service.AbstractTuttiService; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; import fr.ifremer.tutti.service.ValidationService; +import fr.ifremer.tutti.service.catches.WeightCleaningService; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAccidentalCatch; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForCatch; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForGearCaracteristic; @@ -35,13 +32,8 @@ import fr.ifremer.tutti.service.genericformat.csv.OperationRow; import fr.ifremer.tutti.service.genericformat.csv.ParameterRow; import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryRow; import fr.ifremer.tutti.service.genericformat.csv.SurveyRow; -import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; -import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; -import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; -import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService; -import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryGear; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryPerson; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies; @@ -54,7 +46,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ImportRow; import org.nuiton.csv.ImportRuntimeException; -import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.File; @@ -64,6 +55,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Map; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -73,42 +65,19 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatImportService extends AbstractTuttiService { +public class GenericFormatImportService extends GenericFormatServiceSupport { private static final Log log = LogFactory.getLog(GenericFormatImportService.class); - protected PersistenceService persistenceService; + protected WeightCleaningService weightCleaningService; protected ValidationService validationServic; - protected ReferentialTemporaryGearService referentialTemporaryGearService; - - protected ReferentialTemporaryPersonService referentialTemporaryPersonService; - - protected ReferentialTemporarySpeciesService referentialTemporarySpeciesService; - - protected ReferentialTemporaryVesselService referentialTemporaryVesselService; - - protected ProtocolImportExportService protocolImportExportService; - - protected Decorator<FishingOperation> fishingOperationDecorator; - - protected Decorator<Cruise> cruiseDecorator; - @Override public void setServiceContext(TuttiServiceContext context) { super.setServiceContext(context); - 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); - fishingOperationDecorator = decoratorService.getDecoratorByType(FishingOperation.class); + weightCleaningService = getService(WeightCleaningService.class); } @@ -145,6 +114,16 @@ public class GenericFormatImportService extends AbstractTuttiService { GenericFormatArchive archive = GenericFormatArchive.forImport(importFile, context.getConfig().getTmpDirectory()); + GenericFormatImportResult result = doImport(archive, program, progressionModel); + + computeReport(result); + + return result; + + } + + protected GenericFormatImportResult doImport(GenericFormatArchive archive, Program program, ProgressionModel progressionModel) { + GenericFormatImportRequest request = new GenericFormatImportRequest(persistenceService, archive, ';', @@ -153,7 +132,7 @@ public class GenericFormatImportService extends AbstractTuttiService { try (GenericFormatImportContext importContext = new GenericFormatImportContext(request, progressionModel, persistenceService, cruiseDecorator, fishingOperationDecorator)) { - GenericFormatImportResult result = new GenericFormatImportResult(request); + GenericformatImportPersitenceHelper persitenceHelper = new GenericformatImportPersitenceHelper(importContext, persistenceService, cruiseDecorator, fishingOperationDecorator); checkSampleCategoryModel(importContext); importTemporaryGears(importContext); @@ -162,30 +141,38 @@ public class GenericFormatImportService extends AbstractTuttiService { importTemporaryVessels(importContext); importProtocol(importContext); - importCruises(importContext); - importGearCaracteristics(importContext); - importOperations(importContext); - importParameters(importContext); - importCatches(importContext); - importMarineLitters(importContext); - importIndividualObservations(importContext); - importAccidentalCatches(importContext); + importCruises(importContext, persitenceHelper); + importGearCaracteristics(importContext, persitenceHelper); + importOperations(importContext, persitenceHelper); + importParameters(importContext, persitenceHelper); + importCatches(importContext, persitenceHelper); + importMarineLitters(importContext, persitenceHelper); + importIndividualObservations(importContext, persitenceHelper); + importAccidentalCatches(importContext, persitenceHelper); + + doCleanWeights(importContext); + doCheckCruises(importContext); + GenericFormatImportResult result = new GenericFormatImportResult(importContext); return result; - } catch (IOException e) { - throw new ApplicationTechnicalException("Could not create close import context", e); } } + protected void computeReport(GenericFormatImportResult result) { + + //TODO Compute report + + } + protected void checkSampleCategoryModel(GenericFormatImportContext importContext) { if (log.isInfoEnabled()) { log.info("Import sample category model."); } - importContext.increments(t("tutti.genericFormat.import.sampleCategoryModel")); + importContext.increments(t("tutti.service.genericFormat.import.sampleCategoryModel")); try (CsvConsumerForSampleCategory consumer = importContext.loadSampleCategories()) { int nbCategories = 0; @@ -196,7 +183,7 @@ public class GenericFormatImportService extends AbstractTuttiService { if (nbCategories != importContext.getImportRequest().getSampleCategoryModel().getNbSampling()) { - throw new ImportRuntimeException(t("tutti.genericFormat.import.sampleCategoryModel.error.missingCategories")); + throw new ImportRuntimeException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.missingCategories")); } @@ -208,8 +195,11 @@ public class GenericFormatImportService extends AbstractTuttiService { protected void importTemporaryGears(GenericFormatImportContext importContext) { - importContext.increments(t("tutti.genericFormat.import.temporaryGears")); + importContext.increments(t("tutti.service.genericFormat.import.temporaryGears")); GenericFormatArchive archive = importContext.getImportRequest().getArchive(); + + GenericFormatReferentialImportResult<Gear, Integer> importResult; + if (archive.isTemporaryReferentialGearsPathExists()) { if (log.isInfoEnabled()) { @@ -228,10 +218,9 @@ public class GenericFormatImportService extends AbstractTuttiService { ReferentialImportResult<Gear> referentialImportResult = referentialTemporaryGearService.executeImportRequest(referentialImportRequest); - GenericFormatReferentialImportResult<Gear, Integer> genericFormatReferentialImportResult = new GenericFormatReferentialImportResult<>(referentialImportRequest, referentialImportResult); - importContext.getImportResult().setImportedGears(genericFormatReferentialImportResult); + importResult = new GenericFormatReferentialImportResult<>(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { - log.info("Temporary gears import result: " + genericFormatReferentialImportResult.getReport()); + log.info("Temporary gears import result: " + importResult.getReport()); } } else { @@ -239,16 +228,21 @@ public class GenericFormatImportService extends AbstractTuttiService { if (log.isInfoEnabled()) { log.info("Skip import temporary gears (no file found)."); } - importContext.getImportResult().setImportedGears(new GenericFormatReferentialImportResult<Gear, Integer>()); + importResult = new GenericFormatReferentialImportResult<>(); } + importContext.setImportedGears(importResult); + } protected void importTemporaryPersons(GenericFormatImportContext importContext) { - importContext.increments(t("tutti.genericFormat.import.temporaryPersons")); + importContext.increments(t("tutti.service.genericFormat.import.temporaryPersons")); GenericFormatArchive archive = importContext.getImportRequest().getArchive(); + + GenericFormatReferentialImportResult<Person, Integer> importResult; + if (archive.isTemporaryReferentialPersonsPathExists()) { if (log.isInfoEnabled()) { @@ -267,10 +261,9 @@ public class GenericFormatImportService extends AbstractTuttiService { ReferentialImportResult<Person> referentialImportResult = referentialTemporaryPersonService.executeImportRequest(referentialImportRequest); - GenericFormatReferentialImportResult<Person, Integer> genericFormatReferentialImportResult = new GenericFormatReferentialImportResult<>(referentialImportRequest, referentialImportResult); - importContext.getImportResult().setImportedPersons(genericFormatReferentialImportResult); + importResult = new GenericFormatReferentialImportResult<>(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { - log.info("Temporary persons import result: " + genericFormatReferentialImportResult.getReport()); + log.info("Temporary persons import result: " + importResult.getReport()); } } else { @@ -278,15 +271,20 @@ public class GenericFormatImportService extends AbstractTuttiService { if (log.isInfoEnabled()) { log.info("Skip import temporary persons (no file found)."); } - importContext.getImportResult().setImportedPersons(new GenericFormatReferentialImportResult<Person, Integer>()); + importResult = new GenericFormatReferentialImportResult<>(); } + importContext.setImportedPersons(importResult); + } protected void importTemporarySpecies(GenericFormatImportContext importContext) { - importContext.increments(t("tutti.genericFormat.import.temporarySpecies")); + importContext.increments(t("tutti.service.genericFormat.import.temporarySpecies")); + + GenericFormatReferentialImportResult<Species, Integer> importResult; + GenericFormatArchive archive = importContext.getImportRequest().getArchive(); if (archive.isTemporaryReferentialSpeciesPathExists()) { @@ -306,27 +304,31 @@ public class GenericFormatImportService extends AbstractTuttiService { ReferentialImportResult<Species> referentialImportResult = referentialTemporarySpeciesService.executeImportRequest(referentialImportRequest); - GenericFormatReferentialImportResult<Species, Integer> genericFormatReferentialImportResult = new GenericFormatReferentialImportResult<>(referentialImportRequest, referentialImportResult); - importContext.getImportResult().setImportedSpecies(genericFormatReferentialImportResult); + importResult = new GenericFormatReferentialImportResult<>(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { - log.info("Temporary species import result: " + genericFormatReferentialImportResult.getReport()); + log.info("Temporary species import result: " + importResult.getReport()); } } else { if (log.isInfoEnabled()) { log.info("Skip import temporary species (no file found)."); } - importContext.getImportResult().setImportedSpecies(new GenericFormatReferentialImportResult<Species, Integer>()); + importResult = new GenericFormatReferentialImportResult<>(); } + importContext.setImportedSpecies(importResult); + } protected void importTemporaryVessels(GenericFormatImportContext importContext) { - importContext.increments(t("tutti.genericFormat.import.temporaryVessels")); + importContext.increments(t("tutti.service.genericFormat.import.temporaryVessels")); GenericFormatArchive archive = importContext.getImportRequest().getArchive(); + + GenericFormatReferentialImportResult<Vessel, String> importResult; + if (archive.isTemporaryReferentialVesselsPathExists()) { if (log.isInfoEnabled()) { @@ -345,11 +347,10 @@ public class GenericFormatImportService extends AbstractTuttiService { ReferentialImportResult<Vessel> referentialImportResult = referentialTemporaryVesselService.executeImportRequest(referentialImportRequest); - GenericFormatReferentialImportResult<Vessel, String> genericFormatReferentialImportResult = new GenericFormatReferentialImportResult<>(referentialImportRequest, referentialImportResult); - importContext.getImportResult().setImportedVessels(genericFormatReferentialImportResult); + importResult = new GenericFormatReferentialImportResult<>(referentialImportRequest, referentialImportResult); if (log.isInfoEnabled()) { - log.info("Temporary vessels import result: " + genericFormatReferentialImportResult.getReport()); + log.info("Temporary vessels import result: " + importResult.getReport()); } } else { @@ -357,15 +358,17 @@ public class GenericFormatImportService extends AbstractTuttiService { if (log.isInfoEnabled()) { log.info("Skip import temporary vessels (no file found)."); } - importContext.getImportResult().setImportedVessels(new GenericFormatReferentialImportResult<Vessel, String>()); + importResult = new GenericFormatReferentialImportResult<>(); } + importContext.setImportedVessels(importResult); + } protected void importProtocol(GenericFormatImportContext importContext) { - importContext.increments(t("tutti.genericFormat.load.protocol")); + importContext.increments(t("tutti.service.genericFormat.load.protocol")); GenericFormatArchive archive = importContext.getImportRequest().getArchive(); if (archive.isProtocolExists()) { @@ -375,18 +378,18 @@ public class GenericFormatImportService extends AbstractTuttiService { TuttiProtocol tuttiProtocol = protocolImportExportService.importProtocol(archive.getProtocolPath().toFile()); - Map<String, String> idTranslationMap = importContext.getImportResult().getImportedSpecies().getIdTranslationMap(); + Map<String, String> idTranslationMap = importContext.getImportedSpecies().getIdTranslationMap(); TuttiProtocols.translateReferenceTaxonIds(tuttiProtocol, idTranslationMap); String newName = persistenceService.getFirstAvailableName(tuttiProtocol.getName()); tuttiProtocol.setName(newName); - importContext.increments(t("tutti.genericFormat.import.protocol", tuttiProtocol.getName())); + importContext.increments(t("tutti.service.genericFormat.import.protocol", tuttiProtocol.getName())); tuttiProtocol = persistenceService.createProtocol(tuttiProtocol); persistenceService.setProtocol(tuttiProtocol); - importContext.getImportResult().setProtocol(tuttiProtocol); + importContext.setImportedProtocol(tuttiProtocol); } else { @@ -397,21 +400,20 @@ public class GenericFormatImportService extends AbstractTuttiService { } } - protected void importCruises(GenericFormatImportContext importContext) { + protected void importCruises(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { if (log.isInfoEnabled()) { log.info("Import survey.csv file."); } - importContext.increments(t("tutti.genericFormat.import.cruises")); + importContext.increments(t("tutti.service.genericFormat.import.cruises")); try (CsvConsumerForSurvey consumer = importContext.loadSurveys()) { for (ImportRow<SurveyRow> row : consumer) { consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(row); - importContext.getPersitenceHelper().persistCruise(row.getBean().getCruise()); + persitenceHelper.persistCruise(row.getBean().getCruise()); } } catch (IOException e) { @@ -420,51 +422,47 @@ public class GenericFormatImportService extends AbstractTuttiService { } - protected void importGearCaracteristics(GenericFormatImportContext importContext) { + protected void importGearCaracteristics(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { if (log.isInfoEnabled()) { log.info("Import gearCaracteristics.csv file."); } - importContext.increments(t("tutti.genericFormat.import.gearCaracteristics")); + importContext.increments(t("tutti.service.genericFormat.import.gearCaracteristics")); try (CsvConsumerForGearCaracteristic consumer = importContext.loadGearCaracteristics()) { for (ImportRow<GearCaracteristicRow> row : consumer) { - consumer.validateRow(row, importContext); - - consumer.prepareRowForPersist(row); + GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(cruiseContext, row); } } catch (IOException e) { throw new ApplicationTechnicalException("Could not close gearCaracteristic.csv file", e); } - importContext.getPersitenceHelper().persistGearCaracteristics(); + persitenceHelper.persistGearCaracteristics(); } - protected void importOperations(GenericFormatImportContext importContext) { + protected void importOperations(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { if (log.isInfoEnabled()) { log.info("Import operation.csv file."); } - importContext.increments(t("tutti.genericFormat.import.operations")); + importContext.increments(t("tutti.service.genericFormat.import.operations")); try (CsvConsumerForOperation consumer = importContext.loadOperations()) { for (ImportRow<OperationRow> row : consumer) { - consumer.validateRow(row, importContext); - - consumer.prepareRowForPersist(row); + GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(cruiseContext, row); OperationRow bean = row.getBean(); - FishingOperation savedFishingOperation = importContext.getPersitenceHelper().persistFishingOperation(bean.getFishingOperation()); - + FishingOperation fishingOperation = bean.getFishingOperation(); CatchBatch catchBatch = bean.getCatchBatch(); - catchBatch.setFishingOperation(savedFishingOperation); - importContext.getPersitenceHelper().persistCatchBatch(catchBatch); + persitenceHelper.persistFishingOperation(fishingOperation, catchBatch); } } catch (IOException e) { @@ -473,129 +471,156 @@ public class GenericFormatImportService extends AbstractTuttiService { } - protected void importParameters(GenericFormatImportContext importContext) { + protected void importParameters(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { if (log.isInfoEnabled()) { log.info("Import parameter.csv file."); } - importContext.increments(t("tutti.genericFormat.import.parameters")); + importContext.increments(t("tutti.service.genericFormat.import.parameters")); try (CsvConsumerForParameter consumer = importContext.loadParameters()) { for (ImportRow<ParameterRow> row : consumer) { - consumer.validateRow(row, importContext); - - GenericFormatImportOperationContext fishingOperationContext = importContext.getImportedFishingOperationContext(row.getBean()); - - consumer.prepareRowForPersist(fishingOperationContext,row); + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); } } catch (IOException e) { throw new ApplicationTechnicalException("Could not close parameter.csv file", e); } - importContext.getPersitenceHelper().persistFishingOperationParameters(); + persitenceHelper.persistFishingOperationParameters(); } - protected void importCatches(GenericFormatImportContext importContext) { + protected void importCatches(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { if (log.isInfoEnabled()) { log.info("Import catch.csv file."); } - importContext.increments(t("tutti.genericFormat.import.catches")); + importContext.increments(t("tutti.service.genericFormat.import.catches")); try (CsvConsumerForCatch consumer = importContext.loadCatches()) { for (ImportRow<CatchRow> row : consumer) { - consumer.validateRow(row, importContext); - - GenericFormatImportOperationContext fishingOperationContext = importContext.getImportedFishingOperationContext(row.getBean()); - - consumer.prepareRowForPersist(fishingOperationContext, row); + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); } } catch (IOException e) { throw new ApplicationTechnicalException("Could not close catch.csv file", e); } - importContext.getPersitenceHelper().persistSpeciesBatches(); - importContext.getPersitenceHelper().persistBenthosBatches(); + persitenceHelper.persistSpeciesBatches(); + persitenceHelper.persistBenthosBatches(); } - protected void importAccidentalCatches(GenericFormatImportContext importContext) { + protected void importMarineLitters(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { if (log.isInfoEnabled()) { - log.info("Import accidentalCatch.csv file."); + log.info("Import marineLitter.csv file."); } - importContext.increments(t("tutti.genericFormat.import.accidentalCatches")); - - try (CsvConsumerForAccidentalCatch consumer = importContext.loadAccidentalCatches()) { - for (ImportRow<AccidentalCatchRow> row : consumer) { + importContext.increments(t("tutti.service.genericFormat.import.marineLitters")); - consumer.validateRow(row, importContext); + try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters()) { + for (ImportRow<MarineLitterRow> row : consumer) { - GenericFormatImportOperationContext fishingOperationContext = importContext.getImportedFishingOperationContext(row.getBean()); + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); - consumer.prepareRowForPersist(fishingOperationContext, row); + consumer.prepareRowForPersist(operationContext, row); } } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close accidentalCatch.csv file", e); + throw new ApplicationTechnicalException("Could not close marineLitter.csv file", e); } - importContext.getPersitenceHelper().persistAccidentalBatches(); + persitenceHelper.persistMarineLitterBatches(); } - protected void importIndividualObservations(GenericFormatImportContext importContext) { + protected void importIndividualObservations(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { if (log.isInfoEnabled()) { log.info("Import individualObservation.csv file."); } - importContext.increments(t("tutti.genericFormat.import.individualObservations")); + importContext.increments(t("tutti.service.genericFormat.import.individualObservations")); try (CsvConsumerForIndividualObservation consumer = importContext.loadIndividualObservations()) { for (ImportRow<IndividualObservationRow> row : consumer) { - consumer.validateRow(row, importContext); - - GenericFormatImportOperationContext fishingOperationContext = importContext.getImportedFishingOperationContext(row.getBean()); - - consumer.prepareRowForPersist(fishingOperationContext, row); + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); } } catch (IOException e) { throw new ApplicationTechnicalException("Could not close individualObservation.csv file", e); } - importContext.getPersitenceHelper().persistIndividualObservationBatches(); + persitenceHelper.persistIndividualObservationBatches(); } - protected void importMarineLitters(GenericFormatImportContext importContext) { + protected void importAccidentalCatches(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { if (log.isInfoEnabled()) { - log.info("Import marineLitter.csv file."); + log.info("Import accidentalCatch.csv file."); } - importContext.increments(t("tutti.genericFormat.import.marineLitters")); - - try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters()) { - for (ImportRow<MarineLitterRow> row : consumer) { - - consumer.validateRow(row, importContext); + importContext.increments(t("tutti.service.genericFormat.import.accidentalCatches")); - GenericFormatImportOperationContext fishingOperationContext = importContext.getImportedFishingOperationContext(row.getBean()); + try (CsvConsumerForAccidentalCatch consumer = importContext.loadAccidentalCatches()) { + for (ImportRow<AccidentalCatchRow> row : consumer) { - consumer.prepareRowForPersist(fishingOperationContext, row); + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); } } catch (IOException e) { - throw new ApplicationTechnicalException("Could not close marineLitter.csv file", e); + throw new ApplicationTechnicalException("Could not close accidentalCatch.csv file", e); } - importContext.getPersitenceHelper().persistMarineLitterBatches(); + persitenceHelper.persistAccidentalBatches(); + + } + + protected void doCleanWeights(GenericFormatImportContext importContext) { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext operationContext : cruiseContext.getFishingOperationContexts(null)) { + + progressionModel.increments(t("tutti.service.genericFormat.cleanWeights.fishingOperation", operationContext.getFishingOperationLabel())); + + weightCleaningService.cleanFishingOperation(operationContext.getFishingOperation().getId()); + + } + + } + }); + + } + + protected void doCheckCruises(GenericFormatImportContext importContext) { + + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + for (GenericFormatImportOperationContext operationContext : cruiseContext.getFishingOperationContexts(null)) { + + progressionModel.increments(t("tutti.service.genericFormat.checkWeights.fishingOperation", operationContext.getFishingOperationLabel())); + + Set<String> errors = checkFishingOperation(operationContext.getFishingOperation().getId()); + operationContext.addCheckErrors(errors); + + } + + } + }); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationDataContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationDataContext.java index 3066873..a4f9aa8 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationDataContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationDataContext.java @@ -1,5 +1,6 @@ package fr.ifremer.tutti.service.genericformat; +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; @@ -9,7 +10,6 @@ import fr.ifremer.tutti.service.TuttiValidationDataContextSupport; import java.util.ArrayList; import java.util.List; -import java.util.Set; /** * Created on 2/19/15. @@ -50,8 +50,9 @@ public class GenericFormatImportValidationDataContext extends TuttiValidationDat if (cruise != null) { - Set<FishingOperation> importedFishingOperations = importContext.getImportResult().getImportedFishingOperations(cruise); - result.addAll(importedFishingOperations); + GenericFormatImportCruiseContext cruiseContext = importContext.getCruiseContext(cruise); + Iterable<FishingOperation> importedFishingOperations = cruiseContext.getFishingOperations(); + Iterables.addAll(result, importedFishingOperations); if (fishingOperation != null) { result.remove(fishingOperation); } 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 3d1d129..28a313e 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 @@ -2,11 +2,13 @@ package fr.ifremer.tutti.service.genericformat; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.TuttiValidationDataContextSupport; import fr.ifremer.tutti.service.ValidationService; import fr.ifremer.tutti.service.csv.CsvComsumer; import fr.ifremer.tutti.service.genericformat.consumer.CruiseNotFoundException; import fr.ifremer.tutti.service.genericformat.consumer.FishingOperationNotFoundInCruiseException; +import fr.ifremer.tutti.service.genericformat.consumer.GearNotFoundInCruiseException; import fr.ifremer.tutti.service.genericformat.csv.RowWithCruiseContextSupport; import fr.ifremer.tutti.service.genericformat.csv.RowWithOperationContextSupport; import org.apache.commons.io.IOUtils; @@ -58,6 +60,7 @@ public class GenericFormatImportValidationHelper implements Closeable { try { Cruise cruise = fishingOperation.getCruise(); validationDataContext.setCruise(cruise); + validationDataContext.setFishingOperation(fishingOperation); NuitonValidatorResult nuitonValidatorResult = validationService.validateEditFishingOperation(fishingOperation); return nuitonValidatorResult; } finally { @@ -65,36 +68,58 @@ public class GenericFormatImportValidationHelper implements Closeable { } } - public <R extends RowWithCruiseContextSupport> Cruise getCruise(CsvComsumer<R, ?> consumer, ImportRow<R> row, GenericFormatImportContext importContext) { + public <R extends RowWithCruiseContextSupport> GenericFormatImportCruiseContext getCruise(CsvComsumer<R, ?> consumer, ImportRow<R> row, GenericFormatImportContext importContext) { R bean = row.getBean(); - Cruise cruise = importContext.getImportedCruise(bean.getCruise()); - if (cruise == null) { + GenericFormatImportCruiseContext cruiseContext = importContext.getCruiseContext(bean); + + if (cruiseContext == null) { consumer.addCheckError(row, new CruiseNotFoundException(bean.getCruise())); } else { + Cruise cruise = cruiseContext.getCruise(); bean.setCruise(cruise); + if (bean instanceof RowWithOperationContextSupport) { + ((RowWithOperationContextSupport) bean).getFishingOperation().setCruise(cruise); + + } } - return cruise; + return cruiseContext; + + } + + + + public <R extends RowWithCruiseContextSupport> Gear getGear(CsvComsumer<R, ?> consumer, GenericFormatImportContext importContext, ImportRow<R> row, Gear gear, int 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; } public <R extends RowWithOperationContextSupport> GenericFormatImportOperationContext getFishingOperationContext(CsvComsumer<R, ?> consumer, ImportRow<R> row, GenericFormatImportContext importContext) { - + GenericFormatImportOperationContext fishingOperationContext = null; - Cruise cruise = getCruise(consumer, row, importContext); + GenericFormatImportCruiseContext cruiseContext = getCruise(consumer, row, importContext); - if (cruise != null) { + if (cruiseContext != null) { R bean = row.getBean(); - fishingOperationContext = importContext.getImportedFishingOperationContext(bean); + fishingOperationContext = cruiseContext.getFishingOperationContext(bean); if (fishingOperationContext == null) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatServiceSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatServiceSupport.java new file mode 100644 index 0000000..e11c28e --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatServiceSupport.java @@ -0,0 +1,139 @@ +package fr.ifremer.tutti.service.genericformat; + +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +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.MarineLitterBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.service.AbstractTuttiService; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.TuttiServiceContext; +import fr.ifremer.tutti.service.catches.WeightComputingService; +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; +import org.nuiton.jaxx.application.ApplicationBusinessException; + +import java.util.LinkedHashSet; +import java.util.Set; + +/** + * Created on 2/22/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatServiceSupport extends AbstractTuttiService { + + /** Logger. */ + private static final Log log = LogFactory.getLog(GenericFormatServiceSupport.class); + + protected PersistenceService persistenceService; + + protected WeightComputingService weightComputingService; + + protected ReferentialTemporaryGearService referentialTemporaryGearService; + + protected ReferentialTemporaryPersonService referentialTemporaryPersonService; + + protected ReferentialTemporarySpeciesService referentialTemporarySpeciesService; + + protected ReferentialTemporaryVesselService referentialTemporaryVesselService; + + protected ProtocolImportExportService protocolImportExportService; + + protected Decorator<FishingOperation> fishingOperationDecorator; + + protected Decorator<Cruise> cruiseDecorator; + + @Override + public void setServiceContext(TuttiServiceContext context) { + + super.setServiceContext(context); + persistenceService = getService(PersistenceService.class); + weightComputingService = getService(WeightComputingService.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); + fishingOperationDecorator = decoratorService.getDecoratorByType(FishingOperation.class); + + } + + protected Set<String> checkFishingOperation(String fishingOperationId) { + + if (log.isDebugEnabled()) { + log.debug("Will check operation: " + fishingOperationId); + } + + Set<String> errors = new LinkedHashSet<>(); + + boolean withCatchBatch = persistenceService.isFishingOperationWithCatchBatch(fishingOperationId); + + if (!withCatchBatch) { + + if (log.isWarnEnabled()) { + log.warn("Skip fishing operation " + fishingOperationId + " since no catchBatch associated."); + } + + } else { + + BatchContainer<SpeciesBatch> rootSpeciesBatch; + try { + rootSpeciesBatch = weightComputingService.getComputedSpeciesBatches(fishingOperationId); + + } catch (ApplicationBusinessException e) { + errors.add(e.getMessage()); + rootSpeciesBatch = persistenceService.getRootSpeciesBatch(fishingOperationId, false); + } + + BatchContainer<BenthosBatch> rootBenthosBatch; + try { + rootBenthosBatch = weightComputingService.getComputedBenthosBatches(fishingOperationId); + + } catch (ApplicationBusinessException e) { + errors.add(e.getMessage()); + rootBenthosBatch = persistenceService.getRootBenthosBatch(fishingOperationId, false); + } + + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(fishingOperationId); + + BatchContainer<MarineLitterBatch> rootMarineLitterBatch; + try { + Float weight = catchBatch == null ? null : catchBatch.getMarineLitterTotalWeight(); + rootMarineLitterBatch = weightComputingService.getComputedMarineLitterBatches(fishingOperationId, weight); + + } catch (ApplicationBusinessException e) { + errors.add(e.getMessage()); + rootMarineLitterBatch = persistenceService.getRootMarineLitterBatch(fishingOperationId); + } + + try { + if (catchBatch != null) { + weightComputingService.computeCatchBatchWeights(catchBatch, + rootSpeciesBatch, + rootBenthosBatch, + rootMarineLitterBatch); + } + } catch (ApplicationBusinessException e) { + errors.add(e.getMessage()); + } + } + + return errors; + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java index 92efdc0..fd96423 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java @@ -1,6 +1,7 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.base.Predicate; +import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; @@ -15,7 +16,6 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.PersistenceService; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; @@ -56,299 +56,343 @@ public class GenericformatImportPersitenceHelper { log.info("Persist cruise: " + cruiseDecorator.toString(cruise)); } Cruise savedCruise = persistenceService.createCruise(cruise); - importContext.getImportResult().addImportedCruise(savedCruise); + importContext.addImportedCruise(savedCruise); } public void persistGearCaracteristics() { - Set<Cruise> cruises = importContext.getImportResult().getImportedCruises(); + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - for (Cruise cruise : cruises) { + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - for (Gear gear : cruise.getGear()) { + if (cruiseContext.withGearCaracteristics()) { - CaracteristicMap caracteristics = gear.getCaracteristics(); - if (MapUtils.isNotEmpty(caracteristics)) { + 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); - if (log.isInfoEnabled()) { - log.info("Persist " + caracteristics.size() + " gear caracteristics for gear: " + gear.getName() + " for cruise: " + cruiseDecorator.toString(cruise)); } - persistenceService.saveGearCaracteristics(gear, cruise); } } - } + }); } - public FishingOperation persistFishingOperation(FishingOperation fishingOperation) { + public void persistFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch) { if (log.isInfoEnabled()) { log.info("Persist fishing Operation: " + fishingOperationDecorator.toString(fishingOperation) + " for cruise: " + cruiseDecorator.toString(fishingOperation.getCruise())); } - FishingOperation savedFishingOperation = persistenceService.createFishingOperation(fishingOperation); - importContext.addImportedFishingOperation(savedFishingOperation); + FishingOperation createdFishingOperation = persistenceService.createFishingOperation(fishingOperation); + catchBatch.setFishingOperation(createdFishingOperation); - return savedFishingOperation; + CatchBatch createdCatchBatch = persistenceService.createCatchBatch(catchBatch); - } - - public void persistCatchBatch(CatchBatch catchBatch) { - - if (log.isInfoEnabled()) { - log.info("Persist catchBatch of fishing Operation: " + fishingOperationDecorator.toString(catchBatch.getFishingOperation()) + " for cruise: " + cruiseDecorator.toString(catchBatch.getFishingOperation().getCruise())); - } - - persistenceService.createCatchBatch(catchBatch); + importContext.addImportedFishingOperation(createdFishingOperation, createdCatchBatch); } public void persistFishingOperationParameters() { - Iterable<GenericFormatImportOperationContext> fishingOperationContexts = importContext.getImportedFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + @Override - public boolean apply(GenericFormatImportOperationContext input) { - return input.withGearFeatures() || input.withVesselFeatures(); - } - }); + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { + Iterable<GenericFormatImportOperationContext> fishingOperationContexts = cruiseContext.getFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { + @Override + public boolean apply(GenericFormatImportOperationContext input) { + return input.withGearFeatures() || input.withVesselFeatures(); + } + }); - FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { - if (fishingOperationContext.withGearFeatures()) { + FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); - CaracteristicMap gearUseFeatures = fishingOperationContext.getFishinOperationGearUseFeatures(); - fishingOperation.setGearUseFeatures(gearUseFeatures); - if (log.isInfoEnabled()) { - log.info("Persist " + gearUseFeatures.size() + " gear use features of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperation.getCruise())); - } + if (fishingOperationContext.withGearFeatures()) { - } + CaracteristicMap gearUseFeatures = fishingOperationContext.getGearUseFeatures(); + fishingOperation.setGearUseFeatures(gearUseFeatures); + if (log.isInfoEnabled()) { + log.info("Persist " + gearUseFeatures.size() + " gear use features of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseContext.getCruiseLabel()); + } - if (fishingOperationContext.withVesselFeatures()) { + } - CaracteristicMap vesselUseFeatures = fishingOperationContext.getFishinOperationVesselUseFeatures(); - fishingOperation.setVesselUseFeatures(vesselUseFeatures); - if (log.isInfoEnabled()) { - log.info("Persist " + vesselUseFeatures.size() + " vessel use features of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperation.getCruise())); - } + if (fishingOperationContext.withVesselFeatures()) { - } + CaracteristicMap vesselUseFeatures = fishingOperationContext.getVesselUseFeatures(); + fishingOperation.setVesselUseFeatures(vesselUseFeatures); + if (log.isInfoEnabled()) { + log.info("Persist " + vesselUseFeatures.size() + " vessel use features of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseContext.getCruiseLabel()); + } + + } - persistenceService.saveFishingOperation(fishingOperation); + persistenceService.saveFishingOperation(fishingOperation); - } + } + } + }); } public void persistMarineLitterBatches() { - Iterable<GenericFormatImportOperationContext> fishingOperationContexts = importContext.getImportedFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + @Override - public boolean apply(GenericFormatImportOperationContext input) { - return input.withMarineLitterBatches(); - } - }); + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { + Iterable<GenericFormatImportOperationContext> fishingOperationContexts = cruiseContext.getFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { + @Override + public boolean apply(GenericFormatImportOperationContext input) { + return input.withMarineLitterBatches(); + } + }); - FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { + +// 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 " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperation.getCruise())); - } - //FIXME Does not work (all batches are persisted, but the last one only displayed later in application) + Collection<MarineLitterBatch> marineLitterBatches = fishingOperationContext.getMarineLitterBatches(); + if (log.isInfoEnabled()) { + log.info("Persist " + marineLitterBatches.size() + " marine litter(s) of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseContext.getCruiseLabel()); + } + //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) { - persistenceService.createMarineLitterBatch(marineLitterBatch); - } + for (MarineLitterBatch marineLitterBatch : marineLitterBatches) { + persistenceService.createMarineLitterBatch(marineLitterBatch); + } - } + } + + } + }); } public void persistAccidentalBatches() { - Iterable<GenericFormatImportOperationContext> fishingOperationContexts = importContext.getImportedFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + @Override - public boolean apply(GenericFormatImportOperationContext input) { - return input.withAccidentalBatches(); - } - }); + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { + + Iterable<GenericFormatImportOperationContext> fishingOperationContexts = cruiseContext.getFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { + @Override + public boolean apply(GenericFormatImportOperationContext input) { + return input.withAccidentalBatches(); + } + }); + + for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { - for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { + 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 " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseContext.getCruiseLabel()); + } + persistenceService.createAccidentalBatches(fishingOperationId, accidentalBatches); + + } - 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 " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperation.getCruise())); } - persistenceService.createAccidentalBatches(fishingOperationId, accidentalBatches); + }); - } } public void persistIndividualObservationBatches() { - Iterable<GenericFormatImportOperationContext> fishingOperationContexts = importContext.getImportedFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + @Override - public boolean apply(GenericFormatImportOperationContext input) { - return input.withIndividualObservationBatches(); - } - }); + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { + Iterable<GenericFormatImportOperationContext> fishingOperationContexts = cruiseContext.getFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { + @Override + public boolean apply(GenericFormatImportOperationContext input) { + return input.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 " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperation.getCruise())); - } - persistenceService.createIndividualObservationBatches(fishingOperationId, individualObservationBatches); + for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { - } + 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 " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseContext.getCruiseLabel()); + } + persistenceService.createIndividualObservationBatches(fishingOperationId, individualObservationBatches); + + } + + } + }); } public void persistSpeciesBatches() { - Iterable<GenericFormatImportOperationContext> fishingOperationContexts = importContext.getImportedFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { + @Override - public boolean apply(GenericFormatImportOperationContext input) { - return input.withSpeciesBatches(true) || input.withSpeciesBatches(false); - } - }); + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { + Iterable<GenericFormatImportOperationContext> fishingOperationContexts = cruiseContext.getFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { + @Override + public boolean apply(GenericFormatImportOperationContext input) { + return input.withSpeciesBatches(true) || input.withSpeciesBatches(false); + } + }); - FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { - if (fishingOperationContext.withSpeciesBatches(true)) { + if (fishingOperationContext.withSpeciesBatches(true)) { - Collection<SpeciesBatch> batches = fishingOperationContext.getSpeciesBatches(true); - if (log.isInfoEnabled()) { - log.info("Persist " + batches.size() + " VRAC root species batch(es) of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperation.getCruise())); - } - persistSpeciesBatches(fishingOperationContext, batches, null); + Collection<SpeciesBatch> batches = fishingOperationContext.getSpeciesBatches(true); + if (log.isInfoEnabled()) { + log.info("Persist " + batches.size() + " VRAC root species batch(es) of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseContext.getCruiseLabel()); + } + 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 " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseContext.getCruiseLabel()); + } + 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 " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperation.getCruise())); } - persistSpeciesBatches(fishingOperationContext, batches, null); } - } + protected void persistSpeciesBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<SpeciesBatch> batches, String parentId) { - } + for (SpeciesBatch batch : batches) { - public void persistBenthosBatches() { + List<SpeciesBatchFrequency> frequencies = fishingOperationContext.getSpeciesFrequencies(batch); - Iterable<GenericFormatImportOperationContext> fishingOperationContexts = importContext.getImportedFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { - @Override - public boolean apply(GenericFormatImportOperationContext input) { - return input.withBenthosBatches(true) || input.withBenthosBatches(false); - } - }); + // reset temporary id to persist batch + batch.setId((Integer) null); + SpeciesBatch createdBatch = persistenceService.createSpeciesBatch(batch, parentId); - for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { + if (CollectionUtils.isNotEmpty(frequencies)) { - FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); + 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 (fishingOperationContext.withBenthosBatches(true)) { + } - Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(true); - if (log.isInfoEnabled()) { - log.info("Persist " + batches.size() + " VRAC benthos batch(es) of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperation.getCruise())); - } - persistBenthosBatches(fishingOperationContext, batches, null); + if (!batch.isChildBatchsEmpty()) { - } + persistSpeciesBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); - if (fishingOperationContext.withBenthosBatches(false)) { + } - Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(false); - if (log.isInfoEnabled()) { - log.info("Persist " + batches.size() + " HORS VRAC benthos batch(es) of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseDecorator.toString(fishingOperation.getCruise())); } - persistBenthosBatches(fishingOperationContext, batches, null); } - } + }); + } - protected void persistSpeciesBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<SpeciesBatch> batches, String parentId) { + public void persistBenthosBatches() { - for (SpeciesBatch batch : batches) { + importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { - List<SpeciesBatchFrequency> frequencies = fishingOperationContext.getSpeciesFrequencies(batch); + @Override + public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) { - // reset temporary id to persist batch - batch.setId((Integer) null); - SpeciesBatch createdBatch = persistenceService.createSpeciesBatch(batch, parentId); + Iterable<GenericFormatImportOperationContext> fishingOperationContexts = cruiseContext.getFishingOperationContexts(new Predicate<GenericFormatImportOperationContext>() { + @Override + public boolean apply(GenericFormatImportOperationContext input) { + return input.withBenthosBatches(true) || input.withBenthosBatches(false); + } + }); - if (CollectionUtils.isNotEmpty(frequencies)) { + for (GenericFormatImportOperationContext fishingOperationContext : fishingOperationContexts) { - 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 (fishingOperationContext.withBenthosBatches(true)) { - } + Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(true); + if (log.isInfoEnabled()) { + log.info("Persist " + batches.size() + " VRAC benthos batch(es) of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseContext.getCruiseLabel()); + } + persistBenthosBatches(fishingOperationContext, batches, null); - if (!batch.isChildBatchsEmpty()) { + } - persistSpeciesBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); + if (fishingOperationContext.withBenthosBatches(false)) { - } + Collection<BenthosBatch> batches = fishingOperationContext.getBenthosBatches(false); + if (log.isInfoEnabled()) { + log.info("Persist " + batches.size() + " HORS VRAC benthos batch(es) of " + fishingOperationContext.getFishingOperationLabel() + " for cruise: " + cruiseContext.getCruiseLabel()); + } + persistBenthosBatches(fishingOperationContext, batches, null); - } + } - } + } + } - protected void persistBenthosBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<BenthosBatch> batches, String parentId) { + protected void persistBenthosBatches(GenericFormatImportOperationContext fishingOperationContext, Collection<BenthosBatch> batches, String parentId) { - for (BenthosBatch batch : batches) { + for (BenthosBatch batch : batches) { - List<BenthosBatchFrequency> frequencies = fishingOperationContext.getBenthosFrequencies(batch); + List<BenthosBatchFrequency> frequencies = fishingOperationContext.getBenthosFrequencies(batch); - // reset temporary id to persist batch - batch.setId((Integer) null); + // reset temporary id to persist batch + batch.setId((Integer) null); - BenthosBatch createdBatch = persistenceService.createBenthosBatch(batch, parentId); + BenthosBatch createdBatch = persistenceService.createBenthosBatch(batch, parentId); - if (CollectionUtils.isNotEmpty(frequencies)) { + 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); + 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()) { - if (!batch.isChildBatchsEmpty()) { + persistBenthosBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); - persistBenthosBatches(fishingOperationContext, batch.getChildBatchs(), createdBatch.getId()); + } + } } - } + + }); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyExistException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyExistException.java index a2b6096..96fee25 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyExistException.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyExistException.java @@ -26,7 +26,7 @@ public class CruiseAlreadyExistException extends Exception { @Override public String getMessage() { - return t("tutti.genericFormat.import.error.cruiseAlreadyExist", cruise.getName()); + return t("tutti.service.genericFormat.import.error.cruiseAlreadyExist", cruise.getName()); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyImportedException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyImportedException.java index 13ca6d8..19e822a 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyImportedException.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseAlreadyImportedException.java @@ -26,7 +26,7 @@ public class CruiseAlreadyImportedException extends Exception { @Override public String getMessage() { - return t("tutti.genericFormat.import.error.cruiseAlreadyImported", cruise.getName()); + return t("tutti.service.genericFormat.import.error.cruiseAlreadyImported", cruise.getName()); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotFoundException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotFoundException.java index 2426dff..fc994b5 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotFoundException.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotFoundException.java @@ -26,6 +26,6 @@ public class CruiseNotFoundException extends Exception { @Override public String getMessage() { - return t("tutti.genericFormat.import.error.cruiseNotFound", cruise.getBeginDate(), cruise.getProgram().getName(), cruise.getSurveyPart()); + return t("tutti.service.genericFormat.import.error.cruiseNotFound", cruise.getBeginDate(), cruise.getProgram().getName(), cruise.getSurveyPart()); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotValidException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotValidException.java index 2dee85d..15f93ff 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotValidException.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CruiseNotValidException.java @@ -50,7 +50,7 @@ public class CruiseNotValidException extends Exception { builder.append(t("tutti.warning.messages", Joiner.on("\n-").join(warningMessage))); } - String message = t("tutti.genericFormat.import.error.cruiseNotValid", builder.toString()); + String message = t("tutti.service.genericFormat.import.error.cruiseNotValid", builder.toString()); return message; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java index 40cdf14..9d2ac1f 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 @@ -33,13 +33,15 @@ public class CsvConsumerForAccidentalCatch extends CsvComsumer<AccidentalCatchRo super(file, AccidentalCatchModel.forImport(separator, parserFactory)); } - public void validateRow(ImportRow<AccidentalCatchRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportOperationContext validateRow(ImportRow<AccidentalCatchRow> row, GenericFormatImportContext importContext) { + + GenericFormatImportOperationContext operationContext = null; if (row.isValid()) { - GenericFormatImportOperationContext fishingOperationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (fishingOperationContext != null) { + if (operationContext != null) { //TODO checks! AccidentalCatchRow bean = row.getBean(); @@ -70,13 +72,15 @@ public class CsvConsumerForAccidentalCatch extends CsvComsumer<AccidentalCatchRo reportError(row); + return operationContext; + } - public void prepareRowForPersist(GenericFormatImportOperationContext fishingOperationContext, ImportRow<AccidentalCatchRow> row) { + public void prepareRowForPersist(GenericFormatImportOperationContext operationContext, ImportRow<AccidentalCatchRow> row) { AccidentalCatchRow bean = row.getBean(); Integer batchId = bean.getBatchId(); - AccidentalBatch batch = fishingOperationContext.getAccidentalBatchById(batchId); + AccidentalBatch batch = operationContext.getAccidentalBatchById(batchId); if (batch == null) { if (log.isInfoEnabled()) { @@ -84,11 +88,11 @@ public class CsvConsumerForAccidentalCatch extends CsvComsumer<AccidentalCatchRo } batch = AccidentalBatchs.newAccidentalBatch(); - batch.setFishingOperation(fishingOperationContext.getFishingOperation()); + batch.setFishingOperation(operationContext.getFishingOperation()); batch.setCaracteristics(new CaracteristicMap()); batch.setComment(bean.getComment()); batch.setSpecies(bean.getSpecies()); - fishingOperationContext.addAccidentalBatch(batchId, batch); + operationContext.addAccidentalBatch(batchId, batch); } 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 5efda23..eaa02e3 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 @@ -56,13 +56,15 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { } - public void validateRow(ImportRow<CatchRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportOperationContext validateRow(ImportRow<CatchRow> row, GenericFormatImportContext importContext) { + + GenericFormatImportOperationContext operationContext = null; if (row.isValid()) { - GenericFormatImportOperationContext fishingOperationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (fishingOperationContext != null) { + if (operationContext != null) { //TODO checks! CatchRow bean = row.getBean(); @@ -83,9 +85,11 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { reportError(row); + return operationContext; + } - public void prepareRowForPersist(GenericFormatImportOperationContext fishingOperationContext, ImportRow<CatchRow> row) { + public void prepareRowForPersist(GenericFormatImportOperationContext operationContext, ImportRow<CatchRow> row) { CatchRow bean = row.getBean(); @@ -104,22 +108,22 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { if (bean.isBenthos()) { - prepareBenthosRowForPersist(fishingOperationContext, bean, withFrequency); + prepareBenthosRowForPersist(operationContext, bean, withFrequency); } else { - prepareSpeciesRowForPersist(fishingOperationContext, bean, withFrequency); + prepareSpeciesRowForPersist(operationContext, bean, withFrequency); } } - protected void prepareSpeciesRowForPersist(GenericFormatImportOperationContext fishingOperationContext, CatchRow bean, boolean withFrequency) { + protected void prepareSpeciesRowForPersist(GenericFormatImportOperationContext operationContext, CatchRow bean, boolean withFrequency) { Species species = bean.getSpecies(); boolean vrac = bean.isVrac(); - SpeciesBatch batch = fishingOperationContext.getSpeciesBatch(vrac, species.getReferenceTaxonId()); + SpeciesBatch batch = operationContext.getSpeciesBatch(vrac, species.getReferenceTaxonId()); if (batch == null) { @@ -128,13 +132,13 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { batch = SpeciesBatchs.newSpeciesBatch(); batch.setId(getNextBatchId()); batch.setSpecies(species); - batch.setFishingOperation(fishingOperationContext.getFishingOperation()); + batch.setFishingOperation(operationContext.getFishingOperation()); if (log.isInfoEnabled()) { - log.info("Create species root batch (" + (vrac ? "VRAC" : "HORS VRAC") + ") batch species: " + species.getName() + " for " + fishingOperationContext.getFishingOperationLabel()); + log.info("Create species root batch (" + (vrac ? "VRAC" : "HORS VRAC") + ") batch species: " + species.getName() + " for " + operationContext.getFishingOperationLabel()); } - fishingOperationContext.addSpeciesBatch(vrac, batch); + operationContext.addSpeciesBatch(vrac, batch); } @@ -153,7 +157,7 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { log.info("Create species frequency " + frequency.getNumber() + " for batch: " + batch.getSpecies().getName() + " - " + batch.getSampleCategoryId() + " - " + batch.getSampleCategoryValue()); } - fishingOperationContext.addSpeciesFrequency(batch, frequency); + operationContext.addSpeciesFrequency(batch, frequency); } else { @@ -162,12 +166,12 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { } } - protected void prepareBenthosRowForPersist(GenericFormatImportOperationContext fishingOperationContext, CatchRow bean, boolean withFrequency) { + protected void prepareBenthosRowForPersist(GenericFormatImportOperationContext operationContext, CatchRow bean, boolean withFrequency) { Species species = bean.getSpecies(); boolean vrac = bean.isVrac(); - BenthosBatch batch = fishingOperationContext.getBenthosBatch(vrac, species.getReferenceTaxonId()); + BenthosBatch batch = operationContext.getBenthosBatch(vrac, species.getReferenceTaxonId()); if (batch == null) { @@ -176,13 +180,13 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { batch = BenthosBatchs.newBenthosBatch(); batch.setId(getNextBatchId()); batch.setSpecies(species); - batch.setFishingOperation(fishingOperationContext.getFishingOperation()); + batch.setFishingOperation(operationContext.getFishingOperation()); if (log.isInfoEnabled()) { - log.info("Create benthos root batch (" + (vrac ? "VRAC" : "HORS VRAC") + ") batch species: " + species.getName() + " for " + fishingOperationContext.getFishingOperationLabel()); + log.info("Create benthos root batch (" + (vrac ? "VRAC" : "HORS VRAC") + ") batch species: " + species.getName() + " for " + operationContext.getFishingOperationLabel()); } - fishingOperationContext.addBenthosBatch(vrac, batch); + operationContext.addBenthosBatch(vrac, batch); } @@ -201,7 +205,7 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { log.info("Create benthos frequency " + frequency.getNumber() + " for batch: " + batch.getSpecies().getName() + " - " + batch.getSampleCategoryId() + " - " + batch.getSampleCategoryValue()); } - fishingOperationContext.addBenthosFrequency(batch, frequency); + operationContext.addBenthosFrequency(batch, frequency); } else { 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 5a815aa..c051f76 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java @@ -1,12 +1,11 @@ package fr.ifremer.tutti.service.genericformat.consumer; -import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.csv.CaracteristicValueParseException; import fr.ifremer.tutti.service.csv.CsvComsumer; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.GenericFormatImportValidationHelper; import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicModel; @@ -28,26 +27,27 @@ public class CsvConsumerForGearCaracteristic extends CsvComsumer<GearCaracterist super(file, GearCaracteristicModel.forImport(separator, parserFactory)); } - public void validateRow(ImportRow<GearCaracteristicRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportCruiseContext validateRow(ImportRow<GearCaracteristicRow> row, GenericFormatImportContext importContext) { + + GenericFormatImportCruiseContext cruiseContext = null; if (row.isValid()) { GenericFormatImportValidationHelper validationHelper = importContext.getValidationHelper(); - Cruise cruise = validationHelper.getCruise(this, row, importContext); + cruiseContext = validationHelper.getCruise(this, row, importContext); - if (cruise != null) { + if (cruiseContext != null) { GearCaracteristicRow bean = row.getBean(); Gear gear = bean.getGear(); int rankOrder = bean.getRankOrder(); - Gear cruiseGear = importContext.getGear(cruise, gear, rankOrder); - if (cruiseGear == null) { - addCheckError(row, new GearNotFoundInCruiseException(cruise, gear, rankOrder)); + Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); + if (cruiseGear != null) { + bean.setGear(cruiseGear); } - bean.setGear(cruiseGear); //TODO Use a validator ? Caracteristic caracteristic = bean.getCaracteristic(); @@ -75,18 +75,15 @@ public class CsvConsumerForGearCaracteristic extends CsvComsumer<GearCaracterist reportError(row); + return cruiseContext; + } - public void prepareRowForPersist(ImportRow<GearCaracteristicRow> row) { + public void prepareRowForPersist(GenericFormatImportCruiseContext cruiseContext, ImportRow<GearCaracteristicRow> row) { GearCaracteristicRow bean = row.getBean(); - CaracteristicMap caracteristics = bean.getGear().getCaracteristics(); - if (caracteristics == null) { - caracteristics = new CaracteristicMap(); - bean.getGear().setCaracteristics(caracteristics); - } - caracteristics.put(bean.getCaracteristic(), bean.getValue()); + cruiseContext.addGearCaracteristic(bean.getGear(), bean.getCaracteristic(), bean.getValue()); } 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 b6481bc..8b59fd5 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 @@ -33,13 +33,15 @@ public class CsvConsumerForIndividualObservation extends CsvComsumer<IndividualO super(file, IndividualObservationModel.forImport(separator, parserFactory)); } - public void validateRow(ImportRow<IndividualObservationRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportOperationContext validateRow(ImportRow<IndividualObservationRow> row, GenericFormatImportContext importContext) { + + GenericFormatImportOperationContext operationContext = null; if (row.isValid()) { - GenericFormatImportOperationContext fishingOperationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (fishingOperationContext != null) { + if (operationContext != null) { //TODO checks! IndividualObservationRow bean = row.getBean(); @@ -70,13 +72,15 @@ public class CsvConsumerForIndividualObservation extends CsvComsumer<IndividualO reportError(row); + return operationContext; + } - public void prepareRowForPersist(GenericFormatImportOperationContext fishingOperationContext, ImportRow<IndividualObservationRow> row) { + public void prepareRowForPersist(GenericFormatImportOperationContext operationContext, ImportRow<IndividualObservationRow> row) { IndividualObservationRow bean = row.getBean(); Integer batchId = bean.getBatchId(); - IndividualObservationBatch batch = fishingOperationContext.getIndividualObservationBatchesById(batchId); + IndividualObservationBatch batch = operationContext.getIndividualObservationBatchesById(batchId); if (batch == null) { if (log.isInfoEnabled()) { @@ -84,17 +88,16 @@ public class CsvConsumerForIndividualObservation extends CsvComsumer<IndividualO } batch = IndividualObservationBatchs.newIndividualObservationBatch(); - batch.setFishingOperation(fishingOperationContext.getFishingOperation()); + batch.setFishingOperation(operationContext.getFishingOperation()); batch.setCaracteristics(new CaracteristicMap()); batch.setComment(bean.getComment()); batch.setSpecies(bean.getSpecies()); - fishingOperationContext.addIndividualObservationBatch(batchId, batch); + operationContext.addIndividualObservationBatch(batchId, batch); } batch.getCaracteristics().put(bean.getCaracteristic(), bean.getCaracteristicValue()); - } } \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java index 08ea266..d7eac16 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 @@ -23,13 +23,15 @@ public class CsvConsumerForMarineLitter extends CsvComsumer<MarineLitterRow, Mar super(file, MarineLitterModel.forImport(separator, parserFactory)); } - public void validateRow(ImportRow<MarineLitterRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportOperationContext validateRow(ImportRow<MarineLitterRow> row, GenericFormatImportContext importContext) { + + GenericFormatImportOperationContext operationContext = null; if (row.isValid()) { - GenericFormatImportOperationContext fishingOperationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (fishingOperationContext != null) { + if (operationContext != null) { //TODO checks! MarineLitterRow bean = row.getBean(); @@ -40,14 +42,16 @@ public class CsvConsumerForMarineLitter extends CsvComsumer<MarineLitterRow, Mar reportError(row); + return operationContext; + } - public void prepareRowForPersist(GenericFormatImportOperationContext fishingOperationContext, ImportRow<MarineLitterRow> row) { + public void prepareRowForPersist(GenericFormatImportOperationContext operationContext, ImportRow<MarineLitterRow> row) { MarineLitterRow bean = row.getBean(); MarineLitterBatch marineLitterBatch = bean.getMarineLitterBatch(); - marineLitterBatch.setFishingOperation(fishingOperationContext.getFishingOperation()); - fishingOperationContext.addMarineLitterBatch(marineLitterBatch); + marineLitterBatch.setFishingOperation(operationContext.getFishingOperation()); + operationContext.addMarineLitterBatch(marineLitterBatch); } 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 0cbef2f..3a4619e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java @@ -1,11 +1,11 @@ package fr.ifremer.tutti.service.genericformat.consumer; 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.referential.Gear; import fr.ifremer.tutti.service.csv.CsvComsumer; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.GenericFormatImportValidationHelper; import fr.ifremer.tutti.service.genericformat.csv.OperationModel; @@ -28,36 +28,35 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation super(file, OperationModel.forImport(separator, parserFactory)); } - public void validateRow(ImportRow<OperationRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportCruiseContext validateRow(ImportRow<OperationRow> row, GenericFormatImportContext importContext) { + + GenericFormatImportCruiseContext cruiseContext = null; if (row.isValid()) { GenericFormatImportValidationHelper validationHelper = importContext.getValidationHelper(); - Cruise cruise = validationHelper.getCruise(this, row, importContext); + cruiseContext = validationHelper.getCruise(this, row, importContext); - if (cruise != null) { + if (cruiseContext != null) { OperationRow bean = row.getBean(); FishingOperation fishingOperation = bean.getFishingOperation(); - if (importContext.isFishingOperationAlreadyImported(fishingOperation)) { + if (cruiseContext.isFishingOperationAlreadyImported(bean)) { addCheckError(row, new FishingOperationAlreadyImportedException(fishingOperation)); } else { - fishingOperation.setCruise(cruise); - Gear gear = bean.getGear(); int rankOrder = bean.getGearRankOrder(); - Gear cruiseGear = importContext.getGear(cruise, gear, rankOrder); - if (cruiseGear == null) { - addCheckError(row, new GearNotFoundInCruiseException(cruise, gear, rankOrder)); + Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); + if (cruiseGear != null) { + bean.setGear(cruiseGear); } - bean.setGear(cruiseGear); NuitonValidatorResult validatorResult = validationHelper.validateFishingOperation(fishingOperation); @@ -76,9 +75,11 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation reportError(row); + return cruiseContext; + } - public void prepareRowForPersist(ImportRow<OperationRow> row) { + public void prepareRowForPersist(GenericFormatImportCruiseContext cruiseContext, ImportRow<OperationRow> row) { OperationRow bean = row.getBean(); 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 8d793bb..93fefe3 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 @@ -25,17 +25,20 @@ public class CsvConsumerForParameter extends CsvComsumer<ParameterRow, Parameter super(file, ParameterModel.forImport(separator, parserFactory)); } - public void validateRow(ImportRow<ParameterRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportOperationContext validateRow(ImportRow<ParameterRow> row, GenericFormatImportContext importContext) { + + GenericFormatImportOperationContext operationContext = null; if (row.isValid()) { - GenericFormatImportOperationContext fishingOperationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); - if (fishingOperationContext != null) { + operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext); + + if (operationContext != null) { ParameterRow bean = row.getBean(); - bean.setFishingOperation(fishingOperationContext.getFishingOperation()); + bean.setFishingOperation(operationContext.getFishingOperation()); //TODO Use a validator ? if (bean.getParameterType() == null) { @@ -70,9 +73,11 @@ public class CsvConsumerForParameter extends CsvComsumer<ParameterRow, Parameter reportError(row); + return operationContext; + } - public void prepareRowForPersist(GenericFormatImportOperationContext importedFishingOperation, ImportRow<ParameterRow> row) { + public void prepareRowForPersist(GenericFormatImportOperationContext operationContext, ImportRow<ParameterRow> row) { ParameterRow bean = row.getBean(); @@ -82,12 +87,12 @@ public class CsvConsumerForParameter extends CsvComsumer<ParameterRow, Parameter case GEAR: - importedFishingOperation.addGearUseFeature(bean.getCaracteristic(), bean.getValue()); + operationContext.addGearUseFeature(bean.getCaracteristic(), bean.getValue()); break; case VESSEL: - importedFishingOperation.addVesselUseFeature(bean.getCaracteristic(), bean.getValue()); + operationContext.addVesselUseFeature(bean.getCaracteristic(), bean.getValue()); break; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java index ad09359..272d6f8 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java @@ -38,7 +38,7 @@ public class CsvConsumerForSampleCategory extends CsvComsumer<SampleCategoryRow, if (nbSampling < categoryIndex) { // too much categories - addCheckError(row, new IllegalStateException(t("tutti.genericFormat.import.sampleCategoryModel.error.tooMuchCategories"))); + addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.tooMuchCategories"))); } else { @@ -49,22 +49,22 @@ public class CsvConsumerForSampleCategory extends CsvComsumer<SampleCategoryRow, if (StringUtils.isBlank(code)) { - addCheckError(row, new IllegalStateException(t("tutti.genericFormat.import.sampleCategoryModel.error.noCode"))); + addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.noCode"))); } else { Caracteristic caracteristic = bean.getCaracteristic(); if (caracteristic == null) { - addCheckError(row, new IllegalStateException(t("tutti.genericFormat.import.sampleCategoryModel.error.noCaracteristic"))); + addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.noCaracteristic"))); } else if (!Objects.equals(categoryEntry.getCategoryId(), caracteristic.getIdAsInt())) { - addCheckError(row, new IllegalStateException(t("tutti.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching", categoryEntry.getCategoryId(), caracteristic.getIdAsInt()))); + addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching", categoryEntry.getCategoryId(), caracteristic.getIdAsInt()))); } else if (!Objects.equals(categoryEntry.getCode(), code)) { - addCheckError(row, new IllegalStateException(t("tutti.genericFormat.import.sampleCategoryModel.error.codeNotMatching", categoryEntry.getCode(), code))); + addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.codeNotMatching", categoryEntry.getCode(), code))); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationAlreadyImportedException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationAlreadyImportedException.java index 66a850d..69d9176 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationAlreadyImportedException.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationAlreadyImportedException.java @@ -26,7 +26,7 @@ public class FishingOperationAlreadyImportedException extends Exception { @Override public String getMessage() { - return t("tutti.genericFormat.import.error.fishingOperationAlreadyImported", fishingOperation.getStationNumber(), fishingOperation.getFishingOperationNumber(), fishingOperation.getMultirigAggregation(), fishingOperation.getGearShootingStartDate(), fishingOperation.getCruise().getName()); + return t("tutti.service.genericFormat.import.error.fishingOperationAlreadyImported", fishingOperation.getStationNumber(), fishingOperation.getFishingOperationNumber(), fishingOperation.getMultirigAggregation(), fishingOperation.getGearShootingStartDate(), fishingOperation.getCruise().getName()); } } \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationNotFoundInCruiseException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationNotFoundInCruiseException.java index 01679c4..d657fce 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationNotFoundInCruiseException.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationNotFoundInCruiseException.java @@ -26,7 +26,7 @@ public class FishingOperationNotFoundInCruiseException extends Exception { @Override public String getMessage() { - return t("tutti.genericFormat.import.error.fishingOperationNotFoundInCruise", fishingOperation.getStationNumber(), fishingOperation.getFishingOperationNumber(), fishingOperation.getMultirigAggregation(), fishingOperation.getGearShootingStartDate(), fishingOperation.getCruise().getName()); + return t("tutti.service.genericFormat.import.error.fishingOperationNotFoundInCruise", fishingOperation.getStationNumber(), fishingOperation.getFishingOperationNumber(), fishingOperation.getMultirigAggregation(), fishingOperation.getGearShootingStartDate(), fishingOperation.getCruise().getName()); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationNotValidException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationNotValidException.java index 53ba30d..f159f1e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationNotValidException.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/FishingOperationNotValidException.java @@ -50,7 +50,7 @@ public class FishingOperationNotValidException extends Exception { builder.append("\n").append(t("tutti.warning.messages", Joiner.on("\n-").join(warningMessage))); } - String message = t("tutti.genericFormat.import.error.fishingOperationNotValid", builder.toString()); + String message = t("tutti.service.genericFormat.import.error.fishingOperationNotValid", builder.toString()); return message; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/GearNotFoundInCruiseException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/GearNotFoundInCruiseException.java index 0565519..5dd59e5 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/GearNotFoundInCruiseException.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/GearNotFoundInCruiseException.java @@ -41,7 +41,7 @@ public class GearNotFoundInCruiseException extends Exception { @Override public String getMessage() { - return t("tutti.genericFormat.import.error.gearNotFoundInCruise", gear.getName(), rankOrder, cruise.getName()); + return t("tutti.service.genericFormat.import.error.gearNotFoundInCruise", gear.getName(), rankOrder, cruise.getName()); } } 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 56d904d..7e0d908 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 @@ -12,38 +12,6 @@ tutti.error.benthos.not.in.protocol= tutti.error.messages= tutti.error.species.not.in.protocol= tutti.fatal.messages= -tutti.genericFormat.import.accidentalCatches= -tutti.genericFormat.import.catches= -tutti.genericFormat.import.cruises= -tutti.genericFormat.import.error.cruiseAlreadyExist= -tutti.genericFormat.import.error.cruiseAlreadyImported= -tutti.genericFormat.import.error.cruiseNotFound= -tutti.genericFormat.import.error.cruiseNotValid= -tutti.genericFormat.import.error.fishingOperationAlreadyImported= -tutti.genericFormat.import.error.fishingOperationNotFoundInCruise= -tutti.genericFormat.import.error.fishingOperationNotValid= -tutti.genericFormat.import.error.gearNotFoundInCruise= -tutti.genericFormat.import.gearCaracteristics= -tutti.genericFormat.import.individualObservations= -tutti.genericFormat.import.marineLitters= -tutti.genericFormat.import.operations= -tutti.genericFormat.import.parameters= -tutti.genericFormat.import.protocol= -tutti.genericFormat.import.sampleCategoryModel= -tutti.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching= -tutti.genericFormat.import.sampleCategoryModel.error.codeNotMatching= -tutti.genericFormat.import.sampleCategoryModel.error.missingCategories= -tutti.genericFormat.import.sampleCategoryModel.error.noCaracteristic= -tutti.genericFormat.import.sampleCategoryModel.error.noCode= -tutti.genericFormat.import.sampleCategoryModel.error.tooMuchCategories= -tutti.genericFormat.import.temporaryGears= -tutti.genericFormat.import.temporaryPersons= -tutti.genericFormat.import.temporarySpecies= -tutti.genericFormat.import.temporaryVessels= -tutti.genericFormat.importError.archiveNotSane= -tutti.genericFormat.load.protocol= -tutti.genericFormat.reuse.protocol= -tutti.genericformat.importError.missArchiveFile= tutti.io.mkDir.error= tutti.pdf.export.missing.species.code= tutti.property.attachment= @@ -116,38 +84,6 @@ tutti.service.csv.parse.qualitativeValueError= tutti.service.cvs.format.error= tutti.service.cvs.mandatory.value= tutti.service.error.species.null= -tutti.service.export.accidentalCatch.error= -tutti.service.export.catches.error= -tutti.service.export.closeContext.error= -tutti.service.export.context.error= -tutti.service.export.gearCaracteristics.error= -tutti.service.export.individualObservations.error= -tutti.service.export.invalid.cruise= -tutti.service.export.invalid.fishingOperation= -tutti.service.export.marineLitters.error= -tutti.service.export.operation.error= -tutti.service.export.operations.error= -tutti.service.export.parameters.error= -tutti.service.export.species.error= -tutti.service.export.survey.error= -tutti.service.export.zip.error= -tutti.service.exportCruise.buildZip= -tutti.service.exportCruise.checkCruise= -tutti.service.exportCruise.checkCruiseFishingOperation= -tutti.service.exportCruise.exportAccidentalCatches= -tutti.service.exportCruise.exportCatch= -tutti.service.exportCruise.exportCatches= -tutti.service.exportCruise.exportGearCaracteristics= -tutti.service.exportCruise.exportIndividualObservation= -tutti.service.exportCruise.exportIndividualObservations= -tutti.service.exportCruise.exportMarineLitter= -tutti.service.exportCruise.exportMarineLitters= -tutti.service.exportCruise.exportOperation= -tutti.service.exportCruise.exportOperations= -tutti.service.exportCruise.exportParameter= -tutti.service.exportCruise.exportParameters= -tutti.service.exportCruise.exportSpecies= -tutti.service.exportCruise.exportSurvey= tutti.service.exportPdf.error= tutti.service.exportProgram.exportSpecies= tutti.service.exportSumatra.error.species.null= @@ -183,20 +119,88 @@ tutti.service.exportSumatraV2.header.species=Species tutti.service.exportSumatraV2.header.station=Station number tutti.service.exportSumatraV2.header.totalWeight=TotalWeight tutti.service.exportSumatraV2.header.year=Year -tutti.service.genericExport.buildZip= -tutti.service.genericExport.exportProtocol= -tutti.service.genericExport.exportSampleCategoyModel= -tutti.service.genericExport.exportSpecies= -tutti.service.genericExport.exportTemporaryGear= -tutti.service.genericExport.exportTemporaryPerson= -tutti.service.genericExport.exportTemporarySpecies= -tutti.service.genericExport.exportTemporaryVessel= -tutti.service.genericExport.skipProtocolExport= -tutti.service.genericExport.skipTemporaryGearExport= -tutti.service.genericExport.skipTemporaryPersonExport= -tutti.service.genericExport.skipTemporarySpeciesExport= -tutti.service.genericExport.skipTemporaryVesselExport= -tutti.service.genericExport.zip.error= +tutti.service.genericFormat.checkCruise= +tutti.service.genericFormat.checkCruiseFishingOperation= +tutti.service.genericFormat.cleanWeights.fishingOperation= +tutti.service.genericFormat.export.accidentalCatch.error= +tutti.service.genericFormat.export.buildZip= +tutti.service.genericFormat.export.catches.error= +tutti.service.genericFormat.export.closeContext.error= +tutti.service.genericFormat.export.context.error= +tutti.service.genericFormat.export.exportProtocol= +tutti.service.genericFormat.export.exportSampleCategoyModel= +tutti.service.genericFormat.export.exportSpecies= +tutti.service.genericFormat.export.exportTemporaryGear= +tutti.service.genericFormat.export.exportTemporaryPerson= +tutti.service.genericFormat.export.exportTemporarySpecies= +tutti.service.genericFormat.export.exportTemporaryVessel= +tutti.service.genericFormat.export.gearCaracteristics.error= +tutti.service.genericFormat.export.individualObservations.error= +tutti.service.genericFormat.export.invalid.cruise= +tutti.service.genericFormat.export.invalid.fishingOperation= +tutti.service.genericFormat.export.marineLitters.error= +tutti.service.genericFormat.export.operation.error= +tutti.service.genericFormat.export.operations.error= +tutti.service.genericFormat.export.parameters.error= +tutti.service.genericFormat.export.skipProtocolExport= +tutti.service.genericFormat.export.skipTemporaryGearExport= +tutti.service.genericFormat.export.skipTemporaryPersonExport= +tutti.service.genericFormat.export.skipTemporarySpeciesExport= +tutti.service.genericFormat.export.skipTemporaryVesselExport= +tutti.service.genericFormat.export.species.error= +tutti.service.genericFormat.export.survey.error= +tutti.service.genericFormat.export.zip.error= +tutti.service.genericFormat.exportCruise.buildZip= +tutti.service.genericFormat.exportCruise.checkCruise= +tutti.service.genericFormat.exportCruise.checkCruiseFishingOperation= +tutti.service.genericFormat.exportCruise.exportAccidentalCatches= +tutti.service.genericFormat.exportCruise.exportCatch= +tutti.service.genericFormat.exportCruise.exportCatches= +tutti.service.genericFormat.exportCruise.exportGearCaracteristics= +tutti.service.genericFormat.exportCruise.exportIndividualObservation= +tutti.service.genericFormat.exportCruise.exportIndividualObservations= +tutti.service.genericFormat.exportCruise.exportMarineLitter= +tutti.service.genericFormat.exportCruise.exportMarineLitters= +tutti.service.genericFormat.exportCruise.exportOperation= +tutti.service.genericFormat.exportCruise.exportOperations= +tutti.service.genericFormat.exportCruise.exportParameter= +tutti.service.genericFormat.exportCruise.exportParameters= +tutti.service.genericFormat.exportCruise.exportSpecies= +tutti.service.genericFormat.exportCruise.exportSurvey= +tutti.service.genericFormat.import.accidentalCatches= +tutti.service.genericFormat.import.catches= +tutti.service.genericFormat.import.cruises= +tutti.service.genericFormat.import.error.cruiseAlreadyExist= +tutti.service.genericFormat.import.error.cruiseAlreadyImported= +tutti.service.genericFormat.import.error.cruiseNotFound= +tutti.service.genericFormat.import.error.cruiseNotValid= +tutti.service.genericFormat.import.error.fishingOperationAlreadyImported= +tutti.service.genericFormat.import.error.fishingOperationNotFoundInCruise= +tutti.service.genericFormat.import.error.fishingOperationNotValid= +tutti.service.genericFormat.import.error.gearNotFoundInCruise= +tutti.service.genericFormat.import.gearCaracteristics= +tutti.service.genericFormat.import.individualObservations= +tutti.service.genericFormat.import.marineLitters= +tutti.service.genericFormat.import.operations= +tutti.service.genericFormat.import.parameters= +tutti.service.genericFormat.import.protocol= +tutti.service.genericFormat.import.sampleCategoryModel= +tutti.service.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching= +tutti.service.genericFormat.import.sampleCategoryModel.error.codeNotMatching= +tutti.service.genericFormat.import.sampleCategoryModel.error.missingCategories= +tutti.service.genericFormat.import.sampleCategoryModel.error.noCaracteristic= +tutti.service.genericFormat.import.sampleCategoryModel.error.noCode= +tutti.service.genericFormat.import.sampleCategoryModel.error.tooMuchCategories= +tutti.service.genericFormat.import.temporaryGears= +tutti.service.genericFormat.import.temporaryPersons= +tutti.service.genericFormat.import.temporarySpecies= +tutti.service.genericFormat.import.temporaryVessels= +tutti.service.genericFormat.importError.archiveNotSane= +tutti.service.genericFormat.importError.missArchiveFile= +tutti.service.genericFormat.invalid.cruise= +tutti.service.genericFormat.invalid.fishingOperation= +tutti.service.genericFormat.load.protocol= +tutti.service.genericFormat.reuse.protocol= tutti.service.multipost.attachment.copy.error= tutti.service.multipost.attachment.mkdir.error= tutti.service.multipost.export.attachments.error= 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 5fddd50..110431d 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 @@ -7,38 +7,6 @@ tutti.csv.import.error.on.field=Colonne %s \: %s tutti.csv.import.error.on.row=Des erreurs ont été détectées à la ligne %s \:\n %s tutti.error.messages=Erreurs \:\n %s tutti.fatal.messages=Erreurs critiques \:\n %s -tutti.genericFormat.import.accidentalCatches=Import des captures accidentelles -tutti.genericFormat.import.catches=Import des captures -tutti.genericFormat.import.cruises=Import des campagnes -tutti.genericFormat.import.error.cruiseAlreadyExist=Il existe déjà une campagne avec ce nom %s -tutti.genericFormat.import.error.cruiseAlreadyImported=La campagne avec ce nom %s a déjà été importée -tutti.genericFormat.import.error.cruiseNotFound=La campagne (année\: %s, série\: %s, série partielle %s) n'existe pas -tutti.genericFormat.import.error.cruiseNotValid= -tutti.genericFormat.import.error.fishingOperationAlreadyImported=Un trait %s - %s - %s -%s a déjà été importé dans la campagne %s -tutti.genericFormat.import.error.fishingOperationNotFoundInCruise=Le trait %s - %s - %s -%s n'existe pas dans la campagne %s -tutti.genericFormat.import.error.fishingOperationNotValid=Le trait n'est pas valide \:\n%s -tutti.genericFormat.import.error.gearNotFoundInCruise=L'engin %s (position %s) non trouvé dans la campagne %s -tutti.genericFormat.import.gearCaracteristics=Import des caractéristiques d'engin -tutti.genericFormat.import.individualObservations=Import des observations individuelles -tutti.genericFormat.import.marineLitters=Import des macro-déchets -tutti.genericFormat.import.operations=Import des traits -tutti.genericFormat.import.parameters=Import des paramètres de trait -tutti.genericFormat.import.protocol=Import d'un nouveau protocol %s -tutti.genericFormat.import.sampleCategoryModel=Import du modèle de catégorisation -tutti.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching=L'identifiant de la caractéristique devrait être %s, mais vaut %s -tutti.genericFormat.import.sampleCategoryModel.error.codeNotMatching=Le code devrait être %s, mais vaut %s -tutti.genericFormat.import.sampleCategoryModel.error.missingCategories=Il manque des catégories -tutti.genericFormat.import.sampleCategoryModel.error.noCaracteristic=La catactéristique est obligatoire -tutti.genericFormat.import.sampleCategoryModel.error.noCode=Le code est obligatoire -tutti.genericFormat.import.sampleCategoryModel.error.tooMuchCategories=Trop de catégorisation -tutti.genericFormat.import.temporaryGears=Import des références temporaires d'engins -tutti.genericFormat.import.temporaryPersons=Import des références temporaires de personnes -tutti.genericFormat.import.temporarySpecies=Import des références temporaires de Taxons -tutti.genericFormat.import.temporaryVessels=Import des références temporaires de navires -tutti.genericFormat.importError.archiveNotSane=L'archive ne respecte pas le format de l'import générique \:\n%s -tutti.genericFormat.load.protocol=Import du protocol -tutti.genericFormat.reuse.protocol=Réutilisation du protocol existant %s -tutti.genericformat.importError.missArchiveFile=Il manque le fichier %s dans l'archive tutti.io.mkDir.error=Erreur à la création du dossier %s tutti.pdf.export.missing.species.code=Une espèce (referenceId %s, nom scientifique %s) n'a ni code campagne, ni code refTax. tutti.property.attachment=Pièce jointe @@ -105,28 +73,6 @@ tutti.service.csv.parse.qualitativeValueError=La valeur %s de la caractéristiqu tutti.service.cvs.format.error=Erreur lors du formatage de la valeur %s tutti.service.cvs.mandatory.value=Valeur obligatoire tutti.service.error.species.null=Taxon non trouvé -tutti.service.export.accidentalCatch.error=Erreur lors de l'export des captures accidentelles -tutti.service.export.catches.error=Erreur lors de l'export des captures -tutti.service.export.closeContext.error=Erreur lors de la fermeture du contexte d'export -tutti.service.export.context.error=Erreur lors de la création des fichiers pour l'export -tutti.service.export.error.invalid.cruise=Erreur d'élévation de poids sur les traits de la campagne %s \:<ul>%s</ul> -tutti.service.export.error.invalid.fishingOperation=L'élévation des poids ne peut pas être réalisée sur le trait %s, pour les raisons suivantes \:<ul>%s</ul> -tutti.service.export.gearCaracteristics.error=Erreur lors de l'export des caractéristiques des engins -tutti.service.export.individualObservations.error=Erreur lors de l'export des observations individuelles -tutti.service.export.invalid.cruise=Erreur d'élévation de poids sur les traits de la campagne %s \:<ul>%s</ul> -tutti.service.export.invalid.fishingOperation=<li>L'élévation des poids ne peut pas être réalisée sur le trait %s, pour la raison suivante \:<ul><li>%s</li></ul></li> -tutti.service.export.marineLitters.error=Erreur lors de l'export des macro-déchets -tutti.service.export.operation.error=Impossible d'export le trait %s pour la campagne %s -tutti.service.export.operations.error=Erreur lors de l'export des traits -tutti.service.export.parameters.error=Erreur lors de l'export des paramètres -tutti.service.export.species.error=Erreur lors de l'export des espèces -tutti.service.export.survey.error=Erreur lors de l'export de la campagne -tutti.service.exportCruise.checkCruise=Vérification de la campagne %s -tutti.service.exportCruise.checkCruiseFishingOperation=Vérification de la campagne <strong>%s</strong> ( trait <strong>%s</strong> ) -tutti.service.exportCruise.exportGearCaracteristics=<html>Export de la campagne <strong>%s</strong> ( caractéristiques des engins)</html> -tutti.service.exportCruise.exportOperation=<html>Export de la campagne <strong>%s</strong> (trait <strong>%s</strong> )</html> -tutti.service.exportCruise.exportSpecies=<html>Export de la campagne <strong>%s</strong> ( espèces )</html> -tutti.service.exportCruise.exportSurvey=<html>Export de la campagne <strong>%s</strong></html> tutti.service.exportPdf.error=Erreur lors de la génération du pdf %s tutti.service.exportSumatra.error.species.null=L'espèce est nulle tutti.service.exportSumatra.error.station.null=Le trait est nul @@ -149,20 +95,75 @@ tutti.service.exportSumatra.header.surveySpecies=espececampagne tutti.service.exportSumatra.header.totalWeight=total tutti.service.exportSumatra.header.weight=total tutti.service.exportSumatra.header.year=annee -tutti.service.genericExport.buildZip=Création de l'archive de l'export (fichier %s) -tutti.service.genericExport.exportProtocol=Export du protocol %s -tutti.service.genericExport.exportSampleCategoyModel=Export des %s catégories -tutti.service.genericExport.exportSpecies=<html>Export du fichier <strong>species.csv</strong></html> -tutti.service.genericExport.exportTemporaryGear=Export de %s engins temporaires -tutti.service.genericExport.exportTemporaryPerson=Export de %s personnes temporaires -tutti.service.genericExport.exportTemporarySpecies=Export de %s espèces temporaires -tutti.service.genericExport.exportTemporaryVessel=Export de %s navires temporaires -tutti.service.genericExport.skipProtocolExport=Pas de protocol à exporter -tutti.service.genericExport.skipTemporaryGearExport=Pas d'engin temporaire à exporter -tutti.service.genericExport.skipTemporaryPersonExport=Pas de personne temporaire à exporter -tutti.service.genericExport.skipTemporarySpeciesExport=Pas d'espèce temporaire à exporter -tutti.service.genericExport.skipTemporaryVesselExport=Pas de navire temporaire à exporter -tutti.service.genericExport.zip.error=Erreur lors de la création du zip d'export %s +tutti.service.genericFormat.checkCruise=Vérification de la campagne %s +tutti.service.genericFormat.checkCruiseFishingOperation=Vérification de la campagne <strong>%s</strong> ( trait <strong>%s</strong> ) +tutti.service.genericFormat.cleanWeights.fishingOperation=Suppression des poids en double pour l'opération %s +tutti.service.genericFormat.export.accidentalCatch.error=Erreur lors de l'export des captures accidentelles +tutti.service.genericFormat.export.buildZip=Création de l'archive de l'export (fichier %s) +tutti.service.genericFormat.export.catches.error=Erreur lors de l'export des captures +tutti.service.genericFormat.export.closeContext.error=Erreur lors de la fermeture du contexte d'export +tutti.service.genericFormat.export.context.error=Erreur lors de la création des fichiers pour l'export +tutti.service.genericFormat.export.error.invalid.cruise=Erreur d'élévation de poids sur les traits de la campagne %s \:<ul>%s</ul> +tutti.service.genericFormat.export.error.invalid.fishingOperation=L'élévation des poids ne peut pas être réalisée sur le trait %s, pour les raisons suivantes \:<ul>%s</ul> +tutti.service.genericFormat.export.exportProtocol=Export du protocol %s +tutti.service.genericFormat.export.exportSampleCategoyModel=Export des %s catégories +tutti.service.genericFormat.export.exportSpecies=<html>Export du fichier <strong>species.csv</strong></html> +tutti.service.genericFormat.export.exportTemporaryGear=Export de %s engins temporaires +tutti.service.genericFormat.export.exportTemporaryPerson=Export de %s personnes temporaires +tutti.service.genericFormat.export.exportTemporarySpecies=Export de %s espèces temporaires +tutti.service.genericFormat.export.exportTemporaryVessel=Export de %s navires temporaires +tutti.service.genericFormat.export.gearCaracteristics.error=Erreur lors de l'export des caractéristiques des engins +tutti.service.genericFormat.export.individualObservations.error=Erreur lors de l'export des observations individuelles +tutti.service.genericFormat.export.marineLitters.error=Erreur lors de l'export des macro-déchets +tutti.service.genericFormat.export.operation.error=Impossible d'export le trait %s pour la campagne %s +tutti.service.genericFormat.export.operations.error=Erreur lors de l'export des traits +tutti.service.genericFormat.export.parameters.error=Erreur lors de l'export des paramètres +tutti.service.genericFormat.export.skipProtocolExport=Pas de protocol à exporter +tutti.service.genericFormat.export.skipTemporaryGearExport=Pas d'engin temporaire à exporter +tutti.service.genericFormat.export.skipTemporaryPersonExport=Pas de personne temporaire à exporter +tutti.service.genericFormat.export.skipTemporarySpeciesExport=Pas d'espèce temporaire à exporter +tutti.service.genericFormat.export.skipTemporaryVesselExport=Pas de navire temporaire à exporter +tutti.service.genericFormat.export.species.error=Erreur lors de l'export des espèces +tutti.service.genericFormat.export.survey.error=Erreur lors de l'export de la campagne +tutti.service.genericFormat.export.zip.error=Erreur lors de la création du zip d'export %s +tutti.service.genericFormat.exportCruise.exportGearCaracteristics=<html>Export de la campagne <strong>%s</strong> ( caractéristiques des engins)</html> +tutti.service.genericFormat.exportCruise.exportOperation=<html>Export de la campagne <strong>%s</strong> (trait <strong>%s</strong> )</html> +tutti.service.genericFormat.exportCruise.exportSpecies=<html>Export de la campagne <strong>%s</strong> ( espèces )</html> +tutti.service.genericFormat.exportCruise.exportSurvey=<html>Export de la campagne <strong>%s</strong></html> +tutti.service.genericFormat.import.accidentalCatches=Import des captures accidentelles +tutti.service.genericFormat.import.catches=Import des captures +tutti.service.genericFormat.import.cruises=Import des campagnes +tutti.service.genericFormat.import.error.cruiseAlreadyExist=Il existe déjà une campagne avec ce nom %s +tutti.service.genericFormat.import.error.cruiseAlreadyImported=La campagne avec ce nom %s a déjà été importée +tutti.service.genericFormat.import.error.cruiseNotFound=La campagne (année\: %s, série\: %s, série partielle %s) n'existe pas +tutti.service.genericFormat.import.error.cruiseNotValid= +tutti.service.genericFormat.import.error.fishingOperationAlreadyImported=Un trait %s - %s - %s -%s a déjà été importé dans la campagne %s +tutti.service.genericFormat.import.error.fishingOperationNotFoundInCruise=Le trait %s - %s - %s -%s n'existe pas dans la campagne %s +tutti.service.genericFormat.import.error.fishingOperationNotValid=Le trait n'est pas valide \:\n%s +tutti.service.genericFormat.import.error.gearNotFoundInCruise=L'engin %s (position %s) non trouvé dans la campagne %s +tutti.service.genericFormat.import.gearCaracteristics=Import des caractéristiques d'engin +tutti.service.genericFormat.import.individualObservations=Import des observations individuelles +tutti.service.genericFormat.import.marineLitters=Import des macro-déchets +tutti.service.genericFormat.import.operations=Import des traits +tutti.service.genericFormat.import.parameters=Import des paramètres de trait +tutti.service.genericFormat.import.protocol=Import d'un nouveau protocol %s +tutti.service.genericFormat.import.sampleCategoryModel=Import du modèle de catégorisation +tutti.service.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching=L'identifiant de la caractéristique devrait être %s, mais vaut %s +tutti.service.genericFormat.import.sampleCategoryModel.error.codeNotMatching=Le code devrait être %s, mais vaut %s +tutti.service.genericFormat.import.sampleCategoryModel.error.missingCategories=Il manque des catégories +tutti.service.genericFormat.import.sampleCategoryModel.error.noCaracteristic=La catactéristique est obligatoire +tutti.service.genericFormat.import.sampleCategoryModel.error.noCode=Le code est obligatoire +tutti.service.genericFormat.import.sampleCategoryModel.error.tooMuchCategories=Trop de catégorisation +tutti.service.genericFormat.import.temporaryGears=Import des références temporaires d'engins +tutti.service.genericFormat.import.temporaryPersons=Import des références temporaires de personnes +tutti.service.genericFormat.import.temporarySpecies=Import des références temporaires de Taxons +tutti.service.genericFormat.import.temporaryVessels=Import des références temporaires de navires +tutti.service.genericFormat.importError.archiveNotSane=L'archive ne respecte pas le format de l'import générique \:\n%s +tutti.service.genericFormat.importError.missArchiveFile=Il manque le fichier %s dans l'archive +tutti.service.genericFormat.invalid.cruise=Erreur d'élévation de poids sur les traits de la campagne %s \:<ul>%s</ul> +tutti.service.genericFormat.invalid.fishingOperation=<li>L'élévation des poids ne peut pas être réalisée sur le trait %s, pour la raison suivante \:<ul><li>%s</li></ul></li> +tutti.service.genericFormat.load.protocol=Import du protocol +tutti.service.genericFormat.reuse.protocol=Réutilisation du protocol existant %s tutti.service.multipost.attachment.copy.error=Erreur lors de l'export de la pièce-jointe %s tutti.service.multipost.attachment.mkdir.error=Impossible de créer le répertoire %s tutti.service.multipost.export.attachments.error=Erreur lors de l'export des pièces-jointes -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.