This is an automated email from the git hooks/post-receive script. New commit to branch feature/8153 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 1f6be08cbad6b6d4ed78e1c17c43381528554956 Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 30 17:09:47 2016 +0200 on n'enregistre pas les lignes importées, on les retourne à l'utilisateur (refs #8153) --- .../catches/multipost/MultiPostImportResult.java | 36 ++++++++ .../catches/multipost/MultiPostImportService.java | 96 +++++++++++++++++----- 2 files changed, 112 insertions(+), 20 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportResult.java new file mode 100644 index 0000000..06a4a93 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportResult.java @@ -0,0 +1,36 @@ +package fr.ifremer.tutti.service.catches.multipost; + +import com.google.common.collect.Multimap; +import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; + +import java.io.File; +import java.util.List; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class MultiPostImportResult { + + private final List<SpeciesBatchFrequency> importedFrequencies; + private final List<IndividualObservationBatch> importedObservations; + private final Multimap<Integer, File> observationAttachments; + + public MultiPostImportResult(List<SpeciesBatchFrequency> importedFrequencies, + List<IndividualObservationBatch> importedObservations, + Multimap<Integer, File> observationAttachments) { + this.importedFrequencies = importedFrequencies; + this.importedObservations = importedObservations; + this.observationAttachments = observationAttachments; + } + + public List<SpeciesBatchFrequency> getImportedFrequencies() { + return importedFrequencies; + } + + public List<IndividualObservationBatch> getImportedObservations() { + return importedObservations; + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java index 2be0a65..1a0b6e1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java @@ -25,7 +25,9 @@ package fr.ifremer.tutti.service.catches.multipost; import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.HashMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.collect.Multimap; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiEntity; @@ -89,6 +91,7 @@ import java.io.IOException; import java.io.Reader; import java.io.Serializable; import java.text.ParseException; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -502,7 +505,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult * @param operation the operation in which to add the batches * @return the list of the species which have not been imported, because there were concurrent batches */ - public Map<String, Object> importSpeciesBatch(File file, + public MultiPostImportResult importSpeciesBatch(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, @@ -514,16 +517,19 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult // Import frequencies - if (importFrequencies) { - - List<SpeciesBatchFrequency> frequenciesToSave = importFrequencies(importContext, speciesBatch, SpeciesBatchFrequencys::newSpeciesBatchFrequency); + List<SpeciesBatchFrequency> frequenciesToSave = new ArrayList<>(); + if (importFrequencies) { + frequenciesToSave.addAll(importFrequencies(importContext, speciesBatch, SpeciesBatchFrequencys::newSpeciesBatchFrequency)); frequenciesToSave.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(speciesBatch)); - persistenceService.saveSpeciesBatchFrequency(speciesBatch.getIdAsInt(), frequenciesToSave); } // Import indivudal observations + List<IndividualObservationBatch> individualObservations = new ArrayList<>(); + + Multimap<Integer, File> attachmentFiles = HashMultimap.create(); + if (importIndividualObservations) { // Import batches @@ -534,17 +540,19 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult importCaracteristics(importContext, individualObservationsBatches); + individualObservations.addAll(individualObservationsBatches.values()); + // Persist batches - persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); +// persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); // Import attachments - importAttachments(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE); + attachmentFiles.putAll(getAttachmentFiles(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE)); } - return new HashMap<>(); + return new MultiPostImportResult(frequenciesToSave, individualObservations, attachmentFiles); } }); @@ -811,6 +819,8 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult //-- Import Benthos Batches data --// //------------------------------------------------------------------------// + + //FIXME exactly the same as for the species ??? /** * Import benthos batches frequencies or individual observations from a satellite post. * @@ -818,28 +828,32 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult * @param operation the operation in which to add the batches * @return the list of the species which have not been imported, because there were concurrent batches */ - public Map<String, Object> importBenthosBatch(File file, - FishingOperation operation, - SpeciesBatch speciesBatch, - boolean importFrequencies, - boolean importIndividualObservations) { + public MultiPostImportResult importBenthosBatch(File file, + FishingOperation operation, + SpeciesBatch speciesBatch, + boolean importFrequencies, + boolean importIndividualObservations) { return persistenceService.invoke(() -> { + try (MultiPostImportContext importContext = new MultiPostImportContext(context, file, operation)) { // Import frequencies - if (importFrequencies) { - - List<SpeciesBatchFrequency> frequenciesToSave = importFrequencies(importContext, speciesBatch, SpeciesBatchFrequencys::newSpeciesBatchFrequency); + List<SpeciesBatchFrequency> frequenciesToSave = new ArrayList<>(); + if (importFrequencies) { + frequenciesToSave.addAll(importFrequencies(importContext, speciesBatch, SpeciesBatchFrequencys::newSpeciesBatchFrequency)); frequenciesToSave.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(speciesBatch)); - persistenceService.saveBenthosBatchFrequency(speciesBatch.getIdAsInt(), frequenciesToSave); } // Import indivudal observations + List<IndividualObservationBatch> individualObservations = new ArrayList<>(); + + Multimap<Integer, File> attachmentFiles = HashMultimap.create(); + if (importIndividualObservations) { // Import batches @@ -850,19 +864,22 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult importCaracteristics(importContext, individualObservationsBatches); + individualObservations.addAll(individualObservationsBatches.values()); + // Persist batches - persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); +// persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); // Import attachments - importAttachments(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE); + attachmentFiles.putAll(getAttachmentFiles(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE)); } - return new HashMap<>(); + return new MultiPostImportResult(frequenciesToSave, individualObservations, attachmentFiles); } + }); } @@ -1235,6 +1252,41 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } + protected <R extends TuttiEntity> Multimap<Integer, File> getAttachmentFiles(MultiPostImportContext importContext, Map<String, R> data, ObjectTypeCode objectType) throws IOException { + + Function<AttachmentRow, Integer> getObjetcIdFunction = input -> { + Integer result = null; + R batch = data.get(input.getBatchId()); + if (batch != null) { + result = batch.getIdAsInt(); + } + return result; + }; + + return getAttachmentFiles(importContext, getObjetcIdFunction, objectType); + } + + protected Multimap<Integer, File> getAttachmentFiles(MultiPostImportContext importContext, Function<AttachmentRow, Integer> getObjetcIdFunction, ObjectTypeCode objectType) throws IOException { + Multimap<Integer, File> result = HashMultimap.create(); + try (Reader reader = importContext.newFileReader(ATTACHMENTS_FILE)) { + + AttachmentRowModel attachmentModel = + AttachmentRowModel.forImport(importContext.newFile(ATTACHMENTS_DIRECTORY)); + try (Import<AttachmentRow> importer = Import.newImport(attachmentModel, reader)) { + + for (AttachmentRow row : importer) { + Integer objectId = getObjetcIdFunction.apply(row); + if (objectId != null) { + + result.put(objectId, row.getFile()); + } + } + + } + } + return result; + } + protected <B extends SampleEntity> void importCaracteristics(MultiPostImportContext importContext, Map<String, B> batches) throws IOException { @@ -1310,6 +1362,8 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult batch.setSize(row.getSize()); batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic()); batch.setComment(row.getComment()); + batch.setCopyIndividualObservationMode(row.getCopyIndividualObservationMode()); + batch.setSamplingCode(row.getSamplingCode()); batch.setCaracteristics(new CaracteristicMap()); batches.put(row.getBatchId(), batch); @@ -1448,6 +1502,8 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic()); batch.setComment(row.getComment()); batch.setCaracteristics(new CaracteristicMap()); + batch.setSamplingCode(row.getSamplingCode()); + batch.setCopyIndividualObservationMode(row.getCopyIndividualObservationMode()); batches.put(row.getBatchId(), batch); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.