branch feature/8153 updated (0f1fbe5 -> 8748f39)
This is an automated email from the git hooks/post-receive script. New change to branch feature/8153 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git omits 0f1fbe5 on recharge les lignes ) partir du résultat de l'import (fixes #8153) omits 1f6be08 on n'enregistre pas les lignes importées, on les retourne à l'utilisateur (refs #8153) omits 343806d ajout du code de prélèvement et du mode de recopie pour l'import export (refs #8153) adds 9ed3662 correction du redimensionnement (fixes #8162) adds 17ba06f livrable #8162 Merge branch 'feature/8162' into develop adds 379048b correction de la conversion gramme -> unité de la conf (fixes #8189) adds eacf9aa Amélioration javadoc adds 3051429 Ajout d'une nouvelle méthode de conversion qui semble fonctionner adds 563c3b6 Amélioration de la méthode de convertion adds 68fe8e2 Merge branch 'feature/8189' into 'develop' adds bfbdf45 suppression du separateur de la conf, sinon on ne peut pas récupérer les ids des précédents code si le séparateur change (enfin on pourrait mais c'est plus compliqué) (refs #8192) adds dadc607 utilisation d'un objet pour gérer le code de prélèvement (fixes #8192) adds 9e9dbf7 livrable #8192 Merge branch 'feature/8192' into develop adds 189803c l'arrondi du poids rendait le poids négatif positif... d'où le poids total qui ne faisait qu'augmenter (fixes #8146) adds c03c492 fix merge adds 8edb8bd livrable #8146 Merge branch 'feature/8146' into develop adds ffb26da ajout des colonnes de code campagne et de nom scientifique (fixes #8164) adds 3e74e9f livrable #8164 Merge branch 'feature/8164' into develop adds 26554ce ajout de la colonen sexe, même si elle n'est pas dans le protocole (fixes #8191) adds ff2ad98 livrable #8191 Merge branch 'feature/8191' into develop adds 9fb2cd5 on increment et decremente l'algo à partir du moment où il y a une taille (fixes #8194) adds dbaf1ea livrable #8194 Merge branch 'feature/8194' into develop adds 8246fab on déclenche un évènement quand le résumé est mis à jour (refs #8152) adds cff4876 on ajoute le nombre de prélèvement par clé (espece/taille/maturité/sexe) (refs #8152) adds 179a761 gestion des prélèvements dans le cache (refs #8152 refs #8177) adds 3e3c3fa gestion des prélèvements + affichage des prélèvements réels (refs #8177 refs #8152) adds 6611c70 décoration pour le résumé (refs #8152) adds 10d8c6a augmentation de la taille des messages de prélèvement + limite infinie au lieu de nulle (fixes #8152) adds 3be764d fix merge adds 4ae7280 livrable #8177 #8179 #8152 Merge branch 'feature/8177' into develop adds 35ae2c4 recopie de la maturité et du sexe de la dernière ligne créée quand on ajoute une ligne d'observations (fixes #8198) adds 681dc4f livrable #8198 Merge branch 'feature/8198' into develop new bba4285 ajout du code de prélèvement et du mode de recopie pour l'import export (refs #8153) new e61c8c5 on n'enregistre pas les lignes importées, on les retourne à l'utilisateur (refs #8153) new 879dea2 on recharge les lignes ) partir du résultat de l'import (fixes #8153) new e64da66 Remove strange comment new 39cffa5 Do not import empty SamplingCode new 8748f39 Fix merge This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (0f1fbe5) \ N -- N -- N refs/heads/feature/8153 (8748f39) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 6 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 8748f3906dad4c65a91522bcd24cc85dd3d6b8d0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Mar 31 18:04:18 2016 +0200 Fix merge commit 39cffa5c7d6c047ffb34aa66a341362dc52ecaac Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Mar 31 18:03:51 2016 +0200 Do not import empty SamplingCode commit e64da66aff821d872e38a36634b5aab16b5a4de0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Mar 31 18:03:40 2016 +0200 Remove strange comment commit 879dea246c86caafc93e1401a3a76085e34829f9 Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 30 17:34:17 2016 +0200 on recharge les lignes ) partir du résultat de l'import (fixes #8153) commit e61c8c5b5bccdfbc6d046295bba1fe25072e7bb9 Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 30 17:09:47 2016 +0200 on n'enregistre pas les lignes importées, on les retourne à l'utilisateur (refs #8153) commit bba4285f37024437e7dbda1f4f1fb8123e923e0d Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 30 17:09:14 2016 +0200 ajout du code de prélèvement et du mode de recopie pour l'import export (refs #8153) Summary of changes: .../java/fr/ifremer/tutti/TuttiConfiguration.java | 4 - .../fr/ifremer/tutti/TuttiConfigurationOption.java | 8 - .../java/fr/ifremer/tutti/type/WeightUnit.java | 6 - .../main/java/fr/ifremer/tutti/util/Weights.java | 72 ++- .../fr/ifremer/tutti/service/DecoratorService.java | 2 + .../ifremer/tutti/service/PersistenceService.java | 4 +- .../fr/ifremer/tutti/service/TuttiDataContext.java | 4 +- .../catches/multipost/MultiPostImportService.java | 8 +- .../multipost/csv/IndividualObservationRow.java | 2 +- .../protocol/CalcifiedPiecesSamplingRow.java | 6 + .../protocol/CalcifiedPiecesSamplingRowModel.java | 29 +- .../CruiseSamplingCache.java | 258 +++++++-- .../CruiseSamplingCacheLoader.java | 2 +- .../CruiseSamplingInternalCache.java | 100 +++- .../tutti/service/sampling/SamplingCodePrefix.java | 54 ++ .../{samplingCache => sampling}/SamplingEvent.java | 37 +- .../SamplingListener.java | 3 +- .../content/actions/EditCatchesSupportAction.java | 2 +- .../swing/content/config/TuttiConfigUIHandler.java | 3 - .../IndividualObservationBatchRowModel.java | 43 +- .../IndividualObservationBatchTableModel.java | 39 +- .../SampleCodeEditionPopupUI.jaxx | 4 +- .../SampleCodeEditionPopupUI.jcss | 2 +- .../SampleCodeEditionPopupUIHandler.java | 3 +- .../SampleCodeEditionPopupUIModel.java | 7 +- .../SamplingCodeCellEditor.java | 4 +- .../frequency/IndividualObservationUICache.java | 179 +++++-- .../frequency/SpeciesFrequencyRowModel.java | 23 +- .../frequency/SpeciesFrequencyTableModel.java | 40 +- .../species/frequency/SpeciesFrequencyUI.jaxx | 20 +- .../species/frequency/SpeciesFrequencyUI.jcss | 7 +- .../frequency/SpeciesFrequencyUIHandler.java | 588 +++++++++++---------- .../species/frequency/SpeciesFrequencyUIModel.java | 5 +- .../frequency/actions/DeleteSampleCodeAction.java | 2 +- .../frequency/actions/EditSampleCodeAction.java | 6 +- .../tutti/ui/swing/util/WideDataComboBoxUI.java | 49 ++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 3 +- 38 files changed, 1108 insertions(+), 521 deletions(-) rename tutti-service/src/main/java/fr/ifremer/tutti/service/{samplingCache => sampling}/CruiseSamplingCache.java (67%) rename tutti-service/src/main/java/fr/ifremer/tutti/service/{samplingCache => sampling}/CruiseSamplingCacheLoader.java (99%) rename tutti-service/src/main/java/fr/ifremer/tutti/service/{samplingCache => sampling}/CruiseSamplingInternalCache.java (58%) create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingCodePrefix.java rename tutti-service/src/main/java/fr/ifremer/tutti/service/{samplingCache => sampling}/SamplingEvent.java (69%) rename tutti-service/src/main/java/fr/ifremer/tutti/service/{samplingCache => sampling}/SamplingListener.java (91%) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/WideDataComboBoxUI.java -- 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 feature/8153 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit bba4285f37024437e7dbda1f4f1fb8123e923e0d Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 30 17:09:14 2016 +0200 ajout du code de prélèvement et du mode de recopie pour l'import export (refs #8153) --- .../catches/multipost/MultiPostExportContext.java | 4 +-- .../multipost/csv/IndividualObservationRow.java | 42 +++++++++++----------- .../csv/IndividualObservationRowModel.java | 5 +++ 3 files changed, 28 insertions(+), 23 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 caadec3..a0ca5ff 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 @@ -241,9 +241,9 @@ public class MultiPostExportContext implements MultiPostConstants, Closeable { row.setWeight(batch.getWeight()); row.setSize(batch.getSize()); row.setLengthStepCaracteristic(batch.getLengthStepCaracteristic()); -// row.setSamplingCode(batch.getSamplingCode()); -// row.setCalcifiedPieceSamplingCode(batch.getCalcifiedPieceSamplingCode()); + row.setSamplingCode(batch.getSamplingCode()); row.setComment(batch.getComment()); + row.setCopyIndividualObservationMode(batch.getCopyIndividualObservationMode()); individualObservationRows.add(row); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRow.java index 82adf9e..43a7d16 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRow.java @@ -22,6 +22,7 @@ package fr.ifremer.tutti.service.catches.multipost.csv; * #L% */ +import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; @@ -40,10 +41,9 @@ public class IndividualObservationRow implements Serializable { 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 SAMPLING_CODE = "samplingCode"; + public static final String COPY_INDIVIDUAL_OBSERVATION_MODE = "copyIndividualObservationMode"; // -// public static final String CALCIFIED_PIECE_SAMPLING_CODE = "calcifiedPieceSamplingCode"; private static final long serialVersionUID = 1L; protected String batchId; protected String speciesBatchId; @@ -56,12 +56,12 @@ public class IndividualObservationRow implements Serializable { protected Caracteristic lengthStepCaracteristic; -// protected String samplingCode; -// -// protected String calcifiedPieceSamplingCode; + protected String samplingCode; protected String comment; + protected CopyIndividualObservationMode copyIndividualObservationMode; + public String getBatchId() { return batchId; } @@ -110,21 +110,13 @@ public class IndividualObservationRow implements Serializable { this.lengthStepCaracteristic = lengthStepCaracteristic; } -// public String getSamplingCode() { -// return samplingCode; -// } -// -// public void setSamplingCode(String samplingCode) { -// this.samplingCode = samplingCode; -// } -// -// public String getCalcifiedPieceSamplingCode() { -// return calcifiedPieceSamplingCode; -// } -// -// public void setCalcifiedPieceSamplingCode(String calcifiedPieceSamplingCode) { -// this.calcifiedPieceSamplingCode = calcifiedPieceSamplingCode; -// } + public String getSamplingCode() { + return samplingCode; + } + + public void setSamplingCode(String samplingCode) { + this.samplingCode = samplingCode; + } public String getComment() { return comment; @@ -133,4 +125,12 @@ public class IndividualObservationRow implements Serializable { public void setComment(String comment) { this.comment = comment; } + + public CopyIndividualObservationMode getCopyIndividualObservationMode() { + return copyIndividualObservationMode; + } + + public void setCopyIndividualObservationMode(CopyIndividualObservationMode copyIndividualObservationMode) { + this.copyIndividualObservationMode = copyIndividualObservationMode; + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRowModel.java index d188147..e5711bc 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRowModel.java @@ -22,6 +22,7 @@ package fr.ifremer.tutti.service.catches.multipost.csv; * #L% */ +import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.catches.multipost.MultiPostConstants; @@ -56,6 +57,10 @@ public class IndividualObservationRowModel extends AbstractTuttiImportExportMode newColumnForImportExport(IndividualObservationRow.COMMENT); + newColumnForImportExport(IndividualObservationRow.SAMPLING_CODE); + + newColumnForImportExport(IndividualObservationRow.COPY_INDIVIDUAL_OBSERVATION_MODE, TuttiCsvUtil.newEnumByNameParserFormatter(CopyIndividualObservationMode.class)); + } public static IndividualObservationRowModel forExport() { -- 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 feature/8153 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit e61c8c5b5bccdfbc6d046295bba1fe25072e7bb9 Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 30 17:09:47 2016 +0200 on n'enregistre pas les lignes importées, on les retourne à l'utilisateur (refs #8153) --- .../catches/multipost/MultiPostImportResult.java | 36 ++++++++ .../catches/multipost/MultiPostImportService.java | 96 +++++++++++++++++----- 2 files changed, 112 insertions(+), 20 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportResult.java new file mode 100644 index 0000000..06a4a93 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportResult.java @@ -0,0 +1,36 @@ +package fr.ifremer.tutti.service.catches.multipost; + +import com.google.common.collect.Multimap; +import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; + +import java.io.File; +import java.util.List; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class MultiPostImportResult { + + private final List<SpeciesBatchFrequency> importedFrequencies; + private final List<IndividualObservationBatch> importedObservations; + private final Multimap<Integer, File> observationAttachments; + + public MultiPostImportResult(List<SpeciesBatchFrequency> importedFrequencies, + List<IndividualObservationBatch> importedObservations, + Multimap<Integer, File> observationAttachments) { + this.importedFrequencies = importedFrequencies; + this.importedObservations = importedObservations; + this.observationAttachments = observationAttachments; + } + + public List<SpeciesBatchFrequency> getImportedFrequencies() { + return importedFrequencies; + } + + public List<IndividualObservationBatch> getImportedObservations() { + return importedObservations; + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java index 2be0a65..1a0b6e1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java @@ -25,7 +25,9 @@ package fr.ifremer.tutti.service.catches.multipost; import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.HashMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.collect.Multimap; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiEntity; @@ -89,6 +91,7 @@ import java.io.IOException; import java.io.Reader; import java.io.Serializable; import java.text.ParseException; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -502,7 +505,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult * @param operation the operation in which to add the batches * @return the list of the species which have not been imported, because there were concurrent batches */ - public Map<String, Object> importSpeciesBatch(File file, + public MultiPostImportResult importSpeciesBatch(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, @@ -514,16 +517,19 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult // Import frequencies - if (importFrequencies) { - - List<SpeciesBatchFrequency> frequenciesToSave = importFrequencies(importContext, speciesBatch, SpeciesBatchFrequencys::newSpeciesBatchFrequency); + List<SpeciesBatchFrequency> frequenciesToSave = new ArrayList<>(); + if (importFrequencies) { + frequenciesToSave.addAll(importFrequencies(importContext, speciesBatch, SpeciesBatchFrequencys::newSpeciesBatchFrequency)); frequenciesToSave.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(speciesBatch)); - persistenceService.saveSpeciesBatchFrequency(speciesBatch.getIdAsInt(), frequenciesToSave); } // Import indivudal observations + List<IndividualObservationBatch> individualObservations = new ArrayList<>(); + + Multimap<Integer, File> attachmentFiles = HashMultimap.create(); + if (importIndividualObservations) { // Import batches @@ -534,17 +540,19 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult importCaracteristics(importContext, individualObservationsBatches); + individualObservations.addAll(individualObservationsBatches.values()); + // Persist batches - persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); +// persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); // Import attachments - importAttachments(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE); + attachmentFiles.putAll(getAttachmentFiles(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE)); } - return new HashMap<>(); + return new MultiPostImportResult(frequenciesToSave, individualObservations, attachmentFiles); } }); @@ -811,6 +819,8 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult //-- Import Benthos Batches data --// //------------------------------------------------------------------------// + + //FIXME exactly the same as for the species ??? /** * Import benthos batches frequencies or individual observations from a satellite post. * @@ -818,28 +828,32 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult * @param operation the operation in which to add the batches * @return the list of the species which have not been imported, because there were concurrent batches */ - public Map<String, Object> importBenthosBatch(File file, - FishingOperation operation, - SpeciesBatch speciesBatch, - boolean importFrequencies, - boolean importIndividualObservations) { + public MultiPostImportResult importBenthosBatch(File file, + FishingOperation operation, + SpeciesBatch speciesBatch, + boolean importFrequencies, + boolean importIndividualObservations) { return persistenceService.invoke(() -> { + try (MultiPostImportContext importContext = new MultiPostImportContext(context, file, operation)) { // Import frequencies - if (importFrequencies) { - - List<SpeciesBatchFrequency> frequenciesToSave = importFrequencies(importContext, speciesBatch, SpeciesBatchFrequencys::newSpeciesBatchFrequency); + List<SpeciesBatchFrequency> frequenciesToSave = new ArrayList<>(); + if (importFrequencies) { + frequenciesToSave.addAll(importFrequencies(importContext, speciesBatch, SpeciesBatchFrequencys::newSpeciesBatchFrequency)); frequenciesToSave.forEach(speciesBatchFrequency -> speciesBatchFrequency.setBatch(speciesBatch)); - persistenceService.saveBenthosBatchFrequency(speciesBatch.getIdAsInt(), frequenciesToSave); } // Import indivudal observations + List<IndividualObservationBatch> individualObservations = new ArrayList<>(); + + Multimap<Integer, File> attachmentFiles = HashMultimap.create(); + if (importIndividualObservations) { // Import batches @@ -850,19 +864,22 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult importCaracteristics(importContext, individualObservationsBatches); + individualObservations.addAll(individualObservationsBatches.values()); + // Persist batches - persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); +// persistenceService.createIndividualObservationBatches(individualObservationsBatches.values()); // Import attachments - importAttachments(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE); + attachmentFiles.putAll(getAttachmentFiles(importContext, individualObservationsBatches, ObjectTypeCode.SAMPLE)); } - return new HashMap<>(); + return new MultiPostImportResult(frequenciesToSave, individualObservations, attachmentFiles); } + }); } @@ -1235,6 +1252,41 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } + protected <R extends TuttiEntity> Multimap<Integer, File> getAttachmentFiles(MultiPostImportContext importContext, Map<String, R> data, ObjectTypeCode objectType) throws IOException { + + Function<AttachmentRow, Integer> getObjetcIdFunction = input -> { + Integer result = null; + R batch = data.get(input.getBatchId()); + if (batch != null) { + result = batch.getIdAsInt(); + } + return result; + }; + + return getAttachmentFiles(importContext, getObjetcIdFunction, objectType); + } + + protected Multimap<Integer, File> getAttachmentFiles(MultiPostImportContext importContext, Function<AttachmentRow, Integer> getObjetcIdFunction, ObjectTypeCode objectType) throws IOException { + Multimap<Integer, File> result = HashMultimap.create(); + try (Reader reader = importContext.newFileReader(ATTACHMENTS_FILE)) { + + AttachmentRowModel attachmentModel = + AttachmentRowModel.forImport(importContext.newFile(ATTACHMENTS_DIRECTORY)); + try (Import<AttachmentRow> importer = Import.newImport(attachmentModel, reader)) { + + for (AttachmentRow row : importer) { + Integer objectId = getObjetcIdFunction.apply(row); + if (objectId != null) { + + result.put(objectId, row.getFile()); + } + } + + } + } + return result; + } + protected <B extends SampleEntity> void importCaracteristics(MultiPostImportContext importContext, Map<String, B> batches) throws IOException { @@ -1310,6 +1362,8 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult batch.setSize(row.getSize()); batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic()); batch.setComment(row.getComment()); + batch.setCopyIndividualObservationMode(row.getCopyIndividualObservationMode()); + batch.setSamplingCode(row.getSamplingCode()); batch.setCaracteristics(new CaracteristicMap()); batches.put(row.getBatchId(), batch); @@ -1448,6 +1502,8 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic()); batch.setComment(row.getComment()); batch.setCaracteristics(new CaracteristicMap()); + batch.setSamplingCode(row.getSamplingCode()); + batch.setCopyIndividualObservationMode(row.getCopyIndividualObservationMode()); batches.put(row.getBatchId(), batch); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/8153 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 879dea246c86caafc93e1401a3a76085e34829f9 Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 30 17:34:17 2016 +0200 on recharge les lignes ) partir du résultat de l'import (fixes #8153) --- .../persistence/entities/CaracteristicMap.java | 2 +- .../IndividualObservationBatchTableModel.java | 12 +- .../catches/species/BenthosBatchUISupportImpl.java | 3 +- .../catches/species/SpeciesBatchUISupportImpl.java | 3 +- .../species/SpeciesOrBenthosBatchUISupport.java | 3 +- .../frequency/SpeciesFrequencyUIHandler.java | 321 ++++++++++++++++++++- .../species/frequency/SpeciesFrequencyUIModel.java | 8 + .../ImportMultiPostSpeciesSupportAction.java | 87 ++++-- .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 1 + 10 files changed, 411 insertions(+), 30 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CaracteristicMap.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CaracteristicMap.java index 68a7c66..7bb4001 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CaracteristicMap.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CaracteristicMap.java @@ -58,7 +58,7 @@ public class CaracteristicMap extends LinkedHashMap<Caracteristic, Serializable> public boolean hasNonNullValues(Collection<Caracteristic> caracteristicsToIgnore) { return keySet().stream() - .filter(caracteristic -> caracteristicsToIgnore.contains(caracteristic) && get(caracteristic) != null) + .filter(caracteristic -> !caracteristicsToIgnore.contains(caracteristic) && get(caracteristic) != null) .count() > 0; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java index b6577c8..fb5dc78 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java @@ -41,6 +41,7 @@ import javax.swing.event.TableColumnModelListener; import java.io.Serializable; import java.util.Collection; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.n; @@ -166,6 +167,10 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab } } + public Optional<Caracteristic> getMaturityCaracteristic() { + return maturityCaracteristic; + } + public void setMaturityCaracteristic(Optional<Caracteristic> maturityCaracteristic) { this.maturityCaracteristic = maturityCaracteristic; if (rows != null) { @@ -251,9 +256,10 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab for (int i = rows.size() - 1 ; i >= 0 ; i--) { IndividualObservationBatchRowModel row = rows.get(i); // if the row has no data set, then it could be the empty row we are looking for - defaultCaracteristicsMap.keySet().stream() - .filter(key -> defaultCaracteristicsMap.get(key) != null).collect(Collectors.toSet()); - if (row.isEmpty()) { + Set<Caracteristic> notNullCaracteristics = defaultCaracteristicsMap.keySet().stream() + .filter(key -> defaultCaracteristicsMap.get(key) != null) + .collect(Collectors.toSet()); + if (row.isEmpty(notNullCaracteristics)) { result = row; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/BenthosBatchUISupportImpl.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/BenthosBatchUISupportImpl.java index 5af43d1..9cc5dec 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/BenthosBatchUISupportImpl.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/BenthosBatchUISupportImpl.java @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.catches.multipost.MultiPostImportResult; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; @@ -236,7 +237,7 @@ public class BenthosBatchUISupportImpl extends SpeciesOrBenthosBatchUISupport { } @Override - public Map<String, Object> importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations) { + public MultiPostImportResult importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations) { return context.getMultiPostImportService().importBenthosBatch(file, operation, speciesBatch, importFrequencies, importIndivudalObservations); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUISupportImpl.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUISupportImpl.java index 2dee051..8bba93e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUISupportImpl.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUISupportImpl.java @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.catches.multipost.MultiPostImportResult; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; @@ -226,7 +227,7 @@ public class SpeciesBatchUISupportImpl extends SpeciesOrBenthosBatchUISupport { } @Override - public Map<String, Object> importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations) { + public MultiPostImportResult importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations) { return context.getMultiPostImportService().importSpeciesBatch(file, operation, speciesBatch, importFrequencies, importIndivudalObservations); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesOrBenthosBatchUISupport.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesOrBenthosBatchUISupport.java index 79e88e2..d9f2de7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesOrBenthosBatchUISupport.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesOrBenthosBatchUISupport.java @@ -33,6 +33,7 @@ import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.catches.multipost.MultiPostImportResult; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; @@ -152,7 +153,7 @@ public abstract class SpeciesOrBenthosBatchUISupport { public abstract Map<String, Object> importMultiPost(File file, FishingOperation operation, boolean importFrequencies, boolean importIndivudalObservations); - public abstract Map<String, Object> importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations); + public abstract MultiPostImportResult importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations); public abstract void exportMultiPost(File file, FishingOperation operation, boolean importFrequencies, boolean importIndivudalObservations); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index 6d6158b..4d5f545 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -843,7 +843,112 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci context.removeVetoableChangeListener(TuttiUIContext.PROPERTY_SCREEN, changeScreenListener); } - public void editBatch(FrequencyCellEditor editor, Optional<String> optionalTitle) { +public void editBatch(FrequencyCellEditor editor, Optional<String> optionalTitle) { + + SpeciesBatchRowModel speciesBatch = editor.getEditRow(); + Objects.requireNonNull(speciesBatch, "Impossible d'éditer un lot non renseigné"); + + // on enlève la colonne spécifique à l'espèce précédente + if (maturityColumnId.isPresent()) { + TableColumnExt maturityColumn = ui.getObsTable().getColumnExt(maturityColumnId.get()); + ui.getObsTable().removeColumn(maturityColumn); + maturityColumnId = Optional.empty(); + } + + if (optionalTitle.isPresent()) { + + String title = optionalTitle.get(); + frequenciesHistogramPopup.setTitle(title + t("tutti.editSpeciesFrequencies.title")); + averageWeightsHistogramPopup.setTitle(title + weightUnit.decorateLabel(t("tutti.editSpeciesFrequencies.field.graphAverageWeight"))); + + } + + frequencyEditor = editor; + SpeciesFrequencyUIModel model = getModel(); + + model.setNextEditableRowIndex(frequencyEditor.getNextEditableRowIndex()); + + List<SpeciesFrequencyRowModel> frequency = speciesBatch.getFrequency(); + List<IndividualObservationBatchRowModel> individualObservations = speciesBatch.getIndividualObservation(); + + + model.setInitBatchEdition(true); + + try { + // keep batch (will be used to push back editing entry) + model.setBatch(speciesBatch); + model.setMinStep(null); + model.setMaxStep(null); + model.setCopyRtpWeights(false); + model.setAddIndividualObservationOnRafale(false); + + Optional<String> speciesMaturityPmfmId = Optional.empty(); + + // set rtps + TuttiProtocol protocol = getDataContext().getProtocol(); + if (protocol != null) { + + Integer referenceTaxonId = speciesBatch.getSpecies().getReferenceTaxonId(); + Optional<SpeciesProtocol> optSpeciesProtocol = + protocol.getSpecies().stream() + .filter(sp -> sp.getSpeciesReferenceTaxonId().equals(referenceTaxonId)) + .findFirst(); + + if (optSpeciesProtocol.isPresent()) { + SpeciesProtocol speciesProtocol = optSpeciesProtocol.get(); + Rtp rtp; + CaracteristicQualitativeValue sampleCategoryValue = (CaracteristicQualitativeValue) speciesBatch.getSampleCategoryValue(sexCaracteristic.getIdAsInt()); + + if (sampleCategoryValue != null) { + + if (Sexs.isMale(sampleCategoryValue)) { + rtp = speciesProtocol.getRtpMale(); + } else if (Sexs.isFemale(sampleCategoryValue)) { + rtp = speciesProtocol.getRtpFemale(); + } else { + rtp = speciesProtocol.getRtpUndefined(); + } + + } else { + rtp = speciesProtocol.getRtpUndefined(); + } + getModel().setRtp(rtp); + + speciesMaturityPmfmId = Optional.ofNullable(speciesProtocol.getMaturityPmfmId()); + } + + } + + // Add maturity column if necessary + + Optional<Caracteristic> maturityCaracteristic = speciesMaturityPmfmId.map(maturityCaracteristics::get); + + setMaturityCaracteristic(maturityCaracteristic); + + loadFrequenciesAndObservations(frequency, individualObservations); + + if (getContext().isIchtyometerConnected()) { + + // let's listen the ichtyometer + listenItchtyometer(); + + } + + individualObservationUICache.init(ui, frequencyEditor.getEditRow(), getDataContext().getFishingOperation()); + + model.setModify(false); + + getContext().addVetoableChangeListener(TuttiUIContext.PROPERTY_SCREEN, changeScreenListener); + + } finally { + model.setInitBatchEdition(false); + //FIXME Voir si c'est nécessaire ? + model.setModify(false); + } + + } + + public void editBatchOld(FrequencyCellEditor editor, Optional<String> optionalTitle) { SpeciesBatchRowModel speciesBatch = editor.getEditRow(); Objects.requireNonNull(speciesBatch, "Impossible d'éditer un lot non renseigné"); @@ -1908,4 +2013,218 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci ui.getEditSampleCodeMenu().setEnabled(sampleCodeMenusEnabled); ui.getDeleteSampleCodeMenu().setEnabled(sampleCodeMenusEnabled); } + + + public void loadFrequenciesAndObservations(List<SpeciesFrequencyRowModel> frequency, List<IndividualObservationBatchRowModel> individualObservations) { + SpeciesFrequencyUIModel model = getModel(); + SpeciesBatchRowModel speciesBatch = model.getBatch(); + + model.setInitBatchEdition(true); + + try { + + FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; + FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; + + model.setTotalNumber(null); + model.setTotalComputedWeight(null); + model.setTotalWeight(null); + model.setSimpleCount(null); + model.setRtp(null); + + Caracteristic lengthStepCaracteristic = null; + CopyIndividualObservationMode copyIndividualObservationMode = null; + + List<SpeciesFrequencyRowModel> rows = new ArrayList<>(); + List<IndividualObservationBatchRowModel> obsRows = new ArrayList<>(); + + Species species = speciesBatch.getSpecies(); + IndividualObservationBatchTableModel obsTableModel = getObsTableModel(); + obsTableModel.setSpecies(species); + + SamplingCodePrefix samplingCodePrefix = new SamplingCodePrefix(getConfig().getSamplingCodePrefix(), decorate(species, DecoratorService.WITH_SURVEY_CODE_NO_NAME)); + obsTableModel.setSamplingCodePrefix(samplingCodePrefix); + + model.setTotalWeight(speciesBatch.getWeight()); + + // + // try to load existing frequency + // + + if (CollectionUtils.isNotEmpty(frequency)) { + + SpeciesFrequencyTableModel tableModel = getTableModel(); + + for (SpeciesFrequencyRowModel rowModel : frequency) { + + SpeciesFrequencyRowModel newRow = tableModel.createNewRow(false, false); + newRow.copy(rowModel); + rows.add(newRow); + + } + + // use first frequency row length step caracteristics + + SpeciesFrequencyRowModel rowModel = frequency.get(0); + lengthStepCaracteristic = rowModel.getLengthStepCaracteristic(); + + if (log.isInfoEnabled()) { + log.info("Use existing lengthStep caracteristic / step " + decorate(lengthStepCaracteristic)); + } + } + + // + // try to load existing individual observations + // + + if (CollectionUtils.isNotEmpty(individualObservations)) { + + IndividualObservationBatchTableModel tableModel = getObsTableModel(); + tableModel.setRows(new ArrayList<>()); + + int rankOrder = 1; + for (IndividualObservationBatchRowModel rowModel : individualObservations) { + + CopyIndividualObservationMode incomingCopyIndividualObservationMode = rowModel.getCopyIndividualObservationMode(); + Objects.requireNonNull(incomingCopyIndividualObservationMode, "Mode de recopie non trouvé sur l'observation individuelle: " + rowModel.getId()); + if (copyIndividualObservationMode == null) { + copyIndividualObservationMode = incomingCopyIndividualObservationMode; + } else { + if (copyIndividualObservationMode != incomingCopyIndividualObservationMode) { + throw new IllegalStateException("Plusieurs modes de recopie trouvés sur les observations individuelles du lot, ce qui est impossible"); + } + } + IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); + newRow.copy(rowModel); + newRow.setRankOrder(rankOrder++); + newRow.addPropertyChangeListener(obsChangedListener); + newRow.setValid(true); + + if (getObsTableModel().getMaturityCaracteristic().isPresent()) { + + Caracteristic caracteristicKey = getObsTableModel().getMaturityCaracteristic().get(); + Serializable caracteristicValue = newRow.getCaracteristics().remove(caracteristicKey); + newRow.getDefaultCaracteristics().putIfAbsent(caracteristicKey, caracteristicValue); + } + + obsRows.add(newRow); + + } + + // use first individual observation row length step caracteristics + + if (lengthStepCaracteristic == null) { + IndividualObservationBatchRowModel rowModel = individualObservations.get(0); + lengthStepCaracteristic = rowModel.getLengthStepCaracteristic(); + + if (log.isInfoEnabled()) { + log.info("Use existing lengthStep caracteristic / step " + decorate(lengthStepCaracteristic)); + } + } + + } else { + + // par défaut pas de mode de recopie + copyIndividualObservationMode = CopyIndividualObservationMode.NOTHING; + + } + + if (log.isInfoEnabled()) { + log.info("CopyIndividualObservationMode: " + copyIndividualObservationMode); + } + + SpeciesBatchRowModel previousSiblingRow = frequencyEditor.getPreviousSiblingRow(); + + if (lengthStepCaracteristic == null && previousSiblingRow != null) { + + // try to get it from his previous brother row + List<SpeciesFrequencyRowModel> previousFrequency = previousSiblingRow.getFrequency(); + + if (CollectionUtils.isNotEmpty(previousFrequency)) { + + // use the first frequency length step caracteristic / step + SpeciesFrequencyRowModel rowModel = previousFrequency.get(0); + lengthStepCaracteristic = rowModel.getLengthStepCaracteristic(); + if (log.isInfoEnabled()) { + log.info("Use previous sibling existing lengthStep caracteristic / step " + decorate(lengthStepCaracteristic)); + } + } + } + + if (lengthStepCaracteristic == null) { + + String lengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); + + if (lengthStepPmfmId != null) { + + lengthStepCaracteristic = lengthStepCaracteristics.get(lengthStepPmfmId); + + if (log.isInfoEnabled()) { + log.info("Use existing from protocol lengthStep caracteristic / step " + decorate(lengthStepCaracteristic)); + } + + } + } + + if (lengthStepCaracteristic == null) { + String speciesLengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); + if (speciesLengthStepPmfmId == null) { + mode = FrequencyConfigurationMode.SIMPLE_COUNTING; + } + } + + if (log.isInfoEnabled()) { + log.info("FrequencyConfigurationMode: " + mode); + } + + if (log.isDebugEnabled()) { + log.debug("Will edit batch row: " + speciesBatch + " with " + rows.size() + " frequency"); + } + + Integer number = speciesBatch.getNumber(); + if (number != null && rows.isEmpty()) { + mode = FrequencyConfigurationMode.SIMPLE_COUNTING; + model.setSimpleCount(number); + } + + // make sure configuration mode will be rebound + model.setConfigurationMode(null); + model.setConfigurationMode(mode); + + model.setFrequenciesConfigurationMode(null); + model.setFrequenciesConfigurationMode(frequenciesMode); + + // connect model to validator + ui.getValidator().setBean(model); + + // always sort row by their length + // see http://forge.codelutin.com/issues/2482 + Collections.sort(rows); + + model.setLengthStepCaracteristic(lengthStepCaracteristic); + model.setRows(rows); + + CaracteristicMap sampleCategoryValues = new CaracteristicMap(); + Iterator<SampleCategory<?>> iterator = speciesBatch.iterator(); + iterator.forEachRemaining(sampleCategory -> { + Caracteristic caracteristic = sampleCategory.getCategoryDef().getCaracteristic(); + sampleCategoryValues.put(caracteristic, sampleCategory.getCategoryValue()); + }); + + obsTableModel.setDefaultCaracteristicValues(sampleCategoryValues); + + model.setIndividualObservationRows(obsRows); + obsTableModel.setRows(obsRows); + model.recomputeIndividualObservationRowsValidateState(); + + // let's change the copy mode (mark it in init mode to avoid user change confirmation and some recompuations) + model.setCopyIndividualObservationMode(null); + model.setCopyIndividualObservationMode(copyIndividualObservationMode); + + model.computeRowWeightWithRtp(); + + } finally { + model.setInitBatchEdition(false); + } + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 877503f..fe1d875 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -776,6 +776,10 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa firePropertyChange(PROPERTY_EMPTY_ROWS, null, emptyRows); } + public boolean isNonEmptyRows() { + return getRowCount() - emptyRows.size() - rowsInError.size() > 0; + } + public int computeTotalNumber() { int result = 0; if (rows != null) { @@ -943,6 +947,10 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa isNonEmptyIndividualObservationRowsInError()); } + public boolean isNonEmptyIndividualObservationRow() { + return individualObservationRows.stream().anyMatch(row -> !row.isEmpty(defaultCaracteristic)); + } + public void recomputeRowsValidateState() { if (log.isInfoEnabled()) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ImportMultiPostSpeciesSupportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ImportMultiPostSpeciesSupportAction.java index b26f7f4..f608cff 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ImportMultiPostSpeciesSupportAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ImportMultiPostSpeciesSupportAction.java @@ -26,15 +26,16 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.catches.multipost.MultiPostImportService; +import fr.ifremer.tutti.service.catches.multipost.MultiPostImportResult; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesOrBenthosBatchUISupport; -import fr.ifremer.tutti.ui.swing.content.operation.catches.actions.ImportMultiPostActionSupport; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyCellComponent; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; @@ -42,8 +43,6 @@ import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; import javax.swing.JOptionPane; import java.io.File; import java.util.List; -import java.util.Map; -import java.util.Optional; import static org.nuiton.i18n.I18n.t; @@ -51,19 +50,39 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 4.5 */ -public abstract class ImportMultiPostSpeciesSupportAction extends ImportMultiPostActionSupport<SpeciesFrequencyUIModel, SpeciesFrequencyUI, SpeciesFrequencyUIHandler> { +public abstract class ImportMultiPostSpeciesSupportAction extends LongActionSupport<SpeciesFrequencyUIModel, SpeciesFrequencyUI, SpeciesFrequencyUIHandler> { /** Logger. */ private static final Log log = LogFactory.getLog(ImportMultiPostSpeciesSupportAction.class); + /** + * File to import. + */ + private File file; + + /** + * Optional data that were not imported. + */ + private MultiPostImportResult importResult; + protected ImportMultiPostSpeciesSupportAction(SpeciesFrequencyUIHandler handler) { - super(handler); + super(handler, false); } public abstract boolean isImportFrequencies(); public abstract boolean isImportIndivudalObservations(); + protected abstract String getSuccessMessage(File file); + + protected abstract String getFileExtension(); + + protected abstract String getFileExtensionDescription(); + + protected abstract String getFileChooserTitle(); + + protected abstract String getFileChooserButton(); + @Override public boolean prepareAction() throws Exception { boolean doAction = super.prepareAction(); @@ -72,14 +91,15 @@ public abstract class ImportMultiPostSpeciesSupportAction extends ImportMultiPos String message = "<ul>"; boolean ask = false; - if (isImportFrequencies() && getModel().getRowCount() > 0) { + if (isImportFrequencies() && getModel().isNonEmptyRows()) { ask = true; message = "<li>" + t("tutti.askBeforeMultiPostImport.frequencies.message") + "</li>"; } - if (isImportIndivudalObservations() && getModel().getIndividualObservationRows().size() > 0) { + if (isImportIndivudalObservations() && getModel().getIndividualObservationRows().size() > 0 + && getModel().isNonEmptyIndividualObservationRow()) { ask = true; - message += "<li>" + t("tutti.askBeforeMultiPostImport.frequencies.message") + "</li>"; + message += "<li>" + t("tutti.askBeforeMultiPostImport.observations.message") + "</li>"; } message += "</ul>"; @@ -112,8 +132,20 @@ public abstract class ImportMultiPostSpeciesSupportAction extends ImportMultiPos } + } + + if (doAction) { + + // choose file to import + file = chooseFile(getFileChooserTitle(), + getFileChooserButton(), + "^.*\\." + getFileExtension(), + getFileExtensionDescription()); + + doAction = file != null; } + } return doAction; @@ -121,12 +153,14 @@ public abstract class ImportMultiPostSpeciesSupportAction extends ImportMultiPos } @Override - protected final Map<String, Object> importBatches(MultiPostImportService multiPostImportExportService, File file, FishingOperation operation) { + public final void doAction() throws Exception { + + FishingOperation operation = getDataContext().getFishingOperation(); SpeciesOrBenthosBatchUISupport batchUISupport = getModel().getSpeciesOrBenthosBatchUISupport(); SpeciesBatch speciesBatch = getModel().getBatch().toEntity(); - return batchUISupport.importMultiPost(file, operation, speciesBatch, isImportFrequencies(), isImportIndivudalObservations()); -// return multiPostImportExportService.importSpeciesBatch(file, operation, speciesBatch, isImportFrequencies(), isImportIndivudalObservations()); + + importResult = batchUISupport.importMultiPost(file, operation, speciesBatch, isImportFrequencies(), isImportIndivudalObservations()); } @@ -134,27 +168,36 @@ public abstract class ImportMultiPostSpeciesSupportAction extends ImportMultiPos public final void postSuccessAction() { super.postSuccessAction(); + sendMessage(getSuccessMessage(file)); + SpeciesFrequencyCellComponent.FrequencyCellEditor frequencyEditor = getHandler().getFrequencyEditor(); SpeciesBatchRowModel editRow = frequencyEditor.getEditRow(); Integer speciesBatchId = editRow.getIdAsInt(); - PersistenceService persistenceService = getContext().getPersistenceService(); - List<SpeciesBatchFrequency> frequencies = persistenceService.getAllSpeciesBatchFrequency(speciesBatchId); + List<SpeciesBatchFrequency> frequencies = importResult.getImportedFrequencies(); if (log.isInfoEnabled()) { log.info("[SpeciesBatch: " + speciesBatchId + "] Frequencies: " + frequencies.size()); } - editRow.loadFrequencies(frequencies); - - List<IndividualObservationBatch> individualObservations = persistenceService.getAllIndividualObservationBatchsForBatch(speciesBatchId); - editRow.loadIndividualObservations(getConfig().getIndividualObservationWeightUnit(), - getDataContext().getDefaultIndividualObservationCaracteristics(), - individualObservations); + List<SpeciesFrequencyRowModel> frequencyRows = SpeciesFrequencyRowModel.fromEntity(getModel().getSpeciesOrBenthosBatchUISupport().getWeightUnit(), frequencies); + List<IndividualObservationBatch> individualObservations = importResult.getImportedObservations(); if (log.isInfoEnabled()) { log.info("[SpeciesBatch: " + speciesBatchId + "] Individual Observations: " + individualObservations.size()); } - getHandler().editBatch(frequencyEditor, Optional.empty()); + List<IndividualObservationBatchRowModel> individualObservationRows = IndividualObservationBatchRowModel.fromEntity(getConfig().getIndividualObservationWeightUnit(), + getDataContext().getDefaultIndividualObservationCaracteristics(), + individualObservations); + + getHandler().loadFrequenciesAndObservations(frequencyRows, individualObservationRows); + getModel().setModify(true); } + + @Override + public final void releaseAction() { + file = null; + importResult = null; + super.releaseAction(); + } } diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 0a401a9..518fe4c 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -49,6 +49,7 @@ tutti.applicationUpdater.updateDone.deleteDirectory.i18n.error= tutti.askBeforeMultiPostImport.frequencies.message= tutti.askBeforeMultiPostImport.help= tutti.askBeforeMultiPostImport.message= +tutti.askBeforeMultiPostImport.observations.message= tutti.askBeforeMultiPostImport.title= tutti.askToCancelEditFrequencies.help= tutti.askToCancelEditFrequencies.message= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 3232776..90e313d 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -34,6 +34,7 @@ tutti.askBeforeMultiPostImport.frequencies.message=Des mensurations existent tutti.askBeforeMultiPostImport.help=Que voulez-vous faire ?<ul><li><strong>Annuler l'import</strong> pour annuler l'opération d'import</li><li><strong>Réaliser l'import</strong> pour supprimer les données existantes puis réaliser l'import</li></ul> tutti.askBeforeMultiPostImport.individualObservations.message=Des observations individuelles existent tutti.askBeforeMultiPostImport.message=%s<br/>Elles seront supprimées avant l'import. +tutti.askBeforeMultiPostImport.observations.message=Des observations existent tutti.askBeforeMultiPostImport.title=Des données existent; elles seront supprimées avant l'import \! tutti.askToCancelEditFrequencies.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour rester sur l'écran</li><li><strong>Continuer</strong> pour confirmer la perte des données modifiées et le retour sur l'écran des lots</li></ul> tutti.askToCancelEditFrequencies.message=Des modifications sur les mensurations - observations individuelles ne sont pas enregistrées. -- 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 feature/8153 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit e64da66aff821d872e38a36634b5aab16b5a4de0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Mar 31 18:03:40 2016 +0200 Remove strange comment --- .../tutti/service/catches/multipost/csv/IndividualObservationRow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRow.java index 43a7d16..e6ed123 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/csv/IndividualObservationRow.java @@ -43,7 +43,7 @@ public class IndividualObservationRow implements Serializable { public static final String COMMENT = "comment"; public static final String SAMPLING_CODE = "samplingCode"; public static final String COPY_INDIVIDUAL_OBSERVATION_MODE = "copyIndividualObservationMode"; -// + private static final long serialVersionUID = 1L; protected String batchId; protected String speciesBatchId; -- 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 feature/8153 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 39cffa5c7d6c047ffb34aa66a341362dc52ecaac Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Mar 31 18:03:51 2016 +0200 Do not import empty SamplingCode --- .../tutti/service/catches/multipost/MultiPostImportService.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 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 1a0b6e1..79f3c97 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 @@ -1363,7 +1363,9 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic()); batch.setComment(row.getComment()); batch.setCopyIndividualObservationMode(row.getCopyIndividualObservationMode()); - batch.setSamplingCode(row.getSamplingCode()); + if (StringUtils.isNotEmpty(row.getSamplingCode())) { + batch.setSamplingCode(row.getSamplingCode()); + } batch.setCaracteristics(new CaracteristicMap()); batches.put(row.getBatchId(), batch); @@ -1502,7 +1504,9 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic()); batch.setComment(row.getComment()); batch.setCaracteristics(new CaracteristicMap()); - batch.setSamplingCode(row.getSamplingCode()); + if (StringUtils.isNotEmpty(row.getSamplingCode())) { + batch.setSamplingCode(row.getSamplingCode()); + } batch.setCopyIndividualObservationMode(row.getCopyIndividualObservationMode()); batches.put(row.getBatchId(), batch); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/8153 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 8748f3906dad4c65a91522bcd24cc85dd3d6b8d0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Mar 31 18:04:18 2016 +0200 Fix merge --- .../frequency/SpeciesFrequencyUIHandler.java | 316 +-------------------- 1 file changed, 5 insertions(+), 311 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index 4d5f545..f1a0cb6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -50,7 +50,6 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellEditor; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellRenderer; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellEditor; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.EditSpeciesBatchPanelUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesOrBenthosBatchUISupport; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchRowModel; @@ -724,7 +723,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci CopyIndividualObservationMode oldCopyMode = (CopyIndividualObservationMode) evt.getOldValue(); CopyIndividualObservationMode newCopyMode = (CopyIndividualObservationMode) evt.getNewValue(); - if (newCopyMode ==null) { + if (newCopyMode == null) { return; } @@ -843,7 +842,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci context.removeVetoableChangeListener(TuttiUIContext.PROPERTY_SCREEN, changeScreenListener); } -public void editBatch(FrequencyCellEditor editor, Optional<String> optionalTitle) { + public void editBatch(FrequencyCellEditor editor, Optional<String> optionalTitle) { SpeciesBatchRowModel speciesBatch = editor.getEditRow(); Objects.requireNonNull(speciesBatch, "Impossible d'éditer un lot non renseigné"); @@ -948,311 +947,6 @@ public void editBatch(FrequencyCellEditor editor, Optional<String> optionalTitle } - public void editBatchOld(FrequencyCellEditor editor, Optional<String> optionalTitle) { - - SpeciesBatchRowModel speciesBatch = editor.getEditRow(); - Objects.requireNonNull(speciesBatch, "Impossible d'éditer un lot non renseigné"); - - // on enlève la colonne spécifique à l'espèce précédente - if (maturityColumnId.isPresent()) { - TableColumnExt maturityColumn = ui.getObsTable().getColumnExt(maturityColumnId.get()); - ui.getObsTable().removeColumn(maturityColumn); - maturityColumnId = Optional.empty(); - } - - if (optionalTitle.isPresent()) { - - String title = optionalTitle.get(); - frequenciesHistogramPopup.setTitle(title + t("tutti.editSpeciesFrequencies.title")); - averageWeightsHistogramPopup.setTitle(title + weightUnit.decorateLabel(t("tutti.editSpeciesFrequencies.field.graphAverageWeight"))); - - } - - SpeciesFrequencyUIModel model = getModel(); - - model.setInitBatchEdition(true); - - try { - - FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; - FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; - - model.setNextEditableRowIndex(editor.getNextEditableRowIndex()); - model.setTotalNumber(null); - model.setTotalComputedWeight(null); - model.setTotalWeight(null); - model.setSimpleCount(null); - model.setMinStep(null); - model.setMaxStep(null); - model.setRtp(null); - model.setCopyRtpWeights(false); - model.setAddIndividualObservationOnRafale(false); - - frequencyEditor = editor; - - Caracteristic lengthStepCaracteristic = null; - CopyIndividualObservationMode copyIndividualObservationMode = null; - - List<SpeciesFrequencyRowModel> rows = new ArrayList<>(); - List<IndividualObservationBatchRowModel> obsRows = new ArrayList<>(); - - Species species = speciesBatch.getSpecies(); - IndividualObservationBatchTableModel obsTableModel = getObsTableModel(); - obsTableModel.setSpecies(species); - SamplingCodePrefix samplingCodePrefix = new SamplingCodePrefix(getConfig().getSamplingCodePrefix(), - decorate(species, DecoratorService.WITH_SURVEY_CODE_NO_NAME)); - obsTableModel.setSamplingCodePrefix(samplingCodePrefix); - - model.setTotalWeight(speciesBatch.getWeight()); - - Optional<String> speciesMaturityPmfmId = Optional.empty(); - - // set rtps - TuttiProtocol protocol = getDataContext().getProtocol(); - if (protocol != null) { - - Integer referenceTaxonId = species.getReferenceTaxonId(); - Optional<SpeciesProtocol> optSpeciesProtocol = - protocol.getSpecies().stream() - .filter(sp -> sp.getSpeciesReferenceTaxonId().equals(referenceTaxonId)) - .findFirst(); - - if (optSpeciesProtocol.isPresent()) { - SpeciesProtocol speciesProtocol = optSpeciesProtocol.get(); - Rtp rtp; - CaracteristicQualitativeValue sampleCategoryValue = (CaracteristicQualitativeValue) speciesBatch.getSampleCategoryValue(sexCaracteristic.getIdAsInt()); - - if (sampleCategoryValue != null) { - - if (Sexs.isMale(sampleCategoryValue)) { - rtp = speciesProtocol.getRtpMale(); - } else if (Sexs.isFemale(sampleCategoryValue)) { - rtp = speciesProtocol.getRtpFemale(); - } else { - rtp = speciesProtocol.getRtpUndefined(); - } - - } else { - rtp = speciesProtocol.getRtpUndefined(); - } - model.setRtp(rtp); - - speciesMaturityPmfmId = Optional.ofNullable(speciesProtocol.getMaturityPmfmId()); - } - } - - List<SpeciesFrequencyRowModel> frequency = speciesBatch.getFrequency(); - List<IndividualObservationBatchRowModel> individualObservations = speciesBatch.getIndividualObservation(); - - // - // try to load existing frequency - // - - if (CollectionUtils.isNotEmpty(frequency)) { - - SpeciesFrequencyTableModel tableModel = getTableModel(); - - for (SpeciesFrequencyRowModel rowModel : frequency) { - - SpeciesFrequencyRowModel newRow = tableModel.createNewRow(false, false); - newRow.copy(rowModel); - rows.add(newRow); - - } - - // use first frequency row length step caracteristics - - SpeciesFrequencyRowModel rowModel = frequency.get(0); - lengthStepCaracteristic = rowModel.getLengthStepCaracteristic(); - - if (log.isInfoEnabled()) { - log.info("Use existing lengthStep caracteristic / step " + decorate(lengthStepCaracteristic)); - } - } - - // Add maturity column if necessary - - Optional<Caracteristic> maturityCaracteristic = speciesMaturityPmfmId.map(maturityCaracteristics::get); - - setMaturityCaracteristic(maturityCaracteristic); - - // - // try to load existing individual observations - // - - if (CollectionUtils.isNotEmpty(individualObservations)) { - - IndividualObservationBatchTableModel tableModel = getObsTableModel(); - tableModel.setRows(new ArrayList<>()); - - int rankOrder = 1; - for (IndividualObservationBatchRowModel rowModel : individualObservations) { - - CopyIndividualObservationMode incomingCopyIndividualObservationMode = rowModel.getCopyIndividualObservationMode(); - Objects.requireNonNull(incomingCopyIndividualObservationMode, "Mode de recopie non trouvé sur l'observation individuelle: " + rowModel.getId()); - if (copyIndividualObservationMode == null) { - copyIndividualObservationMode = incomingCopyIndividualObservationMode; - } else { - if (copyIndividualObservationMode != incomingCopyIndividualObservationMode) { - throw new IllegalStateException("Plusieurs modes de recopie trouvés sur les observations individuelles du lot, ce qui est impossible"); - } - } - IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); - newRow.copy(rowModel); - newRow.setRankOrder(rankOrder++); - newRow.addPropertyChangeListener(obsChangedListener); - newRow.setValid(true); - - if (maturityCaracteristic.isPresent()) { - - Caracteristic caracteristicKey = maturityCaracteristic.get(); - Serializable caracteristicValue = newRow.getCaracteristics().remove(caracteristicKey); - newRow.getDefaultCaracteristics().putIfAbsent(caracteristicKey, caracteristicValue); - } - - obsRows.add(newRow); - - } - - // use first individual observation row length step caracteristics - - if (lengthStepCaracteristic == null) { - IndividualObservationBatchRowModel rowModel = individualObservations.get(0); - lengthStepCaracteristic = rowModel.getLengthStepCaracteristic(); - - if (log.isInfoEnabled()) { - log.info("Use existing lengthStep caracteristic / step " + decorate(lengthStepCaracteristic)); - } - } - - } else { - - // par défaut pas de mode de recopie - copyIndividualObservationMode = CopyIndividualObservationMode.NOTHING; - - } - - if (log.isDebugEnabled()) { - log.debug("copy individual observation mode : " + copyIndividualObservationMode); - } - - SpeciesBatchRowModel previousSiblingRow = frequencyEditor.getPreviousSiblingRow(); - - if (lengthStepCaracteristic == null && previousSiblingRow != null) { - - // try to get it from his previous brother row - List<SpeciesFrequencyRowModel> previousFrequency = previousSiblingRow.getFrequency(); - - if (CollectionUtils.isNotEmpty(previousFrequency)) { - - // use the first frequency length step caracteristic / step - SpeciesFrequencyRowModel rowModel = previousFrequency.get(0); - lengthStepCaracteristic = rowModel.getLengthStepCaracteristic(); - if (log.isInfoEnabled()) { - log.info("Use previous sibling existing lengthStep caracteristic / step " + decorate(lengthStepCaracteristic)); - } - } - } - - if (lengthStepCaracteristic == null) { - - String lengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); - - if (lengthStepPmfmId != null) { - - lengthStepCaracteristic = lengthStepCaracteristics.get(lengthStepPmfmId); - - if (log.isInfoEnabled()) { - log.info("Use existing from protocol lengthStep caracteristic / step " + decorate(lengthStepCaracteristic)); - } - - } - } - - if (lengthStepCaracteristic == null) { - String speciesLengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); - if (speciesLengthStepPmfmId == null) { - mode = FrequencyConfigurationMode.SIMPLE_COUNTING; - } - } - - if (log.isInfoEnabled()) { - log.info("FrequencyConfigurationMode: " + mode); - } - - if (log.isDebugEnabled()) { - log.debug("Will edit batch row: " + speciesBatch + " with " + rows.size() + " frequency"); - } - - Integer number = speciesBatch.getNumber(); - if (number != null && rows.isEmpty()) { - mode = FrequencyConfigurationMode.SIMPLE_COUNTING; - model.setSimpleCount(number); - } - - // make sure configuration mode will be rebound - model.setConfigurationMode(null); - model.setConfigurationMode(mode); - - model.setFrequenciesConfigurationMode(null); - model.setFrequenciesConfigurationMode(frequenciesMode); - - // connect model to validator - ui.getValidator().setBean(model); - - // always sort row by their length - // see http://forge.codelutin.com/issues/2482 - Collections.sort(rows); - - model.setLengthStepCaracteristic(lengthStepCaracteristic); - model.setRows(rows); - - CaracteristicMap sampleCategoryValues = new CaracteristicMap(); - Iterator<SampleCategory<?>> iterator = speciesBatch.iterator(); - iterator.forEachRemaining(sampleCategory -> { - Caracteristic caracteristic = sampleCategory.getCategoryDef().getCaracteristic(); - sampleCategoryValues.put(caracteristic, sampleCategory.getCategoryValue()); - }); - - obsTableModel.setDefaultCaracteristicValues(sampleCategoryValues); - - model.setIndividualObservationRows(obsRows); - obsTableModel.setRows(obsRows); - model.recomputeIndividualObservationRowsValidateState(); - - // keep batch (will be used to push back editing entry) - model.setBatch(speciesBatch); - - // let's change the copy mode (mark it in init mode to avoid user change confirmation and some recompuations) - model.setCopyIndividualObservationMode(null); - model.setCopyIndividualObservationMode(copyIndividualObservationMode); - - model.computeRowWeightWithRtp(); - - model.recomputeIndividualObservationRowsValidateState(); - model.recomputeRowsValidateState(); - - if (getContext().isIchtyometerConnected()) { - - // let's listen the ichtyometer - listenItchtyometer(); - - } - - individualObservationUICache.init(ui, frequencyEditor.getEditRow(), getDataContext().getFishingOperation()); - - model.setModify(false); - - getContext().addVetoableChangeListener(TuttiUIContext.PROPERTY_SCREEN, changeScreenListener); - - } finally { - model.setInitBatchEdition(false); - //FIXME Voir si c'est nécessaire ? - model.setModify(false); - } - - } - public boolean askCancelEditBeforeLeaving() { // Ask confirmation to quit screen String htmlMessage = String.format(AbstractApplicationUIHandler.CONFIRMATION_FORMAT, @@ -2009,12 +1703,12 @@ public void editBatch(FrequencyCellEditor editor, Optional<String> optionalTitle super.beforeOpenPopup(modelRowIndex, modelColumnIndex); boolean sampleCodeMenusEnabled = modelRowIndex >= 1 && ui.getObsTable().getSelectedRowCount() == 1 - && getObsTableModel().getRows().get(ui.getObsTable().getSelectedRow()).withSamplingCode(); + && getObsTableModel().getRows().get(ui.getObsTable().getSelectedRow()).withSamplingCode(); ui.getEditSampleCodeMenu().setEnabled(sampleCodeMenusEnabled); ui.getDeleteSampleCodeMenu().setEnabled(sampleCodeMenusEnabled); } - + public void loadFrequenciesAndObservations(List<SpeciesFrequencyRowModel> frequency, List<IndividualObservationBatchRowModel> individualObservations) { SpeciesFrequencyUIModel model = getModel(); SpeciesBatchRowModel speciesBatch = model.getBatch(); @@ -2042,7 +1736,7 @@ public void editBatch(FrequencyCellEditor editor, Optional<String> optionalTitle IndividualObservationBatchTableModel obsTableModel = getObsTableModel(); obsTableModel.setSpecies(species); - SamplingCodePrefix samplingCodePrefix = new SamplingCodePrefix(getConfig().getSamplingCodePrefix(), decorate(species, DecoratorService.WITH_SURVEY_CODE_NO_NAME)); + SamplingCodePrefix samplingCodePrefix = new SamplingCodePrefix(getConfig().getSamplingCodePrefix(), decorate(species, DecoratorService.WITH_SURVEY_CODE_NO_NAME)); obsTableModel.setSamplingCodePrefix(samplingCodePrefix); model.setTotalWeight(speciesBatch.getWeight()); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm