This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 1432b54c76b994b3a887bd4d6bfd6923b10962cd Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Mar 27 16:24:44 2015 +0100 refs #6820 ajout de l'import des pj --- .../genericformat/GenericFormatContextSupport.java | 32 ++++++++- .../genericformat/GenericFormatImportService.java | 3 + .../GenericformatImportPersitenceHelper.java | 78 ++++++++++++++++++--- .../consumer/CsvConsumerForAccidentalCatch.java | 1 + .../consumer/CsvConsumerForAttachment.java | 29 ++++++++ .../CsvConsumerForIndividualObservation.java | 1 + .../importactions/ImportOperationAction.java | 7 +- .../importactions/ImportSurveyAction.java | 6 +- .../importactions/LoadAttachmentsAction.java | 80 ++++++++++++++++++++++ .../producer/CsvProducerForSurvey.java | 1 + .../resources/i18n/tutti-service_en_GB.properties | 1 + .../resources/i18n/tutti-service_fr_FR.properties | 1 + 12 files changed, 229 insertions(+), 11 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java index 42cb74b..1a3f675 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java @@ -25,7 +25,9 @@ package fr.ifremer.tutti.service.genericformat; */ import com.google.common.base.Preconditions; +import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; @@ -44,6 +46,7 @@ import fr.ifremer.tutti.service.ValidationService; import fr.ifremer.tutti.service.csv.CaracteristicValueParseException; import fr.ifremer.tutti.service.csv.CaracteristicValueParserFormatter; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAccidentalCatch; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAttachment; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForCatch; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForGearCaracteristic; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForIndividualObservation; @@ -52,6 +55,7 @@ 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.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.RowWithCruiseContextSupport; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryGear; import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryPerson; @@ -65,6 +69,7 @@ import java.io.File; import java.io.Serializable; import java.nio.file.Path; import java.text.ParseException; +import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; @@ -123,10 +128,14 @@ public abstract class GenericFormatContextSupport implements Closeable { private final GenericFormatCsvFileResult gearCaracteristicFileResult; + private final GenericFormatCsvFileResult attachmentFileResult; + private final Map<String, GenericFormatImportCruiseContext> cruiseContexts; private String protocolOriginalName; + private final Multimap<Integer, AttachmentRow> attachmentRows; + protected abstract void onClose(); public GenericFormatContextSupport(GenericFormatImportRequest importRequest, @@ -167,7 +176,9 @@ public abstract class GenericFormatContextSupport implements Closeable { this.marineLitterFileResult = createFileResult(archive.getMarineLitterPath(), true); this.individualObservationFileResult = createFileResult(archive.getIndividualObservationPath(), true); this.accidentalCatchFileResult = createFileResult(archive.getAccidentalCatchPath(), true); + this.attachmentFileResult = createFileResult(archive.getAttachmentFilePath(), true); + this.attachmentRows = ArrayListMultimap.create(); } @Override @@ -258,6 +269,10 @@ public abstract class GenericFormatContextSupport implements Closeable { return accidentalCatchFileResult; } + public GenericFormatCsvFileResult getAttachmentFileResult() { + return attachmentFileResult; + } + public GenericFormatImportRequest getImportRequest() { return importRequest; } @@ -401,6 +416,13 @@ public abstract class GenericFormatContextSupport implements Closeable { return consumer; } + public CsvConsumerForAttachment loadAttachments(boolean failFast) { + attachmentFileResult.setImported(true); + attachmentFileResult.setLinesCount(importRequest.getArchive().getAttachemntsPathLineCount()); + CsvConsumerForAttachment consumer = new CsvConsumerForAttachment(importRequest.getArchive().getAttachmentFilePath(), importRequest.getCsvSeparator(), importEntityParserFactory, failFast); + return consumer; + } + public CsvConsumerForTemporaryGear loadTemporaryGears(boolean failFast) { referentialTemporaryGearFileResult.setImported(true); referentialTemporaryGearFileResult.setLinesCount(importRequest.getArchive().getTemporaryReferentialGearLineCount()); @@ -534,8 +556,16 @@ public abstract class GenericFormatContextSupport implements Closeable { this.protocolOriginalName = protocolOriginalName; } + public void setAttachmentRows(Multimap<Integer, AttachmentRow> attachmentRows) { + this.attachmentRows.putAll(attachmentRows); + } + + public Collection<AttachmentRow> popAttachmentRows(Integer objectId) { + Collection<AttachmentRow> result = objectId==null?null:attachmentRows.removeAll(objectId); + return result; + } - public static interface CruiseContextAction { + public interface CruiseContextAction { void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java index 9a35d81..72d8712 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 @@ -50,6 +50,7 @@ import fr.ifremer.tutti.service.genericformat.importactions.ImportReferentialPer import fr.ifremer.tutti.service.genericformat.importactions.ImportReferentialSpeciesAction; import fr.ifremer.tutti.service.genericformat.importactions.ImportReferentialVesselAction; import fr.ifremer.tutti.service.genericformat.importactions.ImportSurveyAction; +import fr.ifremer.tutti.service.genericformat.importactions.LoadAttachmentsAction; import fr.ifremer.tutti.service.genericformat.importactions.ValidateAccidentalCatchAction; import fr.ifremer.tutti.service.genericformat.importactions.ValidateCatchAction; import fr.ifremer.tutti.service.genericformat.importactions.ValidateGearCaracteristicAction; @@ -351,6 +352,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { Set<ImportActionSupport> actions = new LinkedHashSet<>(); addTechnicalActions(importContext, actions); + actions.add(new LoadAttachmentsAction(importContext)); actions.add(new ValidateSurveyAction(importContext)); actions.add(new ValidateGearCaracteristicAction(importContext)); actions.add(new ValidateOperationAction(importContext)); @@ -367,6 +369,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { Set<ImportActionSupport> actions = new LinkedHashSet<>(); addTechnicalActions(importContext, actions); + actions.add(new LoadAttachmentsAction(importContext)); actions.add(new ImportSurveyAction(importContext, persitenceHelper)); actions.add(new ImportGearCaracteristicAction(importContext, persitenceHelper)); actions.add(new ImportOperationAction(importContext, persitenceHelper)); 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 8533da0..acecefc 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java @@ -24,10 +24,12 @@ package fr.ifremer.tutti.service.genericformat; * #L% */ +import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; +import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; @@ -39,11 +41,13 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; +import java.io.File; import java.util.Collection; import java.util.List; import java.util.Set; @@ -76,7 +80,7 @@ public class GenericformatImportPersitenceHelper { this.fishingOperationDecorator = fishingOperationDecorator; } - public void persistCruise(Cruise cruise) { + public void persistCruise(Cruise cruise, Collection<AttachmentRow> attachmentRows) { String cruiseStr = cruiseDecorator.toString(cruise); @@ -100,6 +104,10 @@ public class GenericformatImportPersitenceHelper { } importContext.increments(t("tutti.service.genericFormat.persist.cruise", cruiseStr)); + + // delete previous attachments + persistenceService.deleteAllAttachment(ObjectTypeCode.SCIENTIFIC_CRUISE, cruise.getIdAsInt()); + savedCruise = persistenceService.saveCruise(cruise, false, false); List<String> fishingOperationIds = persistenceService.getAllFishingOperationIds(savedCruise.getId()); @@ -116,10 +124,26 @@ public class GenericformatImportPersitenceHelper { } + if (CollectionUtils.isNotEmpty(attachmentRows)) { + + persistAttachments(savedCruise.getIdAsInt(), attachmentRows); + } importContext.addImportedCruise(savedCruise, !createCruise); } + protected void persistAttachments(Integer objectId, Collection<AttachmentRow> attachmentRows) { + + for (AttachmentRow attachmentRow : attachmentRows) { + + Attachment attachment = attachmentRow.toAttachment(objectId); + File attachmentFile = importContext.getImportRequest().getArchive().extractAttachment(attachment.getPath()); + persistenceService.createAttachment(attachment, attachmentFile); + + } + + } + public void persistGearCaracteristics() { importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() { @@ -151,7 +175,7 @@ public class GenericformatImportPersitenceHelper { } - public void persistFishingOperation(GenericFormatImportCruiseContext cruiseContext, FishingOperation fishingOperation, CatchBatch catchBatch) { + public void persistFishingOperation(GenericFormatImportCruiseContext cruiseContext, FishingOperation fishingOperation, CatchBatch catchBatch, Collection<AttachmentRow> operationAttachmentRows, Collection<AttachmentRow> catchAttachmentRows) { String operationStr = fishingOperationDecorator.toString(fishingOperation); String cruiseStr = cruiseContext.getCruiseLabel(); @@ -164,6 +188,9 @@ public class GenericformatImportPersitenceHelper { CatchBatch createdCatchBatch = persistenceService.createCatchBatch(catchBatch); + persistAttachments(createdFishingOperation.getIdAsInt(), operationAttachmentRows); + persistAttachments(createdCatchBatch.getIdAsInt(), catchAttachmentRows); + importContext.addImportedFishingOperation(createdFishingOperation, createdCatchBatch); } @@ -391,7 +418,16 @@ public class GenericformatImportPersitenceHelper { //FIXME Does not work (all batches are persisted, but the last one only displayed later in application) // persistenceService.createMarineLitterBatches(fishingOperationId, marineLitterBatches); for (MarineLitterBatch marineLitterBatch : marineLitterBatches) { + + Integer objectId = marineLitterBatch.getIdAsInt(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(objectId); + + // Id was only here to get attachments + marineLitterBatch.setId((String) null); + persistenceService.createMarineLitterBatch(marineLitterBatch); + + persistAttachments(objectId, attachmentRows); } } @@ -419,13 +455,26 @@ public class GenericformatImportPersitenceHelper { if (fishingOperationContext.withIndividualObservationBatches()) { - FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); - String fishingOperationId = fishingOperation.getId(); +// FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); +// String fishingOperationId = fishingOperation.getId(); Collection<IndividualObservationBatch> individualObservationBatches = fishingOperationContext.getIndividualObservationBatches(); if (log.isInfoEnabled()) { log.info("Persist " + individualObservationBatches.size() + " individual observation(s) of " + operationStr + " for cruise: " + cruiseStr); } - persistenceService.createIndividualObservationBatches(fishingOperationId, individualObservationBatches); +// persistenceService.createIndividualObservationBatches(fishingOperationId, individualObservationBatches); + + for (IndividualObservationBatch individualObservationBatch : individualObservationBatches) { + + Integer objectId = individualObservationBatch.getIdAsInt(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(objectId); + + // Id was only here to get attachments + individualObservationBatch.setId((String) null); + + persistenceService.createIndividualObservationBatch(individualObservationBatch); + + persistAttachments(objectId, attachmentRows); + } } @@ -452,13 +501,26 @@ public class GenericformatImportPersitenceHelper { if (fishingOperationContext.withAccidentalBatches()) { - FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); - String fishingOperationId = fishingOperation.getId(); +// FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); +// String fishingOperationId = fishingOperation.getId(); Collection<AccidentalBatch> accidentalBatches = fishingOperationContext.getAccidentalBatches(); if (log.isInfoEnabled()) { log.info("Persist " + accidentalBatches.size() + " accidental batch(es) of " + operationStr + " for cruise: " + cruiseStr); } - persistenceService.createAccidentalBatches(fishingOperationId, accidentalBatches); + + for (AccidentalBatch accidentalBatch : accidentalBatches) { + + Integer objectId = accidentalBatch.getIdAsInt(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(objectId); + + // Id was only here to get attachments + accidentalBatch.setId((String) null); + + persistenceService.createAccidentalBatch(accidentalBatch); + + persistAttachments(objectId, attachmentRows); + + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java index 2694a7e..3913e48 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 @@ -116,6 +116,7 @@ public class CsvConsumerForAccidentalCatch extends CsvComsumer<AccidentalCatchRo batch.setCaracteristics(new CaracteristicMap()); batch.setComment(bean.getComment()); batch.setSpecies(bean.getSpecies()); + batch.setId(bean.getBatchId()); operationContext.addAccidentalBatch(batchId, batch); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAttachment.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAttachment.java new file mode 100644 index 0000000..c0f16a4 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAttachment.java @@ -0,0 +1,29 @@ +package fr.ifremer.tutti.service.genericformat.consumer; + +import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentModel; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; +import org.nuiton.csv.ImportRow; + +import java.nio.file.Path; + +/** + * Created on 3/26/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public class CsvConsumerForAttachment extends CsvComsumer<AttachmentRow, AttachmentModel> { + + public CsvConsumerForAttachment(Path file, char separator, GenericFormatImportEntityParserFactory parserFactory, boolean reportError) { + super(file, AttachmentModel.forImport(separator, parserFactory), reportError); + } + + public void validateRow(ImportRow<AttachmentRow> row) { + + reportError(row); + + } + +} \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java index b7a7575..33e101b 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 @@ -116,6 +116,7 @@ public class CsvConsumerForIndividualObservation extends CsvComsumer<IndividualO batch.setCaracteristics(new CaracteristicMap()); batch.setComment(bean.getComment()); batch.setSpecies(bean.getSpecies()); + batch.setId(bean.getBatchId()); operationContext.addIndividualObservationBatch(batchId, batch); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java index b56bef2..8bfec11 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportOperationAction.java @@ -31,6 +31,7 @@ import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForOperation; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.OperationRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -39,6 +40,7 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Collection; import static org.nuiton.i18n.I18n.t; @@ -81,10 +83,13 @@ public class ImportOperationAction extends ImportActionSupport { OperationRow bean = row.getBean(); + Collection<AttachmentRow> operationAttachmentRows = importContext.popAttachmentRows(bean.getFishingOperationObjectId()); + Collection<AttachmentRow> catchAttachmentRows = importContext.popAttachmentRows(bean.getCatchObjectId()); + FishingOperation fishingOperation = bean.getFishingOperation(); CatchBatch catchBatch = bean.getCatchBatch(); - persitenceHelper.persistFishingOperation(cruiseContext, fishingOperation, catchBatch); + persitenceHelper.persistFishingOperation(cruiseContext, fishingOperation, catchBatch, operationAttachmentRows, catchAttachmentRows); } } catch (IOException e) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java index a293b1d..84a737b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportSurveyAction.java @@ -28,6 +28,7 @@ import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericformatImportPersitenceHelper; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.SurveyRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -36,6 +37,7 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; +import java.util.Collection; import static org.nuiton.i18n.I18n.t; @@ -79,7 +81,9 @@ public class ImportSurveyAction extends ImportActionSupport { consumer.validateRow(row, importContext); consumer.prepareRowForPersist(row); - persitenceHelper.persistCruise(row.getBean().getCruise()); + SurveyRow bean = row.getBean(); + Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(bean.getObjectId()); + persitenceHelper.persistCruise(bean.getCruise(), attachmentRows); } } catch (IOException e) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/LoadAttachmentsAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/LoadAttachmentsAction.java new file mode 100644 index 0000000..1d81fcc --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/LoadAttachmentsAction.java @@ -0,0 +1,80 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; +import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; +import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAttachment; +import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/26/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.3 + */ +public class LoadAttachmentsAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(LoadAttachmentsAction.class); + + public LoadAttachmentsAction(GenericFormatContextSupport importContext) { + super(importContext); + } + + @Override + protected boolean canExecute() { + return true; + } + + @Override + protected void doExecute() { + + if (log.isInfoEnabled()) { + log.info("Load attachments definitions."); + } + + importContext.increments(t("tutti.service.genericFormat.load.attachments")); + + GenericFormatCsvFileResult importFileResult = importContext.getAttachmentFileResult(); + try (CsvConsumerForAttachment consumer = importContext.loadAttachments(false)) { + + Multimap<Integer, AttachmentRow> attachmentRowsByObjectId = ArrayListMultimap.create(); + + for (ImportRow<AttachmentRow> row : consumer) { + + consumer.validateRow(row); + + if (row.isValid()) { + + AttachmentRow bean = row.getBean(); + attachmentRowsByObjectId.put(bean.getObjectId(), bean); + + } + + } + + importFileResult.flushErrors(consumer); + + importContext.setAttachmentRows(attachmentRowsByObjectId); + + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close sampleCategory.csv file", e); + } catch (ImportRuntimeException e) { + + importFileResult.addGlobalError(e.getMessage()); + + } + + } + +} \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForSurvey.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForSurvey.java index 8c47b55..910ec4d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForSurvey.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForSurvey.java @@ -48,6 +48,7 @@ public class CsvProducerForSurvey extends CsvProducer<SurveyRow, SurveyModel> { SurveyRow row = new SurveyRow(); row.setCruise(cruise); + row.setObjectId(cruise.getIdAsInt()); row.setCountry(country); return row; 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 f44c1fe..cf00e44 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 @@ -208,6 +208,7 @@ tutti.service.genericFormat.importError.archiveNotSane= tutti.service.genericFormat.importError.missArchiveFile= tutti.service.genericFormat.invalid.cruise= tutti.service.genericFormat.invalid.fishingOperation= +tutti.service.genericFormat.load.attachments= tutti.service.genericFormat.load.protocol= tutti.service.genericFormat.persist.cruise= tutti.service.genericFormat.persist.gearCaracteristics= 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 cdf4a1b..81aea77 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 @@ -167,6 +167,7 @@ tutti.service.genericFormat.importError.archiveNotSane=L'archive ne respecte pas tutti.service.genericFormat.importError.missArchiveFile=Il manque le fichier %s dans l'archive tutti.service.genericFormat.invalid.cruise=Erreur d'élévation de poids sur les traits de la campagne %s \:<ul>%s</ul> tutti.service.genericFormat.invalid.fishingOperation=<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.attachments= tutti.service.genericFormat.load.protocol=Import du protocol tutti.service.genericFormat.persist.cruise=Sauvegarde de la campagne <strong>%s</strong> tutti.service.genericFormat.persist.gearCaracteristics=Sauvegarde des caractéristiques des engins de la campagne <strong>%s</strong> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.