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 6e7d6b843ffc7bd77536c8c31ed3fd42505b28ca Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Mar 14 15:33:19 2016 +0100 On met tous les classes d'import/export csv dans un paquetage csv + import/export sur un lot (See #8119) --- .../catches/multipost/MultiPostExportContext.java | 105 +++-- .../catches/multipost/MultiPostExportService.java | 161 ++++--- .../catches/multipost/MultiPostImportContext.java | 6 +- .../catches/multipost/MultiPostImportService.java | 480 +++++++++++++++++---- .../{ => csv}/AbstractFishingOperationRow.java | 2 +- .../AbstractFishingOperationRowModel.java | 12 +- .../multipost/{ => csv}/AccidentalCatchRow.java | 13 +- .../{ => csv}/AccidentalCatchRowModel.java | 28 +- .../catches/multipost/{ => csv}/AttachmentRow.java | 9 +- .../multipost/{ => csv}/AttachmentRowModel.java | 19 +- .../multipost/{ => csv}/CaracteristicRow.java | 8 +- .../multipost/{ => csv}/CaracteristicRowModel.java | 19 +- .../catches/multipost/{ => csv}/CatchBatchRow.java | 2 +- .../multipost/{ => csv}/CatchBatchRowModel.java | 5 +- .../multipost/{ => csv}/CatchFrequencyRow.java | 22 +- .../{ => csv}/CatchFrequencyRowModel.java | 22 +- .../catches/multipost/{ => csv}/CatchRow.java | 15 +- .../catches/multipost/{ => csv}/CatchRowModel.java | 21 +- .../multipost/{ => csv}/CatchWeightsRow.java | 2 +- .../multipost/{ => csv}/CatchWeightsRowModel.java | 5 +- .../multipost/{ => csv}/FishingOperationRow.java | 2 +- .../{ => csv}/FishingOperationRowModel.java | 6 +- .../{ => csv}/IndividualObservationRow.java | 14 +- .../{ => csv}/IndividualObservationRowModel.java | 19 +- .../multipost/{ => csv}/MarineLitterRow.java | 11 +- .../multipost/{ => csv}/MarineLitterRowModel.java | 19 +- .../multipost/{ => csv}/MarineLitterWeightRow.java | 2 +- .../{ => csv}/MarineLitterWeightRowModel.java | 5 +- 28 files changed, 699 insertions(+), 335 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostExportContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostExportContext.java index 7c3fb47..6aaf183 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostExportContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostExportContext.java @@ -5,13 +5,26 @@ import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.Attachment; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatchFrequency; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.catches.multipost.csv.AccidentalCatchRow; +import fr.ifremer.tutti.service.catches.multipost.csv.AccidentalCatchRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.AttachmentRow; +import fr.ifremer.tutti.service.catches.multipost.csv.AttachmentRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.CaracteristicRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CaracteristicRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchFrequencyRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchFrequencyRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.IndividualObservationRow; +import fr.ifremer.tutti.service.catches.multipost.csv.IndividualObservationRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.MarineLitterRow; +import fr.ifremer.tutti.service.catches.multipost.csv.MarineLitterRowModel; import org.nuiton.csv.Export; import org.nuiton.csv.ExportModel; import org.nuiton.jaxx.application.ApplicationIOUtil; @@ -37,7 +50,6 @@ public class MultiPostExportContext implements MultiPostConstants, Closeable { private final File targetFile; private final File temporaryDirectory; - private final FishingOperation operation; private final PersistenceService persistenceService; @@ -57,10 +69,9 @@ public class MultiPostExportContext implements MultiPostConstants, Closeable { private final List<File> file2zip = new ArrayList<>(); - public MultiPostExportContext(File targetFile, FishingOperation operation, PersistenceService persistenceService) { + public MultiPostExportContext(File targetFile, PersistenceService persistenceService) { this.targetFile = targetFile; this.temporaryDirectory = Files.createTempDir(); - this.operation = operation; this.persistenceService = persistenceService; } @@ -80,38 +91,47 @@ public class MultiPostExportContext implements MultiPostConstants, Closeable { public void storeSpeciesOrBenthosBatches(String fileName, boolean exportFrequencies, boolean exportIndividualObservations) { export(fileName, - new CatchRowModel(CSV_SEPARATOR), + CatchRowModel.forExport(), speciesOrBenthosRows, n("tutti.service.multipost.export.batches.error")); if (exportFrequencies) { - - export(FREQUENCIES_FILE, - new CatchFrequencyRowModel(CSV_SEPARATOR), - frequencyRows, - n("tutti.service.multipost.export.frequencies.error")); - + storeFrequencies(); } if (exportIndividualObservations) { + storeIndividualObservations(); + } - export(INDIVIDUAL_OBSERVATION_FILE, - new IndividualObservationRowModel(CSV_SEPARATOR), - individualObservationRows, - n("tutti.service.multipost.export.batches.error")); + } - export(CARACTERISTIC_FILE, - new CaracteristicRowModel(CSV_SEPARATOR), - caracteristicRows, - n("tutti.service.multipost.export.batches.error")); + public void storeFrequencies() { - } + export(FREQUENCIES_FILE, + CatchFrequencyRowModel.forExport(), + frequencyRows, + n("tutti.service.multipost.export.frequencies.error")); } + public void storeIndividualObservations() { + + export(INDIVIDUAL_OBSERVATION_FILE, + IndividualObservationRowModel.forExport(), + individualObservationRows, + n("tutti.service.multipost.export.batches.error")); + + export(CARACTERISTIC_FILE, + CaracteristicRowModel.forExport(), + caracteristicRows, + n("tutti.service.multipost.export.batches.error")); + + } + + public void storeAttachments() { - AttachmentRowModel csvAttachmentModel = new AttachmentRowModel(CSV_SEPARATOR); + AttachmentRowModel csvAttachmentModel = AttachmentRowModel.forExport(); File attachmentDirectory = new File(temporaryDirectory, ATTACHMENTS_DIRECTORY); ApplicationIOUtil.forceMkdir(attachmentDirectory, t("tutti.service.multipost.attachment.mkdir.error", attachmentDirectory)); @@ -178,15 +198,16 @@ public class MultiPostExportContext implements MultiPostConstants, Closeable { frequencyRow.setLengthStep(frequency.getLengthStep()); frequencyRow.setNumber(frequency.getNumber()); frequencyRow.setWeight(frequency.getWeight()); + frequencyRow.setSpecies(frequency.getBatch().getSpecies()); frequencyRows.add(frequencyRow); } } - public void addIndividualObservations(String id, IndividualObservationBatch batch) { + public void addIndividualObservations(String batchId, IndividualObservationBatch batch) { IndividualObservationRow row = new IndividualObservationRow(); - row.setBatchId(id); + row.setBatchId(batchId); // on conserve l'id d'export du lot parent de l'observation String speciesOrBenthosBatchId = speciesOrBenthosIdTranslations.get(batch.getBatchId()); @@ -202,16 +223,9 @@ public class MultiPostExportContext implements MultiPostConstants, Closeable { individualObservationRows.add(row); - CaracteristicMap caracteristicMap = batch.getCaracteristics(); - for (Caracteristic caracteristic : caracteristicMap.keySet()) { - CaracteristicRow caracteristicRow = new CaracteristicRow(); - caracteristicRow.setBatchId(id); - caracteristicRow.setCaracteristic(caracteristic); - caracteristicRow.setValue(caracteristicMap.get(caracteristic)); - caracteristicRows.add(caracteristicRow); - } + addCaracteristics(batchId, batch.getCaracteristics()); - addAttachments(id, batch.getIdAsInt(), ObjectTypeCode.SAMPLE); + addAttachments(batchId, batch.getIdAsInt(), ObjectTypeCode.SAMPLE); } @@ -248,14 +262,7 @@ public class MultiPostExportContext implements MultiPostConstants, Closeable { accidentialCatchRows.add(row); - CaracteristicMap caracteristicMap = batch.getCaracteristics(); - for (Caracteristic caracteristic : caracteristicMap.keySet()) { - CaracteristicRow caracteristicRow = new CaracteristicRow(); - caracteristicRow.setBatchId(batchId); - caracteristicRow.setCaracteristic(caracteristic); - caracteristicRow.setValue(caracteristicMap.get(caracteristic)); - caracteristicRows.add(caracteristicRow); - } + addCaracteristics(batchId, batch.getCaracteristics()); addAttachments(batchId, batch.getIdAsInt(), ObjectTypeCode.SAMPLE); @@ -284,14 +291,14 @@ public class MultiPostExportContext implements MultiPostConstants, Closeable { public void storeAccidentalCatches() { export(ACCIDENTAL_CATCHES_FILE, - new AccidentalCatchRowModel(CSV_SEPARATOR), + AccidentalCatchRowModel.forExport(), accidentialCatchRows, n("tutti.service.multipost.export.batches.error")); // export caracteristics export(CARACTERISTIC_FILE, - new CaracteristicRowModel(CSV_SEPARATOR), + CaracteristicRowModel.forExport(), caracteristicRows, n("tutti.service.multipost.export.batches.error")); @@ -300,7 +307,7 @@ public class MultiPostExportContext implements MultiPostConstants, Closeable { public void storeMarineLitterBatches() { export(MARINE_LITTER_FILE, - new MarineLitterRowModel(CSV_SEPARATOR), + MarineLitterRowModel.forExport(), marineLitterRows, n("tutti.service.multipost.export.batches.error")); @@ -309,4 +316,16 @@ public class MultiPostExportContext implements MultiPostConstants, Closeable { protected void addFile(File file) { file2zip.add(file); } + + protected void addCaracteristics(String batchId, CaracteristicMap caracteristicMap) { + + for (Caracteristic caracteristic : caracteristicMap.keySet()) { + CaracteristicRow caracteristicRow = new CaracteristicRow(); + caracteristicRow.setBatchId(batchId); + caracteristicRow.setCaracteristic(caracteristic); + caracteristicRow.setValue(caracteristicMap.get(caracteristic)); + caracteristicRows.add(caracteristicRow); + } + + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostExportService.java index 49a0767..23ba72d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostExportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostExportService.java @@ -40,19 +40,25 @@ 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 org.apache.commons.io.IOUtils; -import org.nuiton.csv.Export; -import org.nuiton.csv.ExportModel; -import org.nuiton.jaxx.application.ApplicationIOUtil; -import org.nuiton.jaxx.application.ApplicationTechnicalException; +import fr.ifremer.tutti.service.catches.multipost.csv.AbstractFishingOperationRow; +import fr.ifremer.tutti.service.catches.multipost.csv.AccidentalCatchRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchBatchRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchBatchRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchWeightsRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchWeightsRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.FishingOperationRow; +import fr.ifremer.tutti.service.catches.multipost.csv.FishingOperationRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.IndividualObservationRow; +import fr.ifremer.tutti.service.catches.multipost.csv.MarineLitterRow; +import fr.ifremer.tutti.service.catches.multipost.csv.MarineLitterWeightRow; +import fr.ifremer.tutti.service.catches.multipost.csv.MarineLitterWeightRowModel; import java.io.File; -import java.io.Writer; import java.util.List; import java.util.Map; import static org.nuiton.i18n.I18n.n; -import static org.nuiton.i18n.I18n.t; /** * Service to export batches from a satellite post into a master post. @@ -92,7 +98,7 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult Integer operationId = operation.getIdAsInt(); if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - try (MultiPostExportContext exportContext = new MultiPostExportContext(file, operation, persistenceService)) { + try (MultiPostExportContext exportContext = new MultiPostExportContext(file, persistenceService)) { // Load data to export @@ -111,7 +117,7 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult exportContext.addAttachments(catchBatch.getId(), catchBatch.getIdAsInt(), ObjectTypeCode.CATCH_BATCH); - CatchBatchRowModel csvModel = new CatchBatchRowModel(CSV_SEPARATOR); + CatchBatchRowModel csvModel = new CatchBatchRowModel(); exportContext.export(CATCH_BATCH_FILE, csvModel, @@ -138,7 +144,7 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult Integer operationId = operation.getIdAsInt(); if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - try (MultiPostExportContext exportContext = new MultiPostExportContext(file, operation, persistenceService)) { + try (MultiPostExportContext exportContext = new MultiPostExportContext(file, persistenceService)) { // Export catch weights + attachments @@ -152,7 +158,7 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult exportContext.addAttachments(catchBatch.getId(), catchBatch.getIdAsInt(), ObjectTypeCode.CATCH_BATCH); exportContext.export(WEIGHTS_FILE, - new CatchWeightsRowModel(CSV_SEPARATOR), + new CatchWeightsRowModel(), Lists.newArrayList(weights), n("tutti.service.multipost.export.weights.error")); @@ -161,7 +167,7 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult BatchContainer<SpeciesBatch> speciesBatchContainer = persistenceService.getRootSpeciesBatch(operationId, false); for (SpeciesBatch batch : speciesBatchContainer.getChildren()) { - createSpeciesRow(exportContext, batch, null, exportFrequencies); + addSpecies(exportContext, batch, null, exportFrequencies); } if (exportIndividualObservations) { @@ -177,6 +183,41 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult } /** + * Export species batches. + * + * @param file the file to export the batches into + * @param operation the operation to export + */ + public void exportSpeciesBatch(File file, + FishingOperation operation, + SpeciesBatch speciesBatch, + boolean exportFrequencies, + boolean exportIndividualObservations) { + + Integer operationId = operation.getIdAsInt(); + if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { + + try (MultiPostExportContext exportContext = new MultiPostExportContext(file, persistenceService)) { + + // Export frequencies + if (exportFrequencies) { + addFrequencies(exportContext, speciesBatch); + exportContext.storeFrequencies(); + } + + // Export individual observations + if (exportIndividualObservations) { + addIndividualObservations(exportContext, speciesBatch); + exportContext.storeIndividualObservations(); + } + + } + + } + + } + + /** * Export benthos batches. * * @param file the file to export the batches into @@ -190,7 +231,7 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult Integer operationId = operation.getIdAsInt(); if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - try (MultiPostExportContext exportContext = new MultiPostExportContext(file, operation, persistenceService)) { + try (MultiPostExportContext exportContext = new MultiPostExportContext(file, persistenceService)) { // Export catch weights @@ -204,7 +245,7 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult exportContext.addAttachments(catchBatch.getId(), catchBatch.getIdAsInt(), ObjectTypeCode.CATCH_BATCH); exportContext.export(WEIGHTS_FILE, - new CatchWeightsRowModel(CSV_SEPARATOR), + new CatchWeightsRowModel(), Lists.newArrayList(weights), n("tutti.service.multipost.export.weights.error")); @@ -213,7 +254,7 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult BatchContainer<BenthosBatch> benthosBatchContainer = persistenceService.getRootBenthosBatch(operationId, false); for (BenthosBatch batch : benthosBatchContainer.getChildren()) { - createBenthosRow(exportContext, batch, null, exportFrequencies); + addBenthos(exportContext, batch, null, exportFrequencies); } if (exportIndividualObservations) { @@ -238,7 +279,7 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult Integer operationId = operation.getIdAsInt(); if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - try (MultiPostExportContext exportContext = new MultiPostExportContext(file, operation, persistenceService)) { + try (MultiPostExportContext exportContext = new MultiPostExportContext(file, persistenceService)) { // export weights @@ -248,7 +289,7 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult exportOperation(weight, operation); exportContext.export(WEIGHTS_FILE, - new MarineLitterWeightRowModel(CSV_SEPARATOR), + new MarineLitterWeightRowModel(), Lists.newArrayList(weight), n("tutti.service.multipost.export.weight.error")); @@ -279,14 +320,14 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult */ public void exportAccidentalCatch(File file, FishingOperation operation) { - try (MultiPostExportContext exportContext = new MultiPostExportContext(file, operation, persistenceService)) { + try (MultiPostExportContext exportContext = new MultiPostExportContext(file, persistenceService)) { // export operation FishingOperationRow foRow = new FishingOperationRow(); exportOperation(foRow, operation); - FishingOperationRowModel foRowModel = new FishingOperationRowModel(CSV_SEPARATOR); + FishingOperationRowModel foRowModel = new FishingOperationRowModel(); exportContext.export(WEIGHTS_FILE, foRowModel, @@ -316,45 +357,68 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult //-- Internal methods --// //------------------------------------------------------------------------// - protected void createSpeciesRow(MultiPostExportContext exportContext, - SpeciesBatch batch, - String parentId, - boolean addFrequencies) { + protected void addSpecies(MultiPostExportContext exportContext, SpeciesBatch batch, String parentId, boolean addFrequencies) { String id = context.generateId(CatchRow.class); exportContext.addSpeciesOrBenthosBatch(id, parentId, batch); if (addFrequencies) { - List<SpeciesBatchFrequency> frequencies = persistenceService.getAllSpeciesBatchFrequency(batch.getIdAsInt()); + List<SpeciesBatchFrequency> frequencies = getFrequencies(batch); exportContext.addFrequencies(id, frequencies); } for (SpeciesBatch child : batch.getChildBatchs()) { - createSpeciesRow(exportContext, child, id, addFrequencies); + addSpecies(exportContext, child, id, addFrequencies); } + } - protected void createBenthosRow(MultiPostExportContext exportContext, - BenthosBatch batch, - String parentId, - boolean addFrequencies) { + protected void addFrequencies(MultiPostExportContext exportContext, SpeciesBatch batch) { + + String id = context.generateId(CatchRow.class); + + List<SpeciesBatchFrequency> frequencies = getFrequencies(batch); + exportContext.addFrequencies(id, frequencies); + + for (SpeciesBatch child : batch.getChildBatchs()) { + addFrequencies(exportContext, child); + } + + } + + protected List<SpeciesBatchFrequency> getFrequencies(SpeciesBatch batch) { + + List<SpeciesBatchFrequency> frequencies = persistenceService.getAllSpeciesBatchFrequency(batch.getIdAsInt()); + frequencies.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(batch)); + return frequencies; + + } + + protected void addBenthos(MultiPostExportContext exportContext, BenthosBatch batch, String parentId, boolean addFrequencies) { String id = context.generateId(CatchRow.class); exportContext.addSpeciesOrBenthosBatch(id, parentId, batch); if (addFrequencies) { - List<BenthosBatchFrequency> frequencies = - persistenceService.getAllBenthosBatchFrequency(batch.getIdAsInt()); + List<BenthosBatchFrequency> frequencies = getFrequencies(batch); exportContext.addFrequencies(id, frequencies); } for (BenthosBatch child : batch.getChildBatchs()) { - createBenthosRow(exportContext, child, id, addFrequencies); + addBenthos(exportContext, child, id, addFrequencies); } } + protected List<BenthosBatchFrequency> getFrequencies(BenthosBatch batch) { + + List<BenthosBatchFrequency> frequencies = persistenceService.getAllBenthosBatchFrequency(batch.getIdAsInt()); + frequencies.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(batch)); + return frequencies; + + } + protected void addIndividualObservations(MultiPostExportContext exportContext, FishingOperation operation) { List<IndividualObservationBatch> individualObservations = @@ -362,9 +426,21 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult for (IndividualObservationBatch batch : individualObservations) { - String id = context.generateId(IndividualObservationRow.class); + exportContext.addIndividualObservations(id, batch); + } + + } + + protected void addIndividualObservations(MultiPostExportContext exportContext, SpeciesBatch speciesOrBenthosBatch) { + + List<IndividualObservationBatch> individualObservations = + persistenceService.getAllIndividualObservationBatchsForBatch(speciesOrBenthosBatch.getIdAsInt()); + + for (IndividualObservationBatch batch : individualObservations) { + + String id = context.generateId(IndividualObservationRow.class); exportContext.addIndividualObservations(id, batch); } @@ -378,23 +454,4 @@ public class MultiPostExportService extends AbstractTuttiService implements Mult afoRow.setDate(operation.getGearShootingStartDate()); } - protected <R> void export(File file, - ExportModel<R> exportModel, - List<R> rows, - String errorMessage) { - Writer writer = ApplicationIOUtil.newWriter( - file, - n("tutti.service.multipost.export.file.writer.error")); - try { - Export export = Export.newExport(exportModel, rows); - export.write(writer); - writer.close(); - - } catch (Exception e) { - throw new ApplicationTechnicalException(t(errorMessage, file), e); - } finally { - IOUtils.closeQuietly(writer); - } - } - } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportContext.java index 132f7f9..0771cc2 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportContext.java @@ -6,6 +6,8 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.TuttiDataContext; import fr.ifremer.tutti.service.TuttiServiceContext; +import fr.ifremer.tutti.service.catches.multipost.csv.AbstractFishingOperationRow; +import fr.ifremer.tutti.service.catches.multipost.csv.AbstractFishingOperationRowModel; import org.apache.commons.lang3.ObjectUtils; import org.nuiton.csv.Import; import org.nuiton.decorator.Decorator; @@ -34,11 +36,11 @@ public class MultiPostImportContext implements MultiPostConstants, Closeable { private final File file; private final TuttiServiceContext context; - private File explodedDirectory; private final FishingOperation operation; protected List<Species> speciesList; protected List<Caracteristic> caracteristics; protected List<Caracteristic> caracteristicsWithProtected; + private File explodedDirectory; public MultiPostImportContext(TuttiServiceContext context, File file, FishingOperation operation) { this.file = file; @@ -110,7 +112,7 @@ public class MultiPostImportContext implements MultiPostConstants, Closeable { } public <FO extends AbstractFishingOperationRow> void checkSameOperation(String fileName, - AbstractFishingOperationRowModel<FO> fishingOperationRowModel) throws IOException { + AbstractFishingOperationRowModel<FO> fishingOperationRowModel) throws IOException { try (Reader reader = Files.newBufferedReader(new File(getExplodedDirectory(), fileName).toPath())) { 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 dc7d74a..499ed46 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 @@ -48,6 +48,7 @@ import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatchs; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatchFrequency; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequencys; @@ -60,10 +61,33 @@ 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.multipost.csv.AccidentalCatchRow; +import fr.ifremer.tutti.service.catches.multipost.csv.AccidentalCatchRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.AttachmentRow; +import fr.ifremer.tutti.service.catches.multipost.csv.AttachmentRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.CaracteristicRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CaracteristicRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchBatchRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchBatchRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchFrequencyRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchFrequencyRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchWeightsRow; +import fr.ifremer.tutti.service.catches.multipost.csv.CatchWeightsRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.FishingOperationRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.IndividualObservationRow; +import fr.ifremer.tutti.service.catches.multipost.csv.IndividualObservationRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.MarineLitterRow; +import fr.ifremer.tutti.service.catches.multipost.csv.MarineLitterRowModel; +import fr.ifremer.tutti.service.catches.multipost.csv.MarineLitterWeightRow; +import fr.ifremer.tutti.service.catches.multipost.csv.MarineLitterWeightRowModel; import fr.ifremer.tutti.service.csv.CaracteristicValueParserFormatter; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; import org.nuiton.csv.Import; +import org.nuiton.decorator.Decorator; +import org.nuiton.jaxx.application.ApplicationBusinessException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.File; @@ -74,8 +98,12 @@ import java.text.ParseException; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.function.Supplier; + +import static org.nuiton.i18n.I18n.t; /** * Service to export batches from a satellite post or import batches @@ -121,7 +149,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult try (MultiPostImportContext importContext = new MultiPostImportContext(context, file, operation)) { //check operation - CatchBatchRowModel weightsModel = new CatchBatchRowModel(CSV_SEPARATOR); + CatchBatchRowModel weightsModel = new CatchBatchRowModel(); importContext.checkSameOperation(CATCH_BATCH_FILE, weightsModel); Map<String, Object> notImportedData = new HashMap<>(); @@ -227,7 +255,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult try (MultiPostImportContext importContext = new MultiPostImportContext(context, file, operation)) { //check operation - CatchWeightsRowModel weightsModel = new CatchWeightsRowModel(CSV_SEPARATOR); + CatchWeightsRowModel weightsModel = new CatchWeightsRowModel(); importContext.checkSameOperation(WEIGHTS_FILE, weightsModel); Map<String, Object> notImportedData = new HashMap<>(); @@ -244,7 +272,21 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult // Import frequencies if (importFrequencies) { - importSpeciesFrequencies(importContext, batches, notImportedBatches); + + ListMultimap<String, SpeciesBatchFrequency> frequencyListMultimap = importFrequencies(importContext, + batches, + notImportedBatches, + SpeciesBatchFrequencys::newSpeciesBatchFrequency); + + for (String batchId : frequencyListMultimap.keySet()) { + + List<SpeciesBatchFrequency> frequencies = frequencyListMultimap.get(batchId); + SpeciesBatch speciesBatch = batches.get(batchId); + frequencies.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(speciesBatch)); + persistenceService.saveSpeciesBatchFrequency(speciesBatch.getIdAsInt(), frequencies); + + } + } // Import indivudal observations @@ -294,7 +336,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult try (Reader reader = importContext.newFileReader(SPECIES_FILE)) { - CatchRowModel csvModel = new CatchRowModel(CSV_SEPARATOR, importContext.getSpeciesList()); + CatchRowModel csvModel = CatchRowModel.forImport(importContext.getSpeciesList()); try (Import<CatchRow> importer = Import.newImport(csvModel, reader)) { @@ -363,42 +405,50 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } - protected void importSpeciesFrequencies(MultiPostImportContext importContext, - Map<String, SpeciesBatch> batches, - Map<String, SpeciesBatch> notImportedBatches) throws IOException { - - ListMultimap<Integer, SpeciesBatchFrequency> frequencyMap = ArrayListMultimap.create(); - - try (Reader reader = importContext.newFileReader(FREQUENCIES_FILE)) { - - CatchFrequencyRowModel frequencyModel = new CatchFrequencyRowModel(CSV_SEPARATOR, importContext.getCaracteristics()); - - try (Import<CatchFrequencyRow> importer = Import.newImport(frequencyModel, reader)) { - - for (CatchFrequencyRow frequencyRow : importer) { - String frequencyRowBatchId = frequencyRow.getBatchId(); - if (notImportedBatches.get(frequencyRowBatchId) == null) { - SpeciesBatch batch = batches.get(frequencyRowBatchId); - if (batch != null) { - SpeciesBatchFrequency frequency = SpeciesBatchFrequencys.newSpeciesBatchFrequency(); - frequency.setLengthStepCaracteristic(frequencyRow.getLengthStepCaracteristic()); - frequency.setLengthStep(frequencyRow.getLengthStep()); - frequency.setNumber(frequencyRow.getNumber()); - frequency.setWeight(frequencyRow.getWeight()); - frequency.setBatch(batch); - frequencyMap.put(batch.getIdAsInt(), frequency); - } - } - } - } - } - - for (Integer batchId : frequencyMap.keySet()) { - List<SpeciesBatchFrequency> frequencies = frequencyMap.get(batchId); - persistenceService.saveSpeciesBatchFrequency(batchId, frequencies); - } - - } +// protected void importSpeciesFrequencies(MultiPostImportContext importContext, +// Map<String, SpeciesBatch> batches, +// Map<String, SpeciesBatch> notImportedBatches) throws IOException { +// +// ListMultimap<Integer, SpeciesBatchFrequency> frequencyMap = ArrayListMultimap.create(); +// +// try (Reader reader = importContext.newFileReader(FREQUENCIES_FILE)) { +// +// CatchFrequencyRowModel frequencyModel = new CatchFrequencyRowModel(CSV_SEPARATOR, importContext.getSpeciesList(), importContext.getCaracteristics()); +// +// try (Import<CatchFrequencyRow> importer = Import.newImport(frequencyModel, reader)) { +// +// for (CatchFrequencyRow frequencyRow : importer) { +// String frequencyRowBatchId = frequencyRow.getBatchId(); +// if (!notImportedBatches.containsKey(frequencyRowBatchId)) { +// +// // not imported +// continue; +// } +// SpeciesBatch batch = batches.get(frequencyRowBatchId); +// if (batch == null) { +// +// // not imported (FIXME Should be an error ?) +// continue; +// } +// +// SpeciesBatchFrequency frequency = SpeciesBatchFrequencys.newSpeciesBatchFrequency(); +// frequency.setLengthStepCaracteristic(frequencyRow.getLengthStepCaracteristic()); +// frequency.setLengthStep(frequencyRow.getLengthStep()); +// frequency.setNumber(frequencyRow.getNumber()); +// frequency.setWeight(frequencyRow.getWeight()); +// frequency.setBatch(batch); +// frequencyMap.put(batch.getIdAsInt(), frequency); +// +// } +// } +// } +// +// for (Integer batchId : frequencyMap.keySet()) { +// List<SpeciesBatchFrequency> frequencies = frequencyMap.get(batchId); +// persistenceService.saveSpeciesBatchFrequency(batchId, frequencies); +// } +// +// } protected void importSpeciesWeights(MultiPostImportContext importContext, CatchWeightsRowModel weightsModel, @@ -448,6 +498,66 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } //------------------------------------------------------------------------// + //-- Import Species Batches data --// + //------------------------------------------------------------------------// + + /** + * Import species batches frequencies or individual observations from a satellite post. + * + * @param file the file to import the batches from + * @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, + 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); + + frequenciesToSave.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(speciesBatch)); + persistenceService.saveSpeciesBatchFrequency(speciesBatch.getIdAsInt(), frequenciesToSave); + } + + // Import indivudal observations + + if (importIndividualObservations) { + + // Import batches + // map containing the batches by their persistence id + Map<String, IndividualObservationBatch> individualObservationsBatches = importIndividualObservationBatches(importContext, speciesBatch); + + // Import caracteristics + + importCaracteristics(importContext, individualObservationsBatches); + + // Persist batches + + persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); + + // Import attachments + + importAttachments(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE); + + } + + return new HashMap<>(); + + } + }); + + } + + //------------------------------------------------------------------------// //-- Import Benthos --// //------------------------------------------------------------------------// @@ -460,12 +570,15 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult */ public Map<String, Object> importBenthos(File file, FishingOperation operation) { + boolean importFrequencies = true; + boolean importIndividualObservations = true; + return persistenceService.invoke(() -> { try (MultiPostImportContext importContext = new MultiPostImportContext(context, file, operation)) { //check operation - CatchWeightsRowModel weightsModel = new CatchWeightsRowModel(CSV_SEPARATOR); + CatchWeightsRowModel weightsModel = new CatchWeightsRowModel(); importContext.checkSameOperation(WEIGHTS_FILE, weightsModel); Map<String, Object> notImportedData = new HashMap<>(); @@ -479,7 +592,47 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult // Import frequencies - importBenthosFrequencies(importContext, batches, notImportedBatches); + if (importFrequencies) { + + ListMultimap<String, BenthosBatchFrequency> frequencyListMultimap = importFrequencies(importContext, + batches, + notImportedBatches, + BenthosBatchFrequencys::newBenthosBatchFrequency); + + for (String batchId : frequencyListMultimap.keySet()) { + + List<BenthosBatchFrequency> frequencies = frequencyListMultimap.get(batchId); + BenthosBatch speciesBatch = batches.get(batchId); + frequencies.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(speciesBatch)); + persistenceService.saveBenthosBatchFrequency(speciesBatch.getIdAsInt(), frequencies); + + } + + } + +// importBenthosFrequencies(importContext, batches, notImportedBatches); + + // Import indivudal observations + + if (importIndividualObservations) { + + // Import batches + // map containing the batches by their persistence id + Map<String, IndividualObservationBatch> individualObservationsBatches = importIndividualObservationBatches(importContext, batches, notImportedBatches); + + // Import caracteristics + + importCaracteristics(importContext, individualObservationsBatches); + + // Persist batches + + persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); + + // Import attachments + + importAttachments(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE); + + } // Import attachments @@ -505,7 +658,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult try (Reader reader = importContext.newFileReader(BENTHOS_FILE)) { - CatchRowModel csvModel = new CatchRowModel(CSV_SEPARATOR, importContext.getSpeciesList()); + CatchRowModel csvModel = CatchRowModel.forImport(importContext.getSpeciesList()); try (Import<CatchRow> importer = Import.newImport(csvModel, reader)) { @@ -577,42 +730,42 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } - protected void importBenthosFrequencies(MultiPostImportContext importContext, - Map<String, BenthosBatch> batches, - Map<String, BenthosBatch> notImportedBatches) throws IOException { - - ListMultimap<Integer, BenthosBatchFrequency> frequencyMap = ArrayListMultimap.create(); - - try (Reader reader = importContext.newFileReader(FREQUENCIES_FILE)) { - - CatchFrequencyRowModel frequencyModel = new CatchFrequencyRowModel(CSV_SEPARATOR, importContext.getCaracteristics()); - try (Import<CatchFrequencyRow> importer = Import.newImport(frequencyModel, reader)) { - - - for (CatchFrequencyRow frequencyRow : importer) { - if (notImportedBatches.get(frequencyRow.getBatchId()) == null) { - BenthosBatch batch = batches.get(frequencyRow.getBatchId()); - if (batch != null) { - BenthosBatchFrequency frequency = BenthosBatchFrequencys.newBenthosBatchFrequency(); - frequency.setLengthStepCaracteristic(frequencyRow.getLengthStepCaracteristic()); - frequency.setLengthStep(frequencyRow.getLengthStep()); - frequency.setNumber(frequencyRow.getNumber()); - frequency.setWeight(frequencyRow.getWeight()); - frequency.setBatch(batch); - frequencyMap.put(batch.getIdAsInt(), frequency); - } - } - } - } - - } - - for (Integer batchId : frequencyMap.keySet()) { - List<BenthosBatchFrequency> frequencies = frequencyMap.get(batchId); - persistenceService.saveBenthosBatchFrequency(batchId, frequencies); - } - - } +// protected void importBenthosFrequencies(MultiPostImportContext importContext, +// Map<String, BenthosBatch> batches, +// Map<String, BenthosBatch> notImportedBatches) throws IOException { +// +// ListMultimap<Integer, BenthosBatchFrequency> frequencyMap = ArrayListMultimap.create(); +// +// try (Reader reader = importContext.newFileReader(FREQUENCIES_FILE)) { +// +// CatchFrequencyRowModel frequencyModel = new CatchFrequencyRowModel(CSV_SEPARATOR, importContext.getSpeciesList(), importContext.getCaracteristics()); +// try (Import<CatchFrequencyRow> importer = Import.newImport(frequencyModel, reader)) { +// +// +// for (CatchFrequencyRow frequencyRow : importer) { +// if (notImportedBatches.get(frequencyRow.getBatchId()) == null) { +// BenthosBatch batch = batches.get(frequencyRow.getBatchId()); +// if (batch != null) { +// BenthosBatchFrequency frequency = BenthosBatchFrequencys.newBenthosBatchFrequency(); +// frequency.setLengthStepCaracteristic(frequencyRow.getLengthStepCaracteristic()); +// frequency.setLengthStep(frequencyRow.getLengthStep()); +// frequency.setNumber(frequencyRow.getNumber()); +// frequency.setWeight(frequencyRow.getWeight()); +// frequency.setBatch(batch); +// frequencyMap.put(batch.getIdAsInt(), frequency); +// } +// } +// } +// } +// +// } +// +// for (Integer batchId : frequencyMap.keySet()) { +// List<BenthosBatchFrequency> frequencies = frequencyMap.get(batchId); +// persistenceService.saveBenthosBatchFrequency(batchId, frequencies); +// } +// +// } protected void importBenthosWeights(MultiPostImportContext importContext, CatchWeightsRowModel weightsModel, @@ -681,7 +834,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult try (MultiPostImportContext importContext = new MultiPostImportContext(context, file, operation)) { //check operation - MarineLitterWeightRowModel weightModel = new MarineLitterWeightRowModel(CSV_SEPARATOR); + MarineLitterWeightRowModel weightModel = new MarineLitterWeightRowModel(); importContext.checkSameOperation(WEIGHTS_FILE, weightModel); Map<String, Object> notImportedData = new HashMap<>(); @@ -723,9 +876,9 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult try (Reader reader = importContext.newFileReader(MARINE_LITTER_FILE)) { - MarineLitterRowModel csvModel = new MarineLitterRowModel(CSV_SEPARATOR, - categoryCaracteristic, - sizeCategoryCaracteristic); + MarineLitterRowModel csvModel = MarineLitterRowModel.forImport( + categoryCaracteristic, + sizeCategoryCaracteristic); try (Import<MarineLitterRow> importer = Import.newImport(csvModel, reader)) { @@ -870,7 +1023,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult try (MultiPostImportContext importContext = new MultiPostImportContext(context, file, operation)) { //check operation - FishingOperationRowModel operationModel = new FishingOperationRowModel(CSV_SEPARATOR); + FishingOperationRowModel operationModel = new FishingOperationRowModel(); importContext.checkSameOperation(WEIGHTS_FILE, operationModel); // Import batches @@ -905,11 +1058,11 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult try (Reader reader = importContext.newFileReader(ACCIDENTAL_CATCHES_FILE)) { - AccidentalCatchRowModel csvModel = new AccidentalCatchRowModel(CSV_SEPARATOR, - importContext.getSpeciesList(), - sexCaracteristic, - deadOrAliveCaracteristic, - importContext.getCaracteristicsWithProtected()); + AccidentalCatchRowModel csvModel = AccidentalCatchRowModel.forImport( + importContext.getSpeciesList(), + sexCaracteristic, + deadOrAliveCaracteristic, + importContext.getCaracteristicsWithProtected()); try (Import<AccidentalCatchRow> importer = Import.newImport(csvModel, reader)) { @@ -1008,7 +1161,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult try (Reader reader = importContext.newFileReader(ATTACHMENTS_FILE)) { AttachmentRowModel attachmentModel = - new AttachmentRowModel(CSV_SEPARATOR, importContext.newFile(ATTACHMENTS_DIRECTORY)); + AttachmentRowModel.forImport(importContext.newFile(ATTACHMENTS_DIRECTORY)); try (Import<AttachmentRow> importer = Import.newImport(attachmentModel, reader)) { for (AttachmentRow row : importer) { @@ -1035,7 +1188,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult try (Reader reader = importContext.newFileReader(CARACTERISTIC_FILE)) { - CaracteristicRowModel caracteristicModel = new CaracteristicRowModel(CSV_SEPARATOR, importContext.getCaracteristicsWithProtected()); + CaracteristicRowModel caracteristicModel = CaracteristicRowModel.forImport(importContext.getCaracteristicsWithProtected()); try (Import<CaracteristicRow> importer = Import.newImport(caracteristicModel, reader)) { @@ -1066,15 +1219,15 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult protected <B extends SpeciesAbleBatch> Map<String, IndividualObservationBatch> importIndividualObservationBatches(MultiPostImportContext importContext, Map<String, B> speciesOrBenthosBatches, - Map<String, SpeciesBatch> notImportedBatches) throws IOException { + Map<String, B> notImportedBatches) throws IOException { Map<String, IndividualObservationBatch> batches = new LinkedHashMap<>(); try (Reader reader = importContext.newFileReader(INDIVIDUAL_OBSERVATION_FILE)) { - IndividualObservationRowModel csvModel = new IndividualObservationRowModel(CSV_SEPARATOR, - importContext.getSpeciesList(), - importContext.getCaracteristicsWithProtected()); + IndividualObservationRowModel csvModel = IndividualObservationRowModel.forImport( + importContext.getSpeciesList(), + importContext.getCaracteristicsWithProtected()); try (Import<IndividualObservationRow> importer = Import.newImport(csvModel, reader)) { @@ -1117,4 +1270,141 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } + protected <B extends SpeciesAbleBatch, F extends SpeciesAbleBatchFrequency> ListMultimap<String, F> importFrequencies(MultiPostImportContext importContext, + Map<String, B> batches, + Map<String, B> notImportedBatches, + Supplier<F> newFrequencySupplier) throws IOException { + + ListMultimap<String, F> frequencyMap = ArrayListMultimap.create(); + + try (Reader reader = importContext.newFileReader(FREQUENCIES_FILE)) { + + CatchFrequencyRowModel frequencyModel = CatchFrequencyRowModel.forImport(importContext.getSpeciesList(), importContext.getCaracteristics()); + + try (Import<CatchFrequencyRow> importer = Import.newImport(frequencyModel, reader)) { + + for (CatchFrequencyRow frequencyRow : importer) { + String frequencyRowBatchId = frequencyRow.getBatchId(); + if (!notImportedBatches.containsKey(frequencyRowBatchId)) { + + // not imported + continue; + } + B batch = batches.get(frequencyRowBatchId); + if (batch == null) { + + // not imported (FIXME Should be an error ?) + continue; + } + + F frequency = newFrequencySupplier.get(); + frequency.setLengthStepCaracteristic(frequencyRow.getLengthStepCaracteristic()); + frequency.setLengthStep(frequencyRow.getLengthStep()); + frequency.setNumber(frequencyRow.getNumber()); + frequency.setWeight(frequencyRow.getWeight()); +// frequency.setBatch(batch); + frequencyMap.put(frequencyRowBatchId, frequency); + + } + } + } + + return frequencyMap; + + } + + protected <B extends SpeciesAbleBatch, F extends SpeciesAbleBatchFrequency> List<F> importFrequencies(MultiPostImportContext importContext, B speciesBatch, Supplier<F> newFrequencySupplier) throws IOException { + + List<F> frequenciesToSave = new LinkedList<>(); + + try (Reader reader = importContext.newFileReader(FREQUENCIES_FILE)) { + + CatchFrequencyRowModel frequencyModel = CatchFrequencyRowModel.forImport(importContext.getSpeciesList(), importContext.getCaracteristics()); + + try (Import<CatchFrequencyRow> importer = Import.newImport(frequencyModel, reader)) { + + Integer requiredSpeciesId = speciesBatch.getSpecies().getIdAsInt(); + + for (CatchFrequencyRow frequencyRow : importer) { + + Integer speciesId = frequencyRow.getSpecies().getIdAsInt(); + + if (!requiredSpeciesId.equals(speciesId)) { + + // Bad species, import fail + Decorator<Species> fishingOperationDecorator = context.getService(DecoratorService.class).getDecoratorByType(Species.class); + throw new ApplicationBusinessException(t("tutti.service.multipost.import.wrongSpecies.error", + fishingOperationDecorator.toString(speciesBatch.getSpecies()))); + + } + + F frequency = newFrequencySupplier.get(); + frequency.setLengthStepCaracteristic(frequencyRow.getLengthStepCaracteristic()); + frequency.setLengthStep(frequencyRow.getLengthStep()); + frequency.setNumber(frequencyRow.getNumber()); + frequency.setWeight(frequencyRow.getWeight()); +// frequency.setBatch(speciesBatch); + frequenciesToSave.add(frequency); + + } + } + + } + + return frequenciesToSave; + + } + + protected <B extends SpeciesAbleBatch> Map<String, IndividualObservationBatch> importIndividualObservationBatches(MultiPostImportContext importContext, + B speciesOfBenthosBatch) throws IOException { + + Map<String, IndividualObservationBatch> batches = new LinkedHashMap<>(); + + try (Reader reader = importContext.newFileReader(INDIVIDUAL_OBSERVATION_FILE)) { + + IndividualObservationRowModel csvModel = IndividualObservationRowModel.forImport( + importContext.getSpeciesList(), + importContext.getCaracteristicsWithProtected()); + + try (Import<IndividualObservationRow> importer = Import.newImport(csvModel, reader)) { + + FishingOperation operation = importContext.getOperation(); + + Integer speciesOrBenthosBatchId = speciesOfBenthosBatch.getSpecies().getIdAsInt(); + + for (IndividualObservationRow row : importer) { + + if (!speciesOrBenthosBatchId.equals(row.getSpecies().getIdAsInt())) { + + // Bad species, import fail + Decorator<Species> fishingOperationDecorator = context.getService(DecoratorService.class).getDecoratorByType(Species.class); + throw new ApplicationBusinessException(t("tutti.service.multipost.import.wrongSpecies.error", + fishingOperationDecorator.toString(speciesOfBenthosBatch.getSpecies()))); + + } + + // create batch + IndividualObservationBatch batch = IndividualObservationBatchs.newIndividualObservationBatch(); + batch.setFishingOperation(operation); + + batch.setBatchId(speciesOrBenthosBatchId); + + batch.setSpecies(row.getSpecies()); + batch.setWeight(row.getWeight()); + batch.setSize(row.getSize()); + batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic()); + batch.setComment(row.getComment()); + batch.setCaracteristics(new CaracteristicMap()); + + batches.put(row.getBatchId(), batch); + } + + } + + } + + return batches; + + } + } \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AbstractFishingOperationRow.java similarity index 97% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AbstractFishingOperationRow.java index 98225ba..e95aa8f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AbstractFishingOperationRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AbstractFishingOperationRowModel.java similarity index 81% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AbstractFishingOperationRowModel.java index 143092e..062007f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AbstractFishingOperationRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -22,18 +22,18 @@ package fr.ifremer.tutti.service.catches.multipost; * #L% */ -import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.catches.multipost.MultiPostConstants; import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; /** * @author Kevin Morin - kmorin@codelutin.com * @since 2.3.1 */ -public abstract class AbstractFishingOperationRowModel<FO extends AbstractFishingOperationRow> - extends AbstractTuttiImportExportModel<FO> { +public abstract class AbstractFishingOperationRowModel<FO extends AbstractFishingOperationRow> extends AbstractTuttiImportExportModel<FO> { - public AbstractFishingOperationRowModel(char separator) { - super(separator); + public AbstractFishingOperationRowModel() { + super(MultiPostConstants.CSV_SEPARATOR); newColumnForImportExport(FishingOperationRow.STATION_NUMBER); newColumnForImportExport(FishingOperationRow.OPERATION_NUMBER, TuttiCsvUtil.INTEGER); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AccidentalCatchRow.java similarity index 98% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AccidentalCatchRow.java index 24e7b2e..cb0da54 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AccidentalCatchRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -34,24 +34,15 @@ import java.io.Serializable; */ public class AccidentalCatchRow implements Serializable { - private static final long serialVersionUID = 1L; - public static final String BATCH_ID = "batchId"; - public static final String SPECIES = "species"; - public static final String GENDER = "gender"; - public static final String WEIGHT = "weight"; - public static final String SIZE = "size"; - public static final String LENGTH_STEP_CARACTERISTIC = "lengthStepCaracteristic"; - public static final String DEAD_OR_ALIVE = "deadOrAlive"; - public static final String COMMENT = "comment"; - + private static final long serialVersionUID = 1L; protected String batchId; protected Species species; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AccidentalCatchRowModel.java similarity index 73% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AccidentalCatchRowModel.java index 57f622c..c86c874 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AccidentalCatchRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.catches.multipost; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.catches.multipost.MultiPostConstants; import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import fr.ifremer.tutti.service.csv.CaracteristicValueParserFormatter; import fr.ifremer.tutti.service.csv.TuttiCsvUtil; @@ -38,16 +39,11 @@ import java.util.List; */ public class AccidentalCatchRowModel extends AbstractTuttiImportExportModel<AccidentalCatchRow> { - public AccidentalCatchRowModel(char separator) { - this(separator, null, null, null, null); - } - - public AccidentalCatchRowModel(char separator, - List<Species> species, - Caracteristic sexCaracteristic, - Caracteristic dedOrAliveCaracteristic, - List<Caracteristic> lengthStepCaracteristics) { - super(separator); + private AccidentalCatchRowModel(List<Species> species, + Caracteristic sexCaracteristic, + Caracteristic dedOrAliveCaracteristic, + List<Caracteristic> lengthStepCaracteristics) { + super(MultiPostConstants.CSV_SEPARATOR); newColumnForImportExport(AccidentalCatchRow.BATCH_ID); @@ -71,6 +67,16 @@ public class AccidentalCatchRowModel extends AbstractTuttiImportExportModel<Acci } + public static AccidentalCatchRowModel forExport() { + return new AccidentalCatchRowModel( null, null, null, null); + } + + public static AccidentalCatchRowModel forImport(List<Species> species, Caracteristic sexCaracteristic, + Caracteristic dedOrAliveCaracteristic, + List<Caracteristic> lengthStepCaracteristics) { + return new AccidentalCatchRowModel(species, sexCaracteristic, dedOrAliveCaracteristic, lengthStepCaracteristics); + } + @Override public AccidentalCatchRow newEmptyInstance() { return new AccidentalCatchRow(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AttachmentRow.java similarity index 97% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AttachmentRow.java index 2137831..0f14605 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AttachmentRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -31,16 +31,11 @@ import java.io.Serializable; */ public class AttachmentRow implements Serializable { - private static final long serialVersionUID = 1L; - public static final String ATTACHMENT_NAME = "name"; - public static final String ATTACHMENT_BATCH_ID = "batchId"; - public static final String ATTACHMENT_COMMENT = "comment"; - public static final String ATTACHMENT_FILE = "file"; - + private static final long serialVersionUID = 1L; protected String name; protected String batchId; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AttachmentRowModel.java similarity index 81% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AttachmentRowModel.java index de1ad8d..37efc56 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/AttachmentRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -22,6 +22,7 @@ package fr.ifremer.tutti.service.catches.multipost; * #L% */ +import fr.ifremer.tutti.service.catches.multipost.MultiPostConstants; import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import org.nuiton.csv.ValueFormatter; @@ -33,12 +34,8 @@ import java.io.File; */ public class AttachmentRowModel extends AbstractTuttiImportExportModel<AttachmentRow> { - public AttachmentRowModel(char separator) { - this(separator, null); - } - - public AttachmentRowModel(char separator, final File directory) { - super(separator); + private AttachmentRowModel(final File directory) { + super(MultiPostConstants.CSV_SEPARATOR); newColumnForImportExport(AttachmentRow.ATTACHMENT_BATCH_ID); @@ -61,6 +58,14 @@ public class AttachmentRowModel extends AbstractTuttiImportExportModel<Attachmen } + public static AttachmentRowModel forExport() { + return new AttachmentRowModel(null); + } + + public static AttachmentRowModel forImport(File directory) { + return new AttachmentRowModel(directory); + } + @Override public AttachmentRow newEmptyInstance() { return new AttachmentRow(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CaracteristicRow.java similarity index 96% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CaracteristicRow.java index 3d59513..4202caa 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CaracteristicRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -32,14 +32,10 @@ import java.io.Serializable; */ public class CaracteristicRow implements Serializable { - private static final long serialVersionUID = 1L; - public static final String BATCH_ID = "batchId"; - public static final String CARACTERISTIC = "caracteristic"; - public static final String VALUE = "value"; - + private static final long serialVersionUID = 1L; protected String batchId; protected Caracteristic caracteristic; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CaracteristicRowModel.java similarity index 77% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CaracteristicRowModel.java index 61c8cff..4df2f0f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CaracteristicRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -23,6 +23,7 @@ package fr.ifremer.tutti.service.catches.multipost; */ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.service.catches.multipost.MultiPostConstants; import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import fr.ifremer.tutti.service.csv.TuttiCsvUtil; @@ -34,12 +35,8 @@ import java.util.List; */ public class CaracteristicRowModel extends AbstractTuttiImportExportModel<CaracteristicRow> { - public CaracteristicRowModel(char separator) { - this(separator, null); - } - - public CaracteristicRowModel(char separator, List<Caracteristic> caracteristics) { - super(separator); + private CaracteristicRowModel(List<Caracteristic> caracteristics) { + super(MultiPostConstants.CSV_SEPARATOR); newColumnForImportExport(CaracteristicRow.BATCH_ID); @@ -51,6 +48,14 @@ public class CaracteristicRowModel extends AbstractTuttiImportExportModel<Caract } + public static CaracteristicRowModel forExport() { + return new CaracteristicRowModel(null); + } + + public static CaracteristicRowModel forImport(List<Caracteristic> caracteristics) { + return new CaracteristicRowModel(caracteristics); + } + @Override public CaracteristicRow newEmptyInstance() { return new CaracteristicRow(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchBatchRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchBatchRow.java similarity index 98% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchBatchRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchBatchRow.java index a092722..155af3c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchBatchRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchBatchRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchBatchRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchBatchRowModel.java similarity index 93% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchBatchRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchBatchRowModel.java index 503ac9e..2dc41cb 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchBatchRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchBatchRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -34,8 +34,7 @@ import fr.ifremer.tutti.service.csv.TuttiCsvUtil; */ public class CatchBatchRowModel extends AbstractFishingOperationRowModel<CatchBatchRow> { - public CatchBatchRowModel(char separator) { - super(separator); + public CatchBatchRowModel() { newColumnForImportExport(CatchBatchRow.CATCH_TOTAL_WEIGHT, TuttiCsvUtil.WEIGHT_PARSER_FORMATTER); newColumnForImportExport(CatchBatchRow.CATCH_TOTAL_REJECTED_WEIGHT, TuttiCsvUtil.WEIGHT_PARSER_FORMATTER); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchFrequencyRow.java similarity index 87% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchFrequencyRow.java index c0abceb..665011c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchFrequencyRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -23,6 +23,7 @@ package fr.ifremer.tutti.service.catches.multipost; */ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Species; import java.io.Serializable; @@ -32,18 +33,13 @@ import java.io.Serializable; */ public class CatchFrequencyRow implements Serializable { - private static final long serialVersionUID = 1L; - public static final String BATCH_ID = "batchId"; - public static final String FREQUENCY_LENGTH_STEP_CARACTERISTIC = "lengthStepCaracteristic"; - public static final String FREQUENCY_LENGTH_STEP = "lengthStep"; - public static final String FREQUENCY_WEIGHT = "weight"; - public static final String FREQUENCY_NUMBER = "number"; - + public static final String SPECIES = "species"; + private static final long serialVersionUID = 1L; protected String batchId; protected Caracteristic lengthStepCaracteristic; @@ -54,6 +50,8 @@ public class CatchFrequencyRow implements Serializable { protected Integer number; + protected Species species; + public String getBatchId() { return batchId; } @@ -93,4 +91,12 @@ public class CatchFrequencyRow implements Serializable { public void setNumber(Integer number) { this.number = number; } + + public Species getSpecies() { + return species; + } + + public void setSpecies(Species species) { + this.species = species; + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchFrequencyRowModel.java similarity index 70% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchFrequencyRowModel.java index 7e5522a..4bd9ec7 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchFrequencyRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -23,6 +23,8 @@ package fr.ifremer.tutti.service.catches.multipost; */ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.catches.multipost.MultiPostConstants; import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import fr.ifremer.tutti.service.csv.TuttiCsvUtil; @@ -36,12 +38,9 @@ import java.util.List; */ public class CatchFrequencyRowModel extends AbstractTuttiImportExportModel<CatchFrequencyRow> { - public CatchFrequencyRowModel(char separator) { - this(separator, null); - } + private CatchFrequencyRowModel(List<Species> species, List<Caracteristic> caracteristics) { - public CatchFrequencyRowModel(char separator, List<Caracteristic> caracteristics) { - super(separator); + super(MultiPostConstants.CSV_SEPARATOR); newColumnForImportExport(CatchFrequencyRow.BATCH_ID); @@ -54,6 +53,17 @@ public class CatchFrequencyRowModel extends AbstractTuttiImportExportModel<Catch newColumnForImportExport(CatchFrequencyRow.FREQUENCY_WEIGHT, TuttiCsvUtil.WEIGHT_PARSER_FORMATTER); + newColumnForExport(CatchFrequencyRow.SPECIES, TuttiCsvUtil.SPECIES_TECHNICAL_FORMATTER); + newSpeciesForeignKeyColumn(CatchFrequencyRow.SPECIES, species); + + } + + public static CatchFrequencyRowModel forExport() { + return new CatchFrequencyRowModel(null, null); + } + + public static CatchFrequencyRowModel forImport(List<Species> species, List<Caracteristic> caracteristics) { + return new CatchFrequencyRowModel(species, caracteristics); } @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchRow.java similarity index 98% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchRow.java index 8f38c15..08841ea 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -34,28 +34,17 @@ import java.io.Serializable; */ public class CatchRow implements Serializable { - private static final long serialVersionUID = 1L; - public static final String ID = "id"; - public static final String PARENT_ID = "parentId"; - public static final String SPECIES = "species"; - public static final String CATEGORY_ID = "categoryId"; - public static final String CATEGORY_VALUE = "categoryValue"; - public static final String CATEGORY_WEIGHT = "categoryWeight"; - public static final String WEIGHT = "weight"; - public static final String NUMBER = "number"; - public static final String COMMENT = "comment"; - public static final String TO_CONFIRM = "toConfirm"; - + private static final long serialVersionUID = 1L; protected String id; protected String parentId; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchRowModel.java similarity index 83% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchRowModel.java index e8eb6a7..df7c37a 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -23,8 +23,9 @@ package fr.ifremer.tutti.service.catches.multipost; */ import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.catches.multipost.MultiPostConstants; import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; import java.util.List; @@ -36,12 +37,8 @@ import java.util.List; */ public class CatchRowModel extends AbstractTuttiImportExportModel<CatchRow> { - public CatchRowModel(char separator) { - this(separator, null); - } - - public CatchRowModel(char separator, List<Species> species) { - super(separator); + private CatchRowModel(List<Species> species) { + super(MultiPostConstants.CSV_SEPARATOR); newColumnForImportExport(CatchRow.ID); @@ -67,6 +64,14 @@ public class CatchRowModel extends AbstractTuttiImportExportModel<CatchRow> { } + public static CatchRowModel forExport() { + return new CatchRowModel(null); + } + + public static CatchRowModel forImport(List<Species> species) { + return new CatchRowModel(species); + } + @Override public CatchRow newEmptyInstance() { return new CatchRow(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchWeightsRow.java similarity index 97% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchWeightsRow.java index 654bb46..0d15ba2 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchWeightsRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchWeightsRowModel.java similarity index 91% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchWeightsRowModel.java index 9842c97..09f949e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/CatchWeightsRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -30,8 +30,7 @@ import fr.ifremer.tutti.service.csv.TuttiCsvUtil; */ public class CatchWeightsRowModel extends AbstractFishingOperationRowModel<CatchWeightsRow> { - public CatchWeightsRowModel(char separator) { - super(separator); + public CatchWeightsRowModel() { newColumnForImportExport(CatchWeightsRow.TOTAL_SORTED_WEIGHT, TuttiCsvUtil.WEIGHT_PARSER_FORMATTER); newColumnForImportExport(CatchWeightsRow.INERT_WEIGHT, TuttiCsvUtil.WEIGHT_PARSER_FORMATTER); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/FishingOperationRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/FishingOperationRow.java similarity index 94% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/FishingOperationRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/FishingOperationRow.java index 172263b..76b404b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/FishingOperationRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/FishingOperationRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/FishingOperationRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/FishingOperationRowModel.java similarity index 88% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/FishingOperationRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/FishingOperationRowModel.java index c19bbc2..909fcde 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/FishingOperationRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/FishingOperationRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -28,10 +28,6 @@ package fr.ifremer.tutti.service.catches.multipost; */ public class FishingOperationRowModel extends AbstractFishingOperationRowModel<FishingOperationRow> { - public FishingOperationRowModel(char separator) { - super(separator); - } - @Override public FishingOperationRow newEmptyInstance() { return new FishingOperationRow(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRow.java similarity index 98% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRow.java index 4828282..82adf9e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -33,26 +33,18 @@ import java.io.Serializable; */ public class IndividualObservationRow implements Serializable { - private static final long serialVersionUID = 1L; - public static final String BATCH_ID = "batchId"; - public static final String SPECIES_BATCH_ID = "speciesBatchId"; - public static final String SPECIES = "species"; - public static final String WEIGHT = "weight"; - public static final String SIZE = "size"; - public static final String LENGTH_STEP_CARACTERISTIC = "lengthStepCaracteristic"; + public static final String COMMENT = "comment"; // public static final String SAMPLING_CODE = "samplingCode"; // // public static final String CALCIFIED_PIECE_SAMPLING_CODE = "calcifiedPieceSamplingCode"; - - public static final String COMMENT = "comment"; - + private static final long serialVersionUID = 1L; protected String batchId; protected String speciesBatchId; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRowModel.java similarity index 78% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRowModel.java index 652a718..d188147 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.catches.multipost; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.catches.multipost.MultiPostConstants; import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import fr.ifremer.tutti.service.csv.TuttiCsvUtil; @@ -37,12 +38,8 @@ import java.util.List; */ public class IndividualObservationRowModel extends AbstractTuttiImportExportModel<IndividualObservationRow> { - public IndividualObservationRowModel(char separator) { - this(separator, null, null); - } - - public IndividualObservationRowModel(char separator, List<Species> species, List<Caracteristic> lengthStepCaracteristics) { - super(separator); + private IndividualObservationRowModel(List<Species> species, List<Caracteristic> lengthStepCaracteristics) { + super(MultiPostConstants.CSV_SEPARATOR); newColumnForImportExport(IndividualObservationRow.BATCH_ID); newColumnForImportExport(IndividualObservationRow.SPECIES_BATCH_ID); @@ -61,6 +58,14 @@ public class IndividualObservationRowModel extends AbstractTuttiImportExportMode } + public static IndividualObservationRowModel forExport() { + return new IndividualObservationRowModel(null, null); + } + + public static IndividualObservationRowModel forImport(List<Species> species, List<Caracteristic> lengthStepCaracteristics) { + return new IndividualObservationRowModel(species, lengthStepCaracteristics); + } + @Override public IndividualObservationRow newEmptyInstance() { return new IndividualObservationRow(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterRow.java similarity index 97% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterRow.java index 403cf3a..06fb3f4 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -32,20 +32,13 @@ import java.io.Serializable; */ public class MarineLitterRow implements Serializable { - private static final long serialVersionUID = 1L; - public static final String BATCH_ID = "batchId"; - public static final String CATEGORY = "category"; - public static final String SIZE_CATEGORY = "sizeCategory"; - public static final String NUMBER = "number"; - public static final String WEIGHT = "weight"; - public static final String COMMENT = "comment"; - + private static final long serialVersionUID = 1L; protected String batchId; protected CaracteristicQualitativeValue category; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterRowModel.java similarity index 76% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterRowModel.java index b33de3a..89414ef 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -23,6 +23,7 @@ package fr.ifremer.tutti.service.catches.multipost; */ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.service.catches.multipost.MultiPostConstants; import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import fr.ifremer.tutti.service.csv.CaracteristicValueParserFormatter; import fr.ifremer.tutti.service.csv.TuttiCsvUtil; @@ -33,12 +34,8 @@ import fr.ifremer.tutti.service.csv.TuttiCsvUtil; */ public class MarineLitterRowModel extends AbstractTuttiImportExportModel<MarineLitterRow> { - public MarineLitterRowModel(char separator) { - this(separator, null, null); - } - - public MarineLitterRowModel(char separator, Caracteristic categoryCaracteristic, Caracteristic sizeCategoryCaracteristic) { - super(separator); + private MarineLitterRowModel(Caracteristic categoryCaracteristic, Caracteristic sizeCategoryCaracteristic) { + super(MultiPostConstants.CSV_SEPARATOR); newColumnForImportExport(MarineLitterRow.BATCH_ID); @@ -55,6 +52,14 @@ public class MarineLitterRowModel extends AbstractTuttiImportExportModel<MarineL newColumnForImportExport(MarineLitterRow.COMMENT); } + public static MarineLitterRowModel forExport() { + return new MarineLitterRowModel(null, null); + } + + public static MarineLitterRowModel forImport(Caracteristic categoryCaracteristic, Caracteristic sizeCategoryCaracteristic) { + return new MarineLitterRowModel(categoryCaracteristic, sizeCategoryCaracteristic); + } + @Override public MarineLitterRow newEmptyInstance() { return new MarineLitterRow(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterWeightRow.java similarity index 95% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRow.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterWeightRow.java index 7216d36..cd4b394 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterWeightRow.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterWeightRowModel.java similarity index 90% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRowModel.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterWeightRowModel.java index d8e9cb0..405c231 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/MarineLitterWeightRowModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.catches.multipost; +package fr.ifremer.tutti.service.catches.multipost.csv; /* * #%L @@ -30,8 +30,7 @@ import fr.ifremer.tutti.service.csv.TuttiCsvUtil; */ public class MarineLitterWeightRowModel extends AbstractFishingOperationRowModel<MarineLitterWeightRow> { - public MarineLitterWeightRowModel(char separator) { - super(separator); + public MarineLitterWeightRowModel() { newColumnForImportExport(MarineLitterWeightRow.TOTAL_WEIGHT, TuttiCsvUtil.WEIGHT_PARSER_FORMATTER); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.