branch develop updated (66382fd -> da73b68)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git from 66382fd Livrable #8273 Merge branch 'feature/8273' into develop new a49e2f2 Nettoyage de code et début de mise ne place de la génération des mensurations lors d'un import multi-poste espèces - observation seulement (See #8278) new f7e2492 génération des mensurations quand on est en mode de recopie taille ou tout (refs #8278) new 2a04488 on fait un check pour vérifier que le poids est là (fixes #8278) new da73b68 Livrable #8278 Merge branch 'feature/8278' into develop The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit da73b684c76ae99c9597eebccf97e76326570cfe Merge: 66382fd 2a04488 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 26 15:19:16 2016 +0200 Livrable #8278 Merge branch 'feature/8278' into develop commit 2a0448834d79db0c7454ad77e3e6d998d79afeda Author: Kevin Morin <morin@codelutin.com> Date: Tue Apr 26 14:30:34 2016 +0200 on fait un check pour vérifier que le poids est là (fixes #8278) commit f7e24929d7e010c8c0c1b8ebf2c1a1d3338a8712 Author: Kevin Morin <morin@codelutin.com> Date: Tue Apr 26 14:05:41 2016 +0200 génération des mensurations quand on est en mode de recopie taille ou tout (refs #8278) commit a49e2f29cf99b6070d508c0fdb927d69398a766e Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 26 11:01:25 2016 +0200 Nettoyage de code et début de mise ne place de la génération des mensurations lors d'un import multi-poste espèces - observation seulement (See #8278) Summary of changes: .../catches/multipost/MultiPostImportService.java | 571 ++++++++++----------- .../resources/i18n/tutti-service_en_GB.properties | 1 + .../resources/i18n/tutti-service_fr_FR.properties | 1 + 3 files changed, 271 insertions(+), 302 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit a49e2f29cf99b6070d508c0fdb927d69398a766e Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 26 11:01:25 2016 +0200 Nettoyage de code et début de mise ne place de la génération des mensurations lors d'un import multi-poste espèces - observation seulement (See #8278) --- .../catches/multipost/MultiPostImportService.java | 508 +++++++++------------ 1 file changed, 206 insertions(+), 302 deletions(-) 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 80fd69b..6f2f299 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 @@ -37,6 +37,7 @@ import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.Attachments; import fr.ifremer.tutti.persistence.entities.data.BatchContainer; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatchs; @@ -80,6 +81,7 @@ 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.mutable.MutableFloat; import org.apache.commons.lang3.tuple.Pair; import org.nuiton.csv.Import; import org.nuiton.jaxx.application.ApplicationBusinessException; @@ -97,6 +99,7 @@ import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.TreeMap; import java.util.function.Supplier; import static org.nuiton.i18n.I18n.t; @@ -289,21 +292,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult 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); + importIndividualObservations(importContext, importFrequencies, batches, notImportedBatches, speciesSaveFrequencyMethod); } @@ -324,6 +313,27 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } + interface SaveFrequencyMethod { + + + List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(Integer speciesBatchId, List<SpeciesBatchFrequency> frequencies); + + } + + private final SaveFrequencyMethod speciesSaveFrequencyMethod = new SaveFrequencyMethod() { + @Override + public List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(Integer speciesBatchId, List<SpeciesBatchFrequency> frequencies) { + return persistenceService.saveSpeciesBatchFrequency(speciesBatchId, frequencies); + } + }; + + private final SaveFrequencyMethod benthosSaveFrequencyMethod = new SaveFrequencyMethod() { + @Override + public List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(Integer speciesBatchId, List<SpeciesBatchFrequency> frequencies) { + return persistenceService.saveBenthosBatchFrequency(speciesBatchId, frequencies); + } + }; + protected Map<String, SpeciesBatch> importSpeciesBatches(MultiPostImportContext importContext, BatchContainer<SpeciesBatch> speciesBatches, Map<String, SpeciesBatch> notImportedBatches) throws IOException { @@ -401,51 +411,6 @@ 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.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, Map<String, Object> notImportedData) throws IOException { @@ -510,51 +475,11 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult boolean importFrequencies, boolean importIndividualObservations) { - return persistenceService.invoke(() -> { - - try (MultiPostImportContext importContext = new MultiPostImportContext(context, file, operation)) { - - // Import frequencies - - List<SpeciesBatchFrequency> frequenciesToSave = new ArrayList<>(); - - if (importFrequencies) { - frequenciesToSave.addAll(importFrequencies(importContext, speciesBatch, SpeciesBatchFrequencys::newSpeciesBatchFrequency)); - frequenciesToSave.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(speciesBatch)); - } - - // Import indivudal observations - - List<IndividualObservationBatch> individualObservations = new ArrayList<>(); - - Multimap<Integer, File> attachmentFiles = HashMultimap.create(); - - if (importIndividualObservations) { - - // Import batches - // map containing the batches by their persistence id - Map<String, IndividualObservationBatch> individualObservationsBatches = importIndividualObservationBatches(importContext, speciesBatch); - - // Import caracteristics - - importCaracteristics(importContext, individualObservationsBatches); - - individualObservations.addAll(individualObservationsBatches.values()); - - // Persist batches - -// persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); - - // Import attachments - - attachmentFiles.putAll(getAttachmentFiles(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE)); - - } - - return new MultiPostImportResult(frequenciesToSave, individualObservations, attachmentFiles); - - } - }); + return importSpeciesOrBenthosBatch(file, + operation, + speciesBatch, + importFrequencies, + importIndividualObservations); } @@ -608,27 +533,11 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } -// 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); + importIndividualObservations(importContext, importFrequencies, batches, notImportedBatches, speciesSaveFrequencyMethod); } @@ -728,43 +637,6 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } -// protected void importBenthosFrequencies(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) { -// if (notImportedBatches.get(frequencyRow.getBatchId()) == null) { -// SpeciesBatch batch = batches.get(frequencyRow.getBatchId()); -// if (batch != null) { -// SpeciesBatchFrequency 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<SpeciesBatchFrequency> frequencies = frequencyMap.get(batchId); -// persistenceService.saveBenthosBatchFrequency(batchId, frequencies); -// } -// -// } - protected void importBenthosWeights(MultiPostImportContext importContext, CatchWeightsRowModel weightsModel, Map<String, Object> notImportedData) throws IOException { @@ -818,9 +690,6 @@ 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. * @@ -834,54 +703,13 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult boolean importFrequencies, boolean importIndividualObservations) { - return persistenceService.invoke(() -> { + return importSpeciesOrBenthosBatch(file, + operation, + speciesBatch, + importFrequencies, + importIndividualObservations); - try (MultiPostImportContext importContext = new MultiPostImportContext(context, file, operation)) { - - // Import frequencies - - List<SpeciesBatchFrequency> frequenciesToSave = new ArrayList<>(); - - if (importFrequencies) { - frequenciesToSave.addAll(importFrequencies(importContext, speciesBatch, SpeciesBatchFrequencys::newSpeciesBatchFrequency)); - frequenciesToSave.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(speciesBatch)); - } - - // Import indivudal observations - - List<IndividualObservationBatch> individualObservations = new ArrayList<>(); - - Multimap<Integer, File> attachmentFiles = HashMultimap.create(); - - if (importIndividualObservations) { - - // Import batches - // map containing the batches by their persistence id - Map<String, IndividualObservationBatch> individualObservationsBatches = importIndividualObservationBatches(importContext, speciesBatch); - - // Import caracteristics - - importCaracteristics(importContext, individualObservationsBatches); - - individualObservations.addAll(individualObservationsBatches.values()); - - // Persist batches - -// persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); - - // Import attachments - - attachmentFiles.putAll(getAttachmentFiles(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE)); - - } - - return new MultiPostImportResult(frequenciesToSave, individualObservations, attachmentFiles); - - } - - }); - } @@ -1030,52 +858,6 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } //------------------------------------------------------------------------// - //-- Import individual observations --// - //------------------------------------------------------------------------// - -// protected void importIndividualObservationCaracteristics(File file, -// Map<String, IndividualObservationBatch> batches, -// List<Caracteristic> caracteristics) throws IOException { -// -// -// try (Reader reader = importContext.newFileReaderCARACTERISTIC_FILE).toPath())) { -// -// CaracteristicRowModel caracteristicModel = new CaracteristicRowModel(CSV_SEPARATOR, caracteristics); -// -// try (Import<CaracteristicRow> importer = Import.newImport(caracteristicModel, reader)) { -// -// for (CaracteristicRow caracteristicRow : importer) { -// IndividualObservationBatch batch = batches.get(caracteristicRow.getBatchId()); -// if (batch != null) { -// Caracteristic caracteristic = caracteristicRow.getCaracteristic(); -// CaracteristicValueParserFormatter parser = CaracteristicValueParserFormatter.newParser(caracteristic); -// Serializable value = caracteristicRow.getValue(); -// try { -// parser.parse(String.valueOf(value)); -// } catch (ParseException e) { -// throw new ApplicationTechnicalException("Could not parse caracteristic value: " + value, e); -// } -// // switch (caracteristic.getCaracteristicType()) { -// // case QUALITATIVE: -// // value = CaracteristicQualitativeValues.getQualitativeValue(caracteristic, Integer.parseInt(value.toString())); -// // break; -// // -// // case NUMBER: -// // value = Float.parseFloat(value.toString()); -// // break; -// // } -// CaracteristicMap map = batch.getCaracteristics(); -// map.put(caracteristic, value); -// } -// } -// -// } -// -// } -// -// } - - //------------------------------------------------------------------------// //-- Import Accidental catches --// //------------------------------------------------------------------------// @@ -1287,8 +1069,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult return result; } - protected <B extends SampleEntity> void importCaracteristics(MultiPostImportContext importContext, - Map<String, B> batches) throws IOException { + protected <B extends SampleEntity> void importCaracteristics(MultiPostImportContext importContext, Map<String, B> batches) throws IOException { try (Reader reader = importContext.newFileReader(CARACTERISTIC_FILE)) { @@ -1321,9 +1102,52 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } - protected Map<String, IndividualObservationBatch> importIndividualObservationBatches(MultiPostImportContext importContext, - Map<String, SpeciesBatch> speciesOrBenthosBatches, - Map<String, SpeciesBatch> notImportedBatches) throws IOException { + private ListMultimap<String, SpeciesBatchFrequency> importFrequencies(MultiPostImportContext importContext, + Map<String, SpeciesBatch> batches, + Map<String, SpeciesBatch> notImportedBatches, + Supplier<SpeciesBatchFrequency> newFrequencySupplier) throws IOException { + + ListMultimap<String, SpeciesBatchFrequency> 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; + } + SpeciesBatch batch = batches.get(frequencyRowBatchId); + if (batch == null) { + + // not imported (FIXME Should be an error ?) + continue; + } + + SpeciesBatchFrequency 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; + + } + + private Map<String, IndividualObservationBatch> importIndividualObservationBatches(MultiPostImportContext importContext, + Map<String, SpeciesBatch> speciesOrBenthosBatches, + Map<String, SpeciesBatch> notImportedBatches) throws IOException { Map<String, IndividualObservationBatch> batches = new LinkedHashMap<>(); @@ -1378,49 +1202,6 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } - protected ListMultimap<String, SpeciesBatchFrequency> importFrequencies(MultiPostImportContext importContext, - Map<String, SpeciesBatch> batches, - Map<String, SpeciesBatch> notImportedBatches, - Supplier<SpeciesBatchFrequency> newFrequencySupplier) throws IOException { - - ListMultimap<String, SpeciesBatchFrequency> 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; - } - SpeciesBatch batch = batches.get(frequencyRowBatchId); - if (batch == null) { - - // not imported (FIXME Should be an error ?) - continue; - } - - SpeciesBatchFrequency 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 List<SpeciesBatchFrequency> importFrequencies(MultiPostImportContext importContext, SpeciesBatch speciesBatch, Supplier<SpeciesBatchFrequency> newFrequencySupplier) throws IOException { List<SpeciesBatchFrequency> frequenciesToSave = new LinkedList<>(); @@ -1516,4 +1297,127 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } + private void importIndividualObservations(MultiPostImportContext importContext, boolean importFrequencies, Map<String, SpeciesBatch> batches, Map<String, SpeciesBatch> notImportedBatches, SaveFrequencyMethod saveFrequencyMethod) throws IOException { + + // 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); + + if (!importFrequencies) { + + // Must generate frequencies if required + batches.values().forEach(speciesBatch -> { + + Integer speciesBatchId = speciesBatch.getIdAsInt(); + + List<IndividualObservationBatch> allIndividualObservationBatchsForBatch = persistenceService.getAllIndividualObservationBatchsForBatch(speciesBatchId); + if (!allIndividualObservationBatchsForBatch.isEmpty()) { + IndividualObservationBatch firstIndividualObservationBatch = allIndividualObservationBatchsForBatch.get(0); + CopyIndividualObservationMode copyIndividualObservationMode = firstIndividualObservationBatch.getCopyIndividualObservationMode(); + Caracteristic lengthStepCaracteristic = firstIndividualObservationBatch.getLengthStepCaracteristic(); + String unit = lengthStepCaracteristic.getUnit(); + boolean copySize = true; + boolean copyWeight = true; + + switch (copyIndividualObservationMode) { + + case NOTHING: + + // nothing we said! + break; + + case ALL: + copySize = true; + break; + + case SIZE: + copySize = true; + copyWeight = true; + break; + } + if (copySize) { + + // this means first to delete any existing such frequencies + saveFrequencyMethod.saveSpeciesBatchFrequency(speciesBatchId, new ArrayList<>()); + + Map<Float, MutableFloat> sizes = new TreeMap<>(); + Map<Float, MutableFloat> weights = new TreeMap<>(); + //FIXME Generate frequencies from individual observations + allIndividualObservationBatchsForBatch + .stream() + .filter(individualObservationBatch -> individualObservationBatch.getSize() != null) + .forEach(individualObservationBatch -> { + + }); + } + + } + }); + } + + } + + private MultiPostImportResult importSpeciesOrBenthosBatch(File file, + FishingOperation operation, + SpeciesBatch speciesBatch, + boolean importFrequencies, + boolean importIndividualObservations) { + + return persistenceService.invoke(() -> { + + + try (MultiPostImportContext importContext = new MultiPostImportContext(context, file, operation)) { + + // Import frequencies + + List<SpeciesBatchFrequency> frequenciesToSave = new ArrayList<>(); + + if (importFrequencies) { + frequenciesToSave.addAll(importFrequencies(importContext, speciesBatch, SpeciesBatchFrequencys::newSpeciesBatchFrequency)); + frequenciesToSave.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(speciesBatch)); + } + + // Import indivudal observations + + List<IndividualObservationBatch> individualObservations = new ArrayList<>(); + + Multimap<Integer, File> attachmentFiles = HashMultimap.create(); + + if (importIndividualObservations) { + + // Import batches + // map containing the batches by their persistence id + Map<String, IndividualObservationBatch> individualObservationsBatches = importIndividualObservationBatches(importContext, speciesBatch); + + // Import caracteristics + + importCaracteristics(importContext, individualObservationsBatches); + + individualObservations.addAll(individualObservationsBatches.values()); + + // Import attachments + + attachmentFiles.putAll(getAttachmentFiles(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE)); + + } + + return new MultiPostImportResult(frequenciesToSave, individualObservations, attachmentFiles); + + } + + }); + + } } \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit f7e24929d7e010c8c0c1b8ebf2c1a1d3338a8712 Author: Kevin Morin <morin@codelutin.com> Date: Tue Apr 26 14:05:41 2016 +0200 génération des mensurations quand on est en mode de recopie taille ou tout (refs #8278) --- .../catches/multipost/MultiPostImportService.java | 104 ++++++++++++++++----- 1 file changed, 83 insertions(+), 21 deletions(-) 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 6f2f299..a195229 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 @@ -80,8 +80,8 @@ 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 fr.ifremer.tutti.type.WeightUnit; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.mutable.MutableFloat; import org.apache.commons.lang3.tuple.Pair; import org.nuiton.csv.Import; import org.nuiton.jaxx.application.ApplicationBusinessException; @@ -292,7 +292,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult if (importIndividualObservations) { - importIndividualObservations(importContext, importFrequencies, batches, notImportedBatches, speciesSaveFrequencyMethod); + importIndividualObservations(importContext, importFrequencies, batches, notImportedBatches, speciesFrequencyHelper); } @@ -313,21 +313,33 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } - interface SaveFrequencyMethod { + interface FrequencyHelper { + SpeciesBatchFrequency newSpeciesBatchFrequency(); List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(Integer speciesBatchId, List<SpeciesBatchFrequency> frequencies); } - private final SaveFrequencyMethod speciesSaveFrequencyMethod = new SaveFrequencyMethod() { + private final FrequencyHelper speciesFrequencyHelper = new FrequencyHelper() { + + @Override + public SpeciesBatchFrequency newSpeciesBatchFrequency() { + return SpeciesBatchFrequencys.newSpeciesBatchFrequency(); + } + @Override public List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(Integer speciesBatchId, List<SpeciesBatchFrequency> frequencies) { return persistenceService.saveSpeciesBatchFrequency(speciesBatchId, frequencies); } }; - private final SaveFrequencyMethod benthosSaveFrequencyMethod = new SaveFrequencyMethod() { + private final FrequencyHelper benthosFrequencyHelper = new FrequencyHelper() { + + @Override + public SpeciesBatchFrequency newSpeciesBatchFrequency() { + return SpeciesBatchFrequencys.newBenthosBatchFrequency(); + } @Override public List<SpeciesBatchFrequency> saveSpeciesBatchFrequency(Integer speciesBatchId, List<SpeciesBatchFrequency> frequencies) { return persistenceService.saveBenthosBatchFrequency(speciesBatchId, frequencies); @@ -537,7 +549,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult if (importIndividualObservations) { - importIndividualObservations(importContext, importFrequencies, batches, notImportedBatches, speciesSaveFrequencyMethod); + importIndividualObservations(importContext, importFrequencies, batches, notImportedBatches, benthosFrequencyHelper); } @@ -1297,7 +1309,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } - private void importIndividualObservations(MultiPostImportContext importContext, boolean importFrequencies, Map<String, SpeciesBatch> batches, Map<String, SpeciesBatch> notImportedBatches, SaveFrequencyMethod saveFrequencyMethod) throws IOException { + private void importIndividualObservations(MultiPostImportContext importContext, boolean importFrequencies, Map<String, SpeciesBatch> batches, Map<String, SpeciesBatch> notImportedBatches, FrequencyHelper frequencyHelper) throws IOException { // Import batches // map containing the batches by their persistence id @@ -1327,40 +1339,72 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult IndividualObservationBatch firstIndividualObservationBatch = allIndividualObservationBatchsForBatch.get(0); CopyIndividualObservationMode copyIndividualObservationMode = firstIndividualObservationBatch.getCopyIndividualObservationMode(); Caracteristic lengthStepCaracteristic = firstIndividualObservationBatch.getLengthStepCaracteristic(); - String unit = lengthStepCaracteristic.getUnit(); - boolean copySize = true; - boolean copyWeight = true; - - switch (copyIndividualObservationMode) { - case NOTHING: + boolean copySize = false; + final boolean copyWeight; - // nothing we said! - break; + switch (copyIndividualObservationMode) { case ALL: copySize = true; + copyWeight = true; break; case SIZE: copySize = true; - copyWeight = true; + copyWeight = false; break; + + case NOTHING:// nothing we said! + default: + copyWeight = false; + } if (copySize) { // this means first to delete any existing such frequencies - saveFrequencyMethod.saveSpeciesBatchFrequency(speciesBatchId, new ArrayList<>()); +// saveFrequencyMethod.saveSpeciesBatchFrequency(speciesBatchId, new ArrayList<>()); + + float step = getStep(lengthStepCaracteristic); + Map<Float, SpeciesBatchFrequency> frequencies = new TreeMap<>(); - Map<Float, MutableFloat> sizes = new TreeMap<>(); - Map<Float, MutableFloat> weights = new TreeMap<>(); - //FIXME Generate frequencies from individual observations allIndividualObservationBatchsForBatch .stream() .filter(individualObservationBatch -> individualObservationBatch.getSize() != null) .forEach(individualObservationBatch -> { - + + // compute the lengthstep according to the step of the lengthstep caracteristic + Float lengthStep = getLengthStep(individualObservationBatch.getSize(), step); + // get the existing frequency + SpeciesBatchFrequency frequency = frequencies.get(lengthStep); + + if (frequency == null) { + // or create a new one + frequency = frequencyHelper.newSpeciesBatchFrequency(); + frequency.setLengthStep(lengthStep); + frequency.setLengthStepCaracteristic(lengthStepCaracteristic); + frequency.setNumber(0); + frequency.setBatch(speciesBatch); + + // only set a weight if we copy the weights + frequency.setWeight(copyWeight ? 0f : null); + + frequencies.put(lengthStep, frequency); + } + + // increment the number of the frequency + frequency.setNumber(frequency.getNumber() + 1); + + if (copyWeight && individualObservationBatch.getWeight() != null) { + frequency.setWeight(frequency.getWeight() + individualObservationBatch.getWeight()); + } + }); + + if (copyWeight) { + frequencies.values().forEach(frequency -> frequency.setWeight(WeightUnit.KG.round(frequency.getWeight()))); + } + frequencyHelper.saveSpeciesBatchFrequency(speciesBatchId, new ArrayList<>(frequencies.values())); } } @@ -1369,6 +1413,24 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } + private float getStep(Caracteristic caracteristic) { + Float step = null; + if (caracteristic != null) { + step = caracteristic.getPrecision(); + } + if (step == null) { + step = 1f; + } + return step; + } + + private float getLengthStep(float lengthStep, float step) { + int intValue = (int) (lengthStep * 10); + int intStep = (int) (step * 10); + int correctIntStep = intValue - (intValue % intStep); + return correctIntStep / 10f; + } + private MultiPostImportResult importSpeciesOrBenthosBatch(File file, FishingOperation operation, SpeciesBatch speciesBatch, -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 2a0448834d79db0c7454ad77e3e6d998d79afeda Author: Kevin Morin <morin@codelutin.com> Date: Tue Apr 26 14:30:34 2016 +0200 on fait un check pour vérifier que le poids est là (fixes #8278) --- .../tutti/service/catches/multipost/MultiPostImportService.java | 9 +++++---- .../src/main/resources/i18n/tutti-service_en_GB.properties | 1 + .../src/main/resources/i18n/tutti-service_fr_FR.properties | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) 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 a195229..efa78af 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 @@ -99,6 +99,7 @@ import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.TreeMap; import java.util.function.Supplier; @@ -1362,9 +1363,6 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } if (copySize) { - // this means first to delete any existing such frequencies -// saveFrequencyMethod.saveSpeciesBatchFrequency(speciesBatchId, new ArrayList<>()); - float step = getStep(lengthStepCaracteristic); Map<Float, SpeciesBatchFrequency> frequencies = new TreeMap<>(); @@ -1395,12 +1393,15 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult // increment the number of the frequency frequency.setNumber(frequency.getNumber() + 1); - if (copyWeight && individualObservationBatch.getWeight() != null) { + if (copyWeight) { + // there should always be a weight if we must copy the weight + Objects.requireNonNull(individualObservationBatch.getWeight(), t("tutti.service.multipost.import.noWeight.error")); frequency.setWeight(frequency.getWeight() + individualObservationBatch.getWeight()); } }); + // round the final weights if (copyWeight) { frequencies.values().forEach(frequency -> frequency.setWeight(WeightUnit.KG.round(frequency.getWeight()))); } diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index c48deb5..810d8ea 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -211,6 +211,7 @@ tutti.service.multipost.export.frequencies.error= tutti.service.multipost.export.operation.error= tutti.service.multipost.export.weight.error= tutti.service.multipost.export.weights.error= +tutti.service.multipost.import.noWeight.error= tutti.service.multipost.import.wrongOperation.error= tutti.service.multipost.import.wrongSpecies.error= tutti.service.multipost.uncompress.error= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 6477a24..9b0cc67 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -253,6 +253,7 @@ tutti.service.multipost.import.attachments.error=Erreur lors de l'import des pi tutti.service.multipost.import.batches.error=Erreur lors de l'import des lots tutti.service.multipost.import.caracteristics.error=Erreur lors de l'import des caractéristiques tutti.service.multipost.import.frequencies.error=Erreur lors de l'import des mensurations +tutti.service.multipost.import.noWeight.error=Une observation n'a pas de poids alors que le mode de recopie est "Tout", ce qui n'est pas valide. tutti.service.multipost.import.operation.error=Erreur lors de l'import des données du trait tutti.service.multipost.import.weights.error=Erreur lors de l'import des poids tutti.service.multipost.import.wrongOperation.error=Opération est impossible<hr/>Les lots que vous essayez d'importer proviennent d'un autre trait \:<br/>%s -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit da73b684c76ae99c9597eebccf97e76326570cfe Merge: 66382fd 2a04488 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 26 15:19:16 2016 +0200 Livrable #8278 Merge branch 'feature/8278' into develop .../catches/multipost/MultiPostImportService.java | 571 ++++++++++----------- .../resources/i18n/tutti-service_en_GB.properties | 1 + .../resources/i18n/tutti-service_fr_FR.properties | 1 + 3 files changed, 271 insertions(+), 302 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm