branch feature/8130 created (now 5bd489f)
This is an automated email from the git hooks/post-receive script. New change to branch feature/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git at 5bd489f Revue de la sauvegarde et intégration du mode de recopie This branch includes the following new commits: new f04b084 ajout de méthodes sympas pour éviter les cast new 9b54236 Réusinage du modèle des échantillons new 16a04d4 Ajout du mode de recopie au niveau des observations individuelles (See #8130) new d1bbe6e Récupération de la valeur qualitative mise en cache new 38f75a8 Surcharge de la méthode put de CaracteristicMap pour bien vérifier de ce qui est mis dedans new e2c0654 fix api new e727cda bien enregistrer la valeur qualitative de mode de recopie et non pas la valeur de l'enum + rennomage de la méthode d'extraction des caractéristiques de Sample new f2a064a Recopie du mode dans chaque ligne new 41deb41 Ajout méthode de recopie new 34b61ff Utilisation des méthodes withXXX + ne plus utiliser guava quand c'est possible new d8f89e4 Amélioration du chargement de l'écran (et intégration du mode de recopie) new 5bd489f Revue de la sauvegarde et intégration du mode de recopie The 12 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 5bd489fbf103db03bc70ca5f54474ab4e33187dd Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 08:50:23 2016 +0100 Revue de la sauvegarde et intégration du mode de recopie commit d8f89e4ce58e61db04fbbef283c016f4353708db Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 08:47:17 2016 +0100 Amélioration du chargement de l'écran (et intégration du mode de recopie) commit 34b61ff23388818412e60f9216e6d3a0692d0ca4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 08:42:49 2016 +0100 Utilisation des méthodes withXXX + ne plus utiliser guava quand c'est possible commit 41deb419bc5edcc5cf31640be32b6eb671117bfb Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:53:46 2016 +0100 Ajout méthode de recopie commit f2a064aee865f0b098539734090d2114882ead9d Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:53:30 2016 +0100 Recopie du mode dans chaque ligne commit e727cda8ea9a068afc3fbc5bf058ee199cd4c51a Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:53:00 2016 +0100 bien enregistrer la valeur qualitative de mode de recopie et non pas la valeur de l'enum + rennomage de la méthode d'extraction des caractéristiques de Sample commit e2c0654ffd0480b1fc50947759b0fc0d905c6398 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:51:18 2016 +0100 fix api commit 38f75a82358eb60974944c8a20f377630860b422 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:51:03 2016 +0100 Surcharge de la méthode put de CaracteristicMap pour bien vérifier de ce qui est mis dedans commit d1bbe6e3f819cefbf7c6b2e3dd778390133a8ca7 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:50:18 2016 +0100 Récupération de la valeur qualitative mise en cache commit 16a04d411f130d68e2244cf360c0cbd616a691fb Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 05:38:41 2016 +0100 Ajout du mode de recopie au niveau des observations individuelles (See #8130) commit 9b54236eeb0f3f371167c716b0718f9929e00639 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 05:37:38 2016 +0100 Réusinage du modèle des échantillons commit f04b084836517e03a9289974e15626eaa1fc7ab6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 05:36:36 2016 +0100 ajout de méthodes sympas pour éviter les cast -- 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/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit f04b084836517e03a9289974e15626eaa1fc7ab6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 05:36:36 2016 +0100 ajout de méthodes sympas pour éviter les cast --- .../persistence/entities/CaracteristicMap.java | 28 +++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) 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 b0a727e..09fa9e5 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 @@ -23,6 +23,7 @@ package fr.ifremer.tutti.persistence.entities; */ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import java.io.Serializable; import java.util.Collection; @@ -57,7 +58,32 @@ public class CaracteristicMap extends LinkedHashMap<Caracteristic, Serializable> public boolean hasNonNullValues(Collection<Caracteristic> caracteristicsToIgnore) { return keySet().stream() .filter(caracteristic -> caracteristicsToIgnore.contains(caracteristic) - && get(caracteristic) != null) + && get(caracteristic) != null) .count() > 0; } + + public CaracteristicQualitativeValue removeQualitativeValue(Caracteristic caracteristic) { + Serializable remove = remove(caracteristic); + if (remove != null && !(remove instanceof CaracteristicQualitativeValue)) { + throw new IllegalArgumentException("caracteristic value for " + caracteristic + " is not qualitative: " + remove); + } + return (CaracteristicQualitativeValue) remove; + } + + public String removeStringValue(Caracteristic caracteristic) { + Serializable remove = remove(caracteristic); + if (remove != null && !(remove instanceof String)) { + throw new IllegalArgumentException("caracteristic value for " + caracteristic + " is not text: " + remove); + } + return (String) remove; + } + + public Float removeFloatValue(Caracteristic caracteristic) { + Serializable remove = remove(caracteristic); + if (remove != null && !(remove instanceof Float)) { + throw new IllegalArgumentException("caracteristic value for " + caracteristic + " is not float: " + remove); + } + return (Float) remove; + } + } -- 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/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 9b54236eeb0f3f371167c716b0718f9929e00639 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 05:37:38 2016 +0100 Réusinage du modèle des échantillons --- .../AccidentalBatchPersistenceServiceImpl.java | 56 ++------ ...dualObservationBatchPersistenceServiceImpl.java | 148 +++++++++------------ .../service/util/SamplePersistenceHelper.java | 51 ++++++- .../src/main/xmi/tutti-persistence.zargo | Bin 64820 -> 65155 bytes 4 files changed, 115 insertions(+), 140 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java index 109f68a..d99d1da 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java @@ -36,7 +36,6 @@ import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; import fr.ifremer.adagio.core.dao.referential.pmfm.Matrix; import fr.ifremer.adagio.core.dao.referential.pmfm.MatrixId; import fr.ifremer.adagio.core.dao.referential.pmfm.MatrixImpl; -import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmId; import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxonImpl; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; @@ -56,7 +55,6 @@ import org.hibernate.type.IntegerType; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -273,39 +271,17 @@ public class AccidentalBatchPersistenceServiceImpl extends AbstractPersistenceSe // Prepare sample measurements - CaracteristicMap caracteristics = - CaracteristicMap.copy(source.getCaracteristics()); + CaracteristicMap caracteristics = samplePersistenceHelper.extractCaracteristics(source); if (source.getDeadOrAlive() != null) { - - Caracteristic caracteristic = caracteristicService.getDeadOrAliveCaracteristic(); - caracteristics.put(caracteristic, source.getDeadOrAlive()); + caracteristics.put(caracteristicService.getDeadOrAliveCaracteristic(), source.getDeadOrAlive()); } if (source.getGender() != null) { - - Caracteristic caracteristic = caracteristicService.getSexCaracteristic(); - caracteristics.put(caracteristic, source.getGender()); + caracteristics.put(caracteristicService.getSexCaracteristic(), source.getGender()); } - if (source.getWeight() != null) { - - Caracteristic caracteristic = caracteristicService.getWeightMeasuredCaracteristic(); - caracteristics.put(caracteristic, source.getWeight()); - } - - if (source.getLengthStepCaracteristic() != null) { - - Caracteristic caracteristic = caracteristicService.getCaracteristic(PmfmId.ID_PMFM.getValue()); - caracteristics.put(caracteristic, - source.getLengthStepCaracteristic().getId()); - - caracteristics.put(source.getLengthStepCaracteristic(), - source.getSize()); - } - - samplePersistenceHelper.setSampleMeasurements(target, - caracteristics); + samplePersistenceHelper.setSampleMeasurements(target, caracteristics); } @@ -315,36 +291,20 @@ public class AccidentalBatchPersistenceServiceImpl extends AbstractPersistenceSe Caracteristic genderCaracteristic = caracteristicService.getSexCaracteristic(); - CaracteristicMap result = batch.getCaracteristics(); + samplePersistenceHelper.loadSampleMeasurements(batch); - samplePersistenceHelper.fillSampleMeasurements( - result, batch.getIdAsInt()); + CaracteristicMap caracteristics = batch.getCaracteristics(); - CaracteristicQualitativeValue deadOrAliveValue = - (CaracteristicQualitativeValue) result.remove(deadOrAliveCaracteristic); + CaracteristicQualitativeValue deadOrAliveValue = caracteristics.removeQualitativeValue(deadOrAliveCaracteristic); if (deadOrAliveValue != null) { batch.setDeadOrAlive(deadOrAliveValue); } - CaracteristicQualitativeValue genderValue = - (CaracteristicQualitativeValue) result.remove(genderCaracteristic); + CaracteristicQualitativeValue genderValue = caracteristics.removeQualitativeValue(genderCaracteristic); if (genderValue != null) { batch.setGender(genderValue); } - Float weight = (Float) result.remove(caracteristicService.getCaracteristic(PmfmId.WEIGHT_MEASURED.getValue())); - if (weight != null) { - batch.setWeight(weight); - } - - String lengthClassId = (String) result.remove(caracteristicService.getCaracteristic(PmfmId.ID_PMFM.getValue())); - if (lengthClassId != null) { - Caracteristic lengthStepCaracteristic = caracteristicService.getCaracteristic(Integer.valueOf(lengthClassId)); - batch.setLengthStepCaracteristic(lengthStepCaracteristic); - - Serializable length = result.remove(lengthStepCaracteristic); - batch.setSize((Float) length); - } } } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java index 7a34ffd..a6bbe48 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java @@ -43,10 +43,12 @@ import fr.ifremer.adagio.core.dao.referential.pmfm.MatrixImpl; import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxonImpl; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; +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; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.service.referential.CaracteristicPersistenceService; import fr.ifremer.tutti.persistence.service.referential.SpeciesPersistenceService; @@ -60,7 +62,6 @@ import org.hibernate.type.IntegerType; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -68,6 +69,7 @@ import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -107,26 +109,15 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe public List<IndividualObservationBatch> getAllIndividualObservationBatchsForCruise(Integer cruiseId) { Preconditions.checkNotNull(cruiseId); - Caracteristic weightMeasuredCaracteristic = caracteristicService.getWeightMeasuredCaracteristic(); - Caracteristic pmfmIdCaracteristic = caracteristicService.getPmfmIdCaracteristic(); - List<IndividualObservationBatch> result = new ArrayList<>(); List<Integer> allFishingOperationIds = fishingOperationPersistenceService.getAllFishingOperationIds(cruiseId); allFishingOperationIds.forEach(fishingOperationId -> { Iterator<Object[]> list = queryList("allFishingOperationSamplesWithBatch", - "fishingOperationId", IntegerType.INSTANCE, fishingOperationId - ); - - FishingOperation fishingOperation = fishingOperationPersistenceService.getFishingOperation(fishingOperationId); - - while (list.hasNext()) { + "fishingOperationId", IntegerType.INSTANCE, fishingOperationId); - IndividualObservationBatch individualObservationBatch = toBean(weightMeasuredCaracteristic, pmfmIdCaracteristic, list.next()); - individualObservationBatch.setFishingOperation(fishingOperation); - result.add(individualObservationBatch); - - } + List<IndividualObservationBatch> resultForFishingOperation = toBeanListWithFishingOperation(list, fishingOperationId); + result.addAll(resultForFishingOperation); }); return Collections.unmodifiableList(result); @@ -137,23 +128,11 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe public List<IndividualObservationBatch> getAllIndividualObservationBatchsForFishingOperation(Integer fishingOperationId) { Preconditions.checkNotNull(fishingOperationId); - Caracteristic weightMeasuredCaracteristic = caracteristicService.getWeightMeasuredCaracteristic(); - Caracteristic pmfmIdCaracteristic = caracteristicService.getPmfmIdCaracteristic(); - - List<IndividualObservationBatch> result = new ArrayList<>(); Iterator<Object[]> list = queryList("allFishingOperationSamplesWithBatch", - "fishingOperationId", IntegerType.INSTANCE, fishingOperationId - ); + "fishingOperationId", IntegerType.INSTANCE, fishingOperationId); - FishingOperation fishingOperation = fishingOperationPersistenceService.getFishingOperation(fishingOperationId); + List<IndividualObservationBatch> result = toBeanListWithFishingOperation(list, fishingOperationId); - while (list.hasNext()) { - - IndividualObservationBatch individualObservationBatch = toBean(weightMeasuredCaracteristic, pmfmIdCaracteristic, list.next()); - individualObservationBatch.setFishingOperation(fishingOperation); - result.add(individualObservationBatch); - - } return Collections.unmodifiableList(result); } @@ -162,21 +141,10 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe public List<IndividualObservationBatch> getAllIndividualObservationBatchsForBatch(Integer batchId) { Preconditions.checkNotNull(batchId); - Caracteristic weightMeasuredCaracteristic = caracteristicService.getWeightMeasuredCaracteristic(); - Caracteristic pmfmIdCaracteristic = caracteristicService.getPmfmIdCaracteristic(); - Iterator<Object[]> list = queryList("allFishingOperationSamplesForBatch", - "batchId", IntegerType.INSTANCE, batchId - ); - - List<IndividualObservationBatch> result = Lists.newArrayList(); + "batchId", IntegerType.INSTANCE, batchId); - while (list.hasNext()) { - - IndividualObservationBatch individualObservationBatch = toBean(weightMeasuredCaracteristic, pmfmIdCaracteristic, list.next()); - result.add(individualObservationBatch); - - } + List<IndividualObservationBatch> result = toBeanList(list); return Collections.unmodifiableList(result); } @@ -326,27 +294,17 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe // Prepare sample measurements - CaracteristicMap caracteristics = - CaracteristicMap.copy(source.getCaracteristics()); - - if (source.getWeight() != null) { - - Caracteristic caracteristic = caracteristicService.getWeightMeasuredCaracteristic(); - caracteristics.put(caracteristic, source.getWeight()); - } - - if (source.getLengthStepCaracteristic() != null) { + CaracteristicMap caracteristics = samplePersistenceHelper.extractCaracteristics(source); - Caracteristic caracteristic = caracteristicService.getPmfmIdCaracteristic(); - caracteristics.put(caracteristic, source.getLengthStepCaracteristic().getId()); - - caracteristics.put(source.getLengthStepCaracteristic(), source.getSize()); - } + CopyIndividualObservationMode copyIndividualObservationMode = source.getCopyIndividualObservationMode(); + Objects.requireNonNull(copyIndividualObservationMode, "Any individual observation requires a copy mode"); + caracteristics.put(caracteristicService.getCopyIndividualObservationModeCaracteristic(), copyIndividualObservationMode); samplePersistenceHelper.setSampleMeasurements(target, caracteristics); + } - protected IndividualObservationBatch toBean(Caracteristic weightMeasuredCaracteristic, Caracteristic pmfmIdCaracteristic, Object[] source) { + protected IndividualObservationBatch toBean(Object[] source) { IndividualObservationBatch batch = IndividualObservationBatchs.newIndividualObservationBatch(); @@ -373,56 +331,66 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe batch.setCaracteristics(new CaracteristicMap()); // fill all measurements - fillSampleMeasurements(weightMeasuredCaracteristic, pmfmIdCaracteristic, batch); + fillSampleMeasurements(batch); return batch; } + protected List<IndividualObservationBatch> toBeanList(Iterator<Object[]> list) { + + List<IndividualObservationBatch> result = Lists.newArrayList(); + + while (list.hasNext()) { + + IndividualObservationBatch individualObservationBatch = toBean(list.next()); + result.add(individualObservationBatch); + + } + + return result; + + } + + protected List<IndividualObservationBatch> toBeanListWithFishingOperation(Iterator<Object[]> list, Integer fishingOperationId) { + + List<IndividualObservationBatch> result = toBeanList(list); + FishingOperation fishingOperation = fishingOperationPersistenceService.getFishingOperation(fishingOperationId); + result.forEach(individualObservationBatch -> individualObservationBatch.setFishingOperation(fishingOperation)); + return result; + } + protected Batch getBatch(Integer operationId) { Preconditions.checkNotNull(operationId); return batchHelper.getRootCatchBatchByFishingOperationId(operationId, false); } - protected void fillSampleMeasurements(Caracteristic weightMeasuredCaracteristic, Caracteristic pmfmIdCaracteristic, IndividualObservationBatch batch) { + protected void fillSampleMeasurements(IndividualObservationBatch batch) { - CaracteristicMap result = batch.getCaracteristics(); + samplePersistenceHelper.loadSampleMeasurements(batch); - samplePersistenceHelper.fillSampleMeasurements(result, batch.getIdAsInt()); + CaracteristicMap caracteristics = batch.getCaracteristics(); - Float weight = (Float) result.remove(weightMeasuredCaracteristic); - if (weight != null) { - batch.setWeight(weight); - } + Caracteristic copyIndividualObservationModeCaracteristic = caracteristicService.getCopyIndividualObservationModeCaracteristic(); - String lengthClassId = (String) result.remove(pmfmIdCaracteristic); - if (lengthClassId != null) { - Caracteristic lengthStepCaracteristic = caracteristicService.getCaracteristic(Integer.valueOf(lengthClassId)); - batch.setLengthStepCaracteristic(lengthStepCaracteristic); + CaracteristicQualitativeValue copyIndividualObservationMode = caracteristics.removeQualitativeValue(copyIndividualObservationModeCaracteristic); + if (copyIndividualObservationMode != null) { + batch.setCopyIndividualObservationMode(CopyIndividualObservationMode.valueOf(copyIndividualObservationMode.getIdAsInt())); + } else { + batch.setCopyIndividualObservationMode(CopyIndividualObservationMode.NOTHING); - Serializable length = result.remove(lengthStepCaracteristic); - batch.setSize((Float) length); } + } protected Set<Integer> getAllIndividualObservationBatchIdsForBatch(Integer batchId) { Preconditions.checkNotNull(batchId); - Iterator<Integer> list = queryListTyped("allFishingOperationSampleIdsForBatch", - "batchId", IntegerType.INSTANCE, batchId - ); + "batchId", IntegerType.INSTANCE, batchId); - Set<Integer> result = new LinkedHashSet<>(); - - while (list.hasNext()) { - - Integer id = list.next(); - result.add(id); - - } - return result; + return toIds(list); } @@ -431,16 +399,19 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe Preconditions.checkNotNull(fishingOperationId); Iterator<Integer> list = queryListTyped("allFishingOperationSampleIds", - "fishingOperationId", IntegerType.INSTANCE, fishingOperationId - ); + "fishingOperationId", IntegerType.INSTANCE, fishingOperationId); + + return toIds(list); + + } + + protected Set<Integer> toIds(Iterator<Integer> list) { Set<Integer> result = new LinkedHashSet<>(); while (list.hasNext()) { - Integer id = list.next(); result.add(id); - } return result; @@ -520,6 +491,7 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe } samplePersistenceHelper.deleteSample(observationId); } + } } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java index 89152cf..2893a31 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java @@ -29,8 +29,10 @@ import fr.ifremer.adagio.core.dao.data.sample.SampleDao; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; import fr.ifremer.adagio.core.dao.referential.QualityFlagCode; import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; +import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmId; import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmImpl; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.data.SampleEntity; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValues; import fr.ifremer.tutti.persistence.service.AbstractPersistenceService; @@ -130,9 +132,13 @@ public class SamplePersistenceHelper extends AbstractPersistenceService { } } - public void fillSampleMeasurements(CaracteristicMap result, Integer sampleId) { - Iterator<Object[]> list = queryList("sampleMeasurements", - "sampleId", IntegerType.INSTANCE, sampleId); + public <S extends SampleEntity> void loadSampleMeasurements(S sample) { + + Integer sampleId = sample.getIdAsInt(); + Iterator<Object[]> list = queryList("sampleMeasurements", "sampleId", IntegerType.INSTANCE, sampleId); + + CaracteristicMap caracteristicMap = sample.getCaracteristics(); + while (list.hasNext()) { int colIndex = 0; Object[] source = list.next(); @@ -155,8 +161,45 @@ public class SamplePersistenceHelper extends AbstractPersistenceService { value = alphanumericalValue; break; } - result.put(caracteristic, value); + caracteristicMap.put(caracteristic, value); } + + Float weight = caracteristicMap.removeFloatValue(caracteristicService.getCaracteristic(PmfmId.WEIGHT_MEASURED.getValue())); + if (weight != null) { + sample.setWeight(weight); + } + + String lengthClassId = caracteristicMap.removeStringValue(caracteristicService.getCaracteristic(PmfmId.ID_PMFM.getValue())); + if (lengthClassId != null) { + Caracteristic lengthStepCaracteristic = caracteristicService.getCaracteristic(Integer.valueOf(lengthClassId)); + sample.setLengthStepCaracteristic(lengthStepCaracteristic); + + Float length = caracteristicMap.removeFloatValue(lengthStepCaracteristic); + sample.setSize(length); + } + + } + + public <S extends SampleEntity> CaracteristicMap extractCaracteristics(S sample) { + + CaracteristicMap caracteristics = CaracteristicMap.copy(sample.getCaracteristics()); + + if (sample.getWeight() != null) { + + Caracteristic caracteristic = caracteristicService.getWeightMeasuredCaracteristic(); + caracteristics.put(caracteristic, sample.getWeight()); + } + + if (sample.getLengthStepCaracteristic() != null) { + + Caracteristic caracteristic = caracteristicService.getCaracteristic(PmfmId.ID_PMFM.getValue()); + caracteristics.put(caracteristic, sample.getLengthStepCaracteristic().getId()); + + caracteristics.put(sample.getLengthStepCaracteristic(), sample.getSize()); + } + + return caracteristics; + } protected SampleMeasurement setSampleMeasurement(Sample sample, Caracteristic caracteristic, Serializable value) { diff --git a/tutti-persistence/src/main/xmi/tutti-persistence.zargo b/tutti-persistence/src/main/xmi/tutti-persistence.zargo index 8f3ae96..dd234c0 100644 Binary files a/tutti-persistence/src/main/xmi/tutti-persistence.zargo and b/tutti-persistence/src/main/xmi/tutti-persistence.zargo differ -- 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/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 16a04d411f130d68e2244cf360c0cbd616a691fb Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 05:38:41 2016 +0100 Ajout du mode de recopie au niveau des observations individuelles (See #8130) --- .../tutti/persistence/TuttiPersistenceImpl.java | 5 ++++ .../persistence/TuttiPersistenceNoDbImpl.java | 5 ++++ .../data/CopyIndividualObservationMode.java | 28 ++++++++++++++++++ .../CaracteristicPersistenceService.java | 9 ++++++ .../CaracteristicPersistenceServiceImpl.java | 18 ++++++++++-- .../ifremer/tutti/service/PersistenceService.java | 5 ++++ .../catches/multipost/MultiPostImportService.java | 6 ++-- .../CopyIndividualObservationMode.java | 34 ---------------------- .../IndividualObservationBatchRowModel.java | 11 +++++++ .../frequency/SpeciesFrequencyTableModel.java | 2 +- .../species/frequency/SpeciesFrequencyUI.jaxx | 2 +- .../frequency/SpeciesFrequencyUIHandler.java | 2 +- .../species/frequency/SpeciesFrequencyUIModel.java | 2 +- 13 files changed, 85 insertions(+), 44 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java index 088d456..4a06981 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java @@ -451,6 +451,11 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public Caracteristic getCopyIndividualObservationModeCaracteristic() { + return getCaracteristicService().getCopyIndividualObservationModeCaracteristic(); + } + + @Override public Caracteristic getCaracteristic(Integer pmfmId) { return getCaracteristicService().getCaracteristic(pmfmId); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java index 0c9b52a..b703b50 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java @@ -325,6 +325,11 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override + public Caracteristic getCopyIndividualObservationModeCaracteristic() { + throw notImplemented(); + } + + @Override public Caracteristic getCaracteristic(Integer pmfmId) { throw notImplemented(); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/CopyIndividualObservationMode.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/CopyIndividualObservationMode.java new file mode 100644 index 0000000..a3e1341 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/CopyIndividualObservationMode.java @@ -0,0 +1,28 @@ +package fr.ifremer.tutti.persistence.entities.data; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public enum CopyIndividualObservationMode { + + ALL(2558), NOTHING(2559), SIZE(2560); + + private final int qualitativeValueId; + + CopyIndividualObservationMode(int qualitativeValueId) { + + this.qualitativeValueId = qualitativeValueId; + } + + public static CopyIndividualObservationMode valueOf(int qualitativeValueId) { + + for (CopyIndividualObservationMode copyIndividualObservationMode : values()) { + if (qualitativeValueId == copyIndividualObservationMode.qualitativeValueId) { + return copyIndividualObservationMode; + } + } + + throw new IllegalStateException("Could not find CopyIndividualObservationMode for qualitativeValueId: " + qualitativeValueId); + } +} diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/CaracteristicPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/CaracteristicPersistenceService.java index 7fd0987..e727fad 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/CaracteristicPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/CaracteristicPersistenceService.java @@ -43,6 +43,13 @@ import java.util.List; @Transactional(readOnly = true) public interface CaracteristicPersistenceService extends TuttiPersistenceServiceImplementor { + //FIXME A remplacer par celui que l'Ifremer doit fournir + //FIXME A déplacer dand adagio + Integer CPS_TYPE_PMFM_ID = 6; + + //FIXME A déplacer dand adagio + Integer COPY_INDIVIDUAL_OBSERVATION_MODE_PMFM_ID = 1762; + /** * @return all caracteristics of the system. * @since 1.0 @@ -97,6 +104,8 @@ public interface CaracteristicPersistenceService extends TuttiPersistenceService Caracteristic getWeightMeasuredCaracteristic(); + Caracteristic getCopyIndividualObservationModeCaracteristic(); + @Cacheable(value = "pmfmById", key = "#pmfmId") Caracteristic getCaracteristic(Integer pmfmId); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/CaracteristicPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/CaracteristicPersistenceServiceImpl.java index 7ec511f..0c233ee 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/CaracteristicPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/CaracteristicPersistenceServiceImpl.java @@ -38,6 +38,8 @@ import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativ import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValues; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType; import fr.ifremer.tutti.persistence.entities.referential.Caracteristics; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.hibernate.type.IntegerType; import org.springframework.cache.Cache; import org.springframework.stereotype.Service; @@ -57,6 +59,9 @@ import java.util.Set; @Service("caracteristicPersistenceService") public class CaracteristicPersistenceServiceImpl extends ReferentialPersistenceServiceSupport implements CaracteristicPersistenceService { + /** Logger. */ + private static final Log log = LogFactory.getLog(CaracteristicPersistenceServiceImpl.class); + //TODO-TC We should prefer AOP thant Proxy stuff to avoid this. @Resource(name = "caracteristicPersistenceService") protected CaracteristicPersistenceService thisService; @@ -65,8 +70,6 @@ public class CaracteristicPersistenceServiceImpl extends ReferentialPersistenceS protected Predicate<SpeciesAbleBatch> batchVracPredicate; - public static final Integer CPS_TYPE_PMFM_ID = 6; - @Override public void init() { super.init(); @@ -85,7 +88,8 @@ public class CaracteristicPersistenceServiceImpl extends ReferentialPersistenceS PmfmId.TRAWL_DISTANCE.getValue(), PmfmId.SURVEY_PART.getValue(), PmfmId.SORTED_UNSORTED.getValue(), - PmfmId.ID_PMFM.getValue() + PmfmId.ID_PMFM.getValue(), + COPY_INDIVIDUAL_OBSERVATION_MODE_PMFM_ID ); } @@ -239,7 +243,15 @@ public class CaracteristicPersistenceServiceImpl extends ReferentialPersistenceS } @Override + public Caracteristic getCopyIndividualObservationModeCaracteristic() { + return thisService.getCaracteristic(COPY_INDIVIDUAL_OBSERVATION_MODE_PMFM_ID); + } + + @Override public Caracteristic getCaracteristic(Integer pmfmId) { + if (log.isInfoEnabled()) { + log.info("Loading caracteristic: " + pmfmId); + } Object[] source = queryUniqueWithStatus("pmfmById", "pmfmId", IntegerType.INSTANCE, pmfmId, "unitIdNone", IntegerType.INSTANCE, UnitId.NONE.getValue()); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java index 054ae3b..568e881 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java @@ -883,6 +883,11 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override + public Caracteristic getCopyIndividualObservationModeCaracteristic() { + return driver.getCopyIndividualObservationModeCaracteristic(); + } + + @Override public Caracteristic getCaracteristic(Integer pmfmId) { return driver.getCaracteristic(pmfmId); } 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 a2402b3..cf5ea23 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 @@ -38,7 +38,7 @@ import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequencys; import fr.ifremer.tutti.persistence.entities.data.BenthosBatchs; -import fr.ifremer.tutti.persistence.entities.data.CaracteristicsAware; +import fr.ifremer.tutti.persistence.entities.data.SampleAware; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; @@ -1183,8 +1183,8 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } - protected <B extends CaracteristicsAware> void importCaracteristics(MultiPostImportContext importContext, - Map<String, B> batches) throws IOException { + protected <B extends SampleAware> void importCaracteristics(MultiPostImportContext importContext, + Map<String, B> batches) throws IOException { try (Reader reader = importContext.newFileReader(CARACTERISTIC_FILE)) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/CopyIndividualObservationMode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/CopyIndividualObservationMode.java deleted file mode 100644 index 7755e03..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/CopyIndividualObservationMode.java +++ /dev/null @@ -1,34 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation; - -/* - * #%L - * Tutti :: UI - * $Id:$ - * $HeadURL:$ - * %% - * Copyright (C) 2012 - 2016 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -/** - * @author Kevin Morin (Code Lutin) - * @since 4.5 - */ -public enum CopyIndividualObservationMode { - - ALL, NOTHING, SIZE -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java index 31e8432..d17af57 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java @@ -26,6 +26,7 @@ import com.google.common.collect.Lists; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.Attachment; +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; @@ -338,6 +339,16 @@ public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel firePropertyChange(PROPERTY_SYNCHRONIZATION_STATUS, oldValue, synchronizationStatus); } + @Override + public CopyIndividualObservationMode getCopyIndividualObservationMode() { + return editObject.getCopyIndividualObservationMode(); + } + + @Override + public void setCopyIndividualObservationMode(CopyIndividualObservationMode copyIndividualObservationMode) { + editObject.setCopyIndividualObservationMode(copyIndividualObservationMode); + } + //------------------------------------------------------------------------// //-- AttachmentModelAware --// //------------------------------------------------------------------------// diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java index c6d9b67..1df6af3 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; */ import fr.ifremer.tutti.type.WeightUnit; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.CopyIndividualObservationMode; +import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import org.jdesktop.swingx.table.TableColumnModelExt; import org.jfree.data.xy.XYSeries; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx index 9bbb08f..1912622 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx @@ -23,11 +23,11 @@ implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<SpeciesFrequencyUIModel, SpeciesFrequencyUIHandler>'> <import> + fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode fr.ifremer.tutti.persistence.entities.referential.Caracteristic fr.ifremer.tutti.ui.swing.TuttiHelpBroker fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode - fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.CopyIndividualObservationMode fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.AddSpeciesFrequencyLengthStepCaracteristicAction fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.CancelEditSpeciesFrequencyAction fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.GenerateSpeciesFrequencyLengthStepsAction 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 0b860b1..bf270ed 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 @@ -47,7 +47,7 @@ import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.CopyIndividualObservationMode; +import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; 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 5e33bb3..bc64ca0 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 @@ -29,7 +29,7 @@ import fr.ifremer.tutti.persistence.entities.protocol.Rtp; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.CopyIndividualObservationMode; +import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.util.computable.ComputableData; -- 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/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit d1bbe6e3f819cefbf7c6b2e3dd778390133a8ca7 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:50:18 2016 +0100 Récupération de la valeur qualitative mise en cache --- .../entities/data/CopyIndividualObservationMode.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/CopyIndividualObservationMode.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/CopyIndividualObservationMode.java index a3e1341..2aebca8 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/CopyIndividualObservationMode.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/CopyIndividualObservationMode.java @@ -1,5 +1,9 @@ package fr.ifremer.tutti.persistence.entities.data; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValues; + /** * @author Kevin Morin (Code Lutin) * @since 4.5 @@ -10,11 +14,20 @@ public enum CopyIndividualObservationMode { private final int qualitativeValueId; + private CaracteristicQualitativeValue qualitativeValue; + CopyIndividualObservationMode(int qualitativeValueId) { this.qualitativeValueId = qualitativeValueId; } + public CaracteristicQualitativeValue getQualitativeValue(Caracteristic copyIndividualObservationModeCaracteristic) { + if (qualitativeValue == null) { + qualitativeValue = CaracteristicQualitativeValues.getQualitativeValue(copyIndividualObservationModeCaracteristic, qualitativeValueId); + } + return qualitativeValue; + } + public static CopyIndividualObservationMode valueOf(int qualitativeValueId) { for (CopyIndividualObservationMode copyIndividualObservationMode : values()) { -- 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/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 38f75a82358eb60974944c8a20f377630860b422 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:51:03 2016 +0100 Surcharge de la méthode put de CaracteristicMap pour bien vérifier de ce qui est mis dedans --- .../persistence/entities/CaracteristicMap.java | 33 ++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 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 09fa9e5..ce5af9b 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 @@ -24,6 +24,7 @@ package fr.ifremer.tutti.persistence.entities; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType; import java.io.Serializable; import java.util.Collection; @@ -57,8 +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; } @@ -86,4 +86,33 @@ public class CaracteristicMap extends LinkedHashMap<Caracteristic, Serializable> return (Float) remove; } + @Override + public Serializable put(Caracteristic key, Serializable value) { + + if (value != null) { + CaracteristicType caracteristicType = key.getCaracteristicType(); + switch (caracteristicType) { + + case NUMBER: + if (!(value instanceof Number)) { + throw new IllegalArgumentException("caracteristic value for " + key + " is not a number: " + value); + } + break; + case QUALITATIVE: + + // check value is a qualitative value + if (!(value instanceof CaracteristicQualitativeValue)) { + throw new IllegalArgumentException("caracteristic value for " + key + " is not qualitative: " + value); + } + break; + case TEXT: + if (!(value instanceof String)) { + throw new IllegalArgumentException("caracteristic value for " + key + " is not text: " + value); + } + break; + } + } + + return super.put(key, value); + } } -- 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/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit e2c0654ffd0480b1fc50947759b0fc0d905c6398 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:51:18 2016 +0100 fix api --- .../tutti/service/catches/multipost/MultiPostImportService.java | 4 ++-- 1 file changed, 2 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 cf5ea23..1b2fd1c 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 @@ -38,7 +38,7 @@ import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequencys; import fr.ifremer.tutti.persistence.entities.data.BenthosBatchs; -import fr.ifremer.tutti.persistence.entities.data.SampleAware; +import fr.ifremer.tutti.persistence.entities.data.SampleEntity; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; @@ -1183,7 +1183,7 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult } - protected <B extends SampleAware> void importCaracteristics(MultiPostImportContext importContext, + protected <B extends SampleEntity> void importCaracteristics(MultiPostImportContext importContext, Map<String, B> batches) throws IOException { try (Reader reader = importContext.newFileReader(CARACTERISTIC_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 feature/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit e727cda8ea9a068afc3fbc5bf058ee199cd4c51a Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:53:00 2016 +0100 bien enregistrer la valeur qualitative de mode de recopie et non pas la valeur de l'enum + rennomage de la méthode d'extraction des caractéristiques de Sample --- .../persistence/service/AccidentalBatchPersistenceServiceImpl.java | 2 +- .../service/IndividualObservationBatchPersistenceServiceImpl.java | 7 +++++-- .../tutti/persistence/service/util/SamplePersistenceHelper.java | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java index d99d1da..d613639 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java @@ -271,7 +271,7 @@ public class AccidentalBatchPersistenceServiceImpl extends AbstractPersistenceSe // Prepare sample measurements - CaracteristicMap caracteristics = samplePersistenceHelper.extractCaracteristics(source); + CaracteristicMap caracteristics = samplePersistenceHelper.extractCommonSampleCaracteristics(source); if (source.getDeadOrAlive() != null) { caracteristics.put(caracteristicService.getDeadOrAliveCaracteristic(), source.getDeadOrAlive()); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java index a6bbe48..d75a906 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java @@ -294,11 +294,14 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe // Prepare sample measurements - CaracteristicMap caracteristics = samplePersistenceHelper.extractCaracteristics(source); + CaracteristicMap caracteristics = samplePersistenceHelper.extractCommonSampleCaracteristics(source); CopyIndividualObservationMode copyIndividualObservationMode = source.getCopyIndividualObservationMode(); Objects.requireNonNull(copyIndividualObservationMode, "Any individual observation requires a copy mode"); - caracteristics.put(caracteristicService.getCopyIndividualObservationModeCaracteristic(), copyIndividualObservationMode); + + Caracteristic copyIndividualObservationModeCaracteristic = caracteristicService.getCopyIndividualObservationModeCaracteristic(); + CaracteristicQualitativeValue qualitativeValue = copyIndividualObservationMode.getQualitativeValue(copyIndividualObservationModeCaracteristic); + caracteristics.put(copyIndividualObservationModeCaracteristic, qualitativeValue); samplePersistenceHelper.setSampleMeasurements(target, caracteristics); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java index 2893a31..36c2ddc 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java @@ -180,7 +180,7 @@ public class SamplePersistenceHelper extends AbstractPersistenceService { } - public <S extends SampleEntity> CaracteristicMap extractCaracteristics(S sample) { + public <S extends SampleEntity> CaracteristicMap extractCommonSampleCaracteristics(S sample) { CaracteristicMap caracteristics = CaracteristicMap.copy(sample.getCaracteristics()); -- 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/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit f2a064aee865f0b098539734090d2114882ead9d Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:53:30 2016 +0100 Recopie du mode dans chaque ligne --- .../individualobservation/IndividualObservationBatchRowModel.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java index d17af57..730fe1b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java @@ -405,7 +405,7 @@ public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel && (getAttachment() == null || getAttachment().isEmpty()); } - public void copyIndividualObservationBatchRowModel(IndividualObservationBatchRowModel source) { + public void copy(IndividualObservationBatchRowModel source) { setId(source.getId()); setLengthStepCaracteristic(source.getLengthStepCaracteristic()); setSize(source.getSize()); @@ -414,6 +414,7 @@ public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel setCaracteristics(source.getCaracteristics()); setDefaultCaracteristics(source.getDefaultCaracteristics()); setComment(source.getComment()); + setCopyIndividualObservationMode(source.getCopyIndividualObservationMode()); addAllAttachment(source.getAttachment()); } } -- 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/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 41deb419bc5edcc5cf31640be32b6eb671117bfb Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 07:53:46 2016 +0100 Ajout méthode de recopie --- .../catches/species/frequency/SpeciesFrequencyRowModel.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java index 5a8718f..38319b6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java @@ -307,4 +307,11 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa } return averageWeight; } + + public void copy(SpeciesFrequencyRowModel source) { + setLengthStepCaracteristic(source.getLengthStepCaracteristic()); + setLengthStep(source.getLengthStep()); + setNumber(source.getNumber()); + setWeight(source.getWeight()); + } } -- 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/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 34b61ff23388818412e60f9216e6d3a0692d0ca4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 08:42:49 2016 +0100 Utilisation des méthodes withXXX + ne plus utiliser guava quand c'est possible --- .../species/frequency/SpeciesFrequencyUIModel.java | 105 ++++++++++----------- 1 file changed, 48 insertions(+), 57 deletions(-) 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 bc64ca0..c375999 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 @@ -22,14 +22,12 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; * #L% */ -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.Rtp; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode; -import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.util.computable.ComputableData; @@ -44,6 +42,7 @@ import org.jfree.data.xy.XYSeriesCollection; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyVetoException; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -90,7 +89,7 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_TOTAL_NUMBER = "totalNumber"; - public static final String PROPERTY_TOTAL_COMPUTED_OR_NOT_WEIGHT = "totalComputedOrNotWeight"; +// public static final String PROPERTY_TOTAL_COMPUTED_OR_NOT_WEIGHT = "totalComputedOrNotWeight"; public static final String PROPERTY_TOTAL_WEIGHT = "totalWeight"; @@ -253,9 +252,9 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa */ protected boolean canEditLengthStep = true; - /** * What to copy from the individual observations to the data table + * * @since 4.5 */ protected CopyIndividualObservationMode copyIndividualObservationMode = CopyIndividualObservationMode.NOTHING; @@ -314,7 +313,7 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa this.individualObservationWeightUnit = individualObservationWeightUnit; this.sampleCategoryModel = sampleCategoryModel; this.totalComputedOrNotWeight.addPropagateListener(PROPERTY_TOTAL_WEIGHT, this); - setEmptyRows(Sets.<SpeciesFrequencyRowModel>newHashSet()); + setEmptyRows(new HashSet<>()); XYSeries series = new XYSeries("", true, false); @@ -328,16 +327,16 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa averageWeightsDataset.setIntervalPositionFactor(0); averageWeightsDataset.setIntervalWidth(0); - this.defaultCaracteristic = defaultCaracteristic == null ? - Lists.<Caracteristic>newArrayList() : - Lists.newArrayList(defaultCaracteristic); + this.defaultCaracteristic = defaultCaracteristic == null + ? new ArrayList<>() + : new ArrayList<>(defaultCaracteristic); setIndividualObservationRowsInError(new HashSet<>()); } public void reloadRows() { - setEmptyRows(Sets.<SpeciesFrequencyRowModel>newHashSet()); + setEmptyRows(new HashSet<>()); XYSeries frequenciesSeries = frequenciesDataset.getSeries(0); frequenciesSeries.clear(); @@ -350,21 +349,18 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa if (rows != null) { - for (SpeciesFrequencyRowModel row : rows) { - - if (row.isValid()) { + rows.stream().filter(SpeciesFrequencyRowModel::isValid).forEach(row -> { - Float lengthStep = row.getLengthStep(); - Integer number = row.getNumber(); + Float lengthStep = row.getLengthStep(); + Integer number = row.getNumber(); - frequenciesSeries.addOrUpdate(lengthStep, number); + frequenciesSeries.addOrUpdate(lengthStep, number); - Float averageWeight = individualObservationWeightUnit.convertWeight(row.computeAverageWeight(), weightUnit); - if (averageWeight != null) { - averageWeightsSeries.addOrUpdate(lengthStep, averageWeight); - } + Float averageWeight = individualObservationWeightUnit.convertWeight(row.computeAverageWeight(), weightUnit); + if (averageWeight != null) { + averageWeightsSeries.addOrUpdate(lengthStep, averageWeight); } - } + }); } recomputeTotalNumberAndWeight(); @@ -387,17 +383,15 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa if (valid) { - // number conditions : not null and positive number - Integer number = row.getNumber(); - valid = number != null && number > 0; + // number conditions : number filled + valid = row.withNumber(); } if (valid) { - // weight conditions - Float weight = row.getWeight(); - valid = getNbRowsWithWeight() == 0 || (weight != null && weight > 0); + // weight conditions : with no weight, or weight filled + valid = getNbRowsWithWeight() == 0 || row.withWeight(); } @@ -459,9 +453,9 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa return lengthStepCaracteristic == null ? null : lengthStepCaracteristic.getUnit(); } - public Float getLengthStepCaracteristicPrecision() { - return lengthStepCaracteristic == null ? null : lengthStepCaracteristic.getPrecision(); - } +// public Float getLengthStepCaracteristicPrecision() { +// return lengthStepCaracteristic == null ? null : lengthStepCaracteristic.getPrecision(); +// } public Float getMinStep() { return minStep; @@ -565,11 +559,11 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa return totalComputedOrNotWeight; } - public void setTotalComputedOrNotWeight(ComputableData<Float> totalComputedOrNotWeight) { - Object oldValue = getTotalComputedOrNotWeight(); - this.totalComputedOrNotWeight = totalComputedOrNotWeight; - firePropertyChange(PROPERTY_TOTAL_COMPUTED_OR_NOT_WEIGHT, oldValue, totalComputedOrNotWeight); - } +// public void setTotalComputedOrNotWeight(ComputableData<Float> totalComputedOrNotWeight) { +// Object oldValue = getTotalComputedOrNotWeight(); +// this.totalComputedOrNotWeight = totalComputedOrNotWeight; +// firePropertyChange(PROPERTY_TOTAL_COMPUTED_OR_NOT_WEIGHT, oldValue, totalComputedOrNotWeight); +// } public Float getTotalWeight() { return totalComputedOrNotWeight.getData(); @@ -591,11 +585,12 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa firePropertyChange(PROPERTY_TOTAL_COMPUTED_WEIGHT, oldValue, totalComputedWeight); } + // Utilisé dans un validateur, ne pas supprimer public boolean isTotalWeightSameAsComputedWeight() { Float totalWeight = getTotalWeight(); Float computedWeight = getTotalComputedWeight(); return totalWeight != null && computedWeight != null - && Weights.isEqualWeight(totalWeight, computedWeight); + && Weights.isEqualWeight(totalWeight, computedWeight); } public Rtp getRtp() { @@ -612,11 +607,11 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa return useRTP; } - public void setUseRTP(boolean useRTP) { - Object oldValue = isUseRTP(); - this.useRTP = useRTP; - firePropertyChange(PROPERTY_USE_RTP, oldValue, useRTP); - } +// public void setUseRTP(boolean useRTP) { +// Object oldValue = isUseRTP(); +// this.useRTP = useRTP; +// firePropertyChange(PROPERTY_USE_RTP, oldValue, useRTP); +// } public boolean isAddIndividualObservationOnRafale() { return addIndividualObservationOnRafale; @@ -699,9 +694,9 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa return cache.getNbRowsWithWeight(); } - public boolean isAllRowsWithWeight() { - return cache.getNbRowsWithWeight() == rows.size(); - } +// public boolean isAllRowsWithWeight() { +// return cache.getNbRowsWithWeight() == rows.size(); +// } public boolean isSomeRowsWithWeightAndOtherWithout() { @@ -782,7 +777,7 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa boolean result = true; - if (rows != null) { + if (rows != null) { for (SpeciesFrequencyRowModel row : rows) { if (row.isEmpty()) { @@ -833,7 +828,7 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa lengthStep = lengthStep / 10; } - float weight = (float)(number * rtp.getA() * Math.pow(lengthStep, rtp.getB())); + float weight = (float) (number * rtp.getA() * Math.pow(lengthStep, rtp.getB())); if (weightUnit == WeightUnit.KG) { weight = weight / 1000; } @@ -905,8 +900,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa } public boolean isNonEmptyIndividualObservationRowsInError() { - return individualObservationRowsInError != null && - individualObservationRowsInError.stream().anyMatch(row -> !row.isEmpty()); + return individualObservationRowsInError != null + && individualObservationRowsInError.stream().anyMatch(row -> !row.isEmpty()); } public void setNonEmptyIndividualObservationRowsInError(boolean oldNonEmptyIndividualObservationInError) { @@ -927,9 +922,7 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa log.info("Revalidate all rows"); } - for (SpeciesFrequencyRowModel r : rows) { - recomputeRowValidState(r); - } + rows.forEach(this::recomputeRowValidState); } @@ -939,19 +932,17 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa log.info("Revalidate all individual observation rows"); } - for (IndividualObservationBatchRowModel r : individualObservationRows) { - recomputeIndividualObservationRowValidState(r); - } + individualObservationRows.forEach(this::recomputeIndividualObservationRowValidState); } public boolean isIndividualObservationRowValid(IndividualObservationBatchRowModel row) { return copyIndividualObservationMode == CopyIndividualObservationMode.NOTHING || copyIndividualObservationMode == CopyIndividualObservationMode.SIZE - && row.getSize() != null + && row.getSize() != null || copyIndividualObservationMode == CopyIndividualObservationMode.ALL - && row.getSize() != null - && row.getWeight() != null; + && row.getSize() != null + && row.getWeight() != null; } public void setDataSetIntervalWidth(float step) { -- 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/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit d8f89e4ce58e61db04fbbef283c016f4353708db Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 08:47:17 2016 +0100 Amélioration du chargement de l'écran (et intégration du mode de recopie) --- .../frequency/SpeciesFrequencyUIHandler.java | 331 ++++++++++++--------- 1 file changed, 192 insertions(+), 139 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 bf270ed..c98bf4a 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 @@ -30,6 +30,7 @@ import fr.ifremer.tutti.ichtyometer.feed.record.FeedReaderMeasureRecord; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Attachment; +import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import fr.ifremer.tutti.persistence.entities.data.SampleCategory; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.Rtp; @@ -47,7 +48,6 @@ import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode; -import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; @@ -117,6 +117,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -127,7 +128,7 @@ import static org.nuiton.i18n.I18n.t; * @since 0.2 */ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<SpeciesFrequencyRowModel, SpeciesFrequencyUIModel, SpeciesFrequencyUI> - implements CaracteristicMapColumnUIHandler { + implements CaracteristicMapColumnUIHandler { /** Logger. */ private static final Log log = LogFactory.getLog(SpeciesFrequencyUIHandler.class); @@ -205,7 +206,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // we only update the frequencies if the row is valid if (row.isValid()) { if (getModel().mustCopyIndividualObservationSize() - && IndividualObservationBatchRowModel.PROPERTY_SIZE.equals(propertyName)) { + && IndividualObservationBatchRowModel.PROPERTY_SIZE.equals(propertyName)) { Float oldValue = (Float) evt.getOldValue(); Float newValue = (Float) evt.getNewValue(); @@ -219,7 +220,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } if (getModel().mustCopyIndividualObservationWeight() - && IndividualObservationBatchRowModel.PROPERTY_WEIGHT.equals(propertyName)) { + && IndividualObservationBatchRowModel.PROPERTY_WEIGHT.equals(propertyName)) { Float oldValue = (Float) evt.getOldValue(); Float newValue = (Float) evt.getNewValue(); @@ -243,7 +244,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // if the row's valid state changes, then remove or readd it to the frequencies if (!getModel().isRowComputationInProgress() - && IndividualObservationBatchRowModel.PROPERTY_VALID.equals(propertyName)) { + && IndividualObservationBatchRowModel.PROPERTY_VALID.equals(propertyName)) { boolean oldValue = (boolean) evt.getOldValue(); boolean newValue = (boolean) evt.getNewValue(); @@ -509,7 +510,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // when configuration mode change, let's focus the best component (see http://forge.codelutin.com/issues/4035) model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_FREQUENCIES_CONFIGURATION_MODE, evt -> { - final FrequencyConfigurationMode newValue = (FrequencyConfigurationMode) evt.getNewValue(); + FrequencyConfigurationMode newValue = (FrequencyConfigurationMode) evt.getNewValue(); SwingUtilities.invokeLater( () -> { JComponent componentToFocus = getComponentToFocus(newValue); @@ -531,17 +532,25 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci getObsTableModel().setRows((List<IndividualObservationBatchRowModel>) evt.getNewValue()); }); + // Pour bloquer le changement du mode de recopie des observations individuelles → mensurations model.addVetoableChangeListener(SpeciesFrequencyUIModel.PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, evt -> { CopyIndividualObservationMode oldCopyMode = (CopyIndividualObservationMode) evt.getOldValue(); + CopyIndividualObservationMode newCopyMode = (CopyIndividualObservationMode) evt.getNewValue(); + + if (initCopyIndividualObservationMode) { - if (oldCopyMode == CopyIndividualObservationMode.NOTHING) { + if (log.isInfoEnabled()) { + log.info("Skip ask user to confirm copyIndividualObservationMode changed from " + oldCopyMode + " to " + newCopyMode); + } + return; + } + + if (CopyIndividualObservationMode.NOTHING == oldCopyMode) { long rowsWithData = model.getRows().stream() - .filter(row -> row.getLengthStep() != null - || row.getNumber() != null - || row.getWeight() != null) - .count(); + .filter(row -> row.getLengthStep() != null || row.withNumber() || row.withWeight()) + .count(); if (rowsWithData > 0) { @@ -563,10 +572,28 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } }); + // Pour mettre à jour les mensuratuibs suite au changement du mode de recopie des observations individuelles model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, evt -> { - ui.getRafaleModeButton().setSelected(true); - ui.getAddIndividualObservationCheckBox().setSelected(true); + CopyIndividualObservationMode oldCopyMode = (CopyIndividualObservationMode) evt.getOldValue(); + CopyIndividualObservationMode newCopyMode = (CopyIndividualObservationMode) evt.getNewValue(); + + boolean nothingCopyMode = CopyIndividualObservationMode.NOTHING == newCopyMode; + + if (initCopyIndividualObservationMode && nothingCopyMode) { + + if (log.isInfoEnabled()) { + log.info("Skip recompute frequencies from indivudal observations for nothing mode (flag initCopyIndividualObservationMode is on), copyIndividualObservationMode changed from " + oldCopyMode + " to " + newCopyMode); + } + return; + } + + if (!nothingCopyMode) { + + ui.getRafaleModeButton().setSelected(true); + ui.getAddIndividualObservationCheckBox().setSelected(true); + + } model.setRowComputationInProgress(true); @@ -672,11 +699,12 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci String title = optionalTitle.get(); frequenciesHistogramPopup.setTitle(title + t("tutti.editSpeciesFrequencies.title")); - averageWeightsHistogramPopup.setTitle(title + weightUnit.decorateLabel(t("tutti.editSpeciesFrequencies.field.graphAverageWeight"))); + averageWeightsHistogramPopup.setTitle(title + weightUnit.decorateLabel(t("tutti.editSpeciesFrequencies.field.graphAverageWeight"))); } SpeciesBatchRowModel speciesBatch = editor.getEditRow(); + Objects.requireNonNull(speciesBatch, "Impossible d'éditer un lot non renseigné"); SpeciesFrequencyUIModel model = getModel(); model.setNextEditableRowIndex(editor.getNextEditableRowIndex()); @@ -691,195 +719,203 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci frequencyEditor = editor; Caracteristic lengthStepCaracteristic = null; + CopyIndividualObservationMode copyIndividualObservationMode = null; - List<SpeciesFrequencyRowModel> rows = Lists.newArrayList(); - List<IndividualObservationBatchRowModel> obsRows = Lists.newArrayList(); - - if (speciesBatch != null) { + List<SpeciesFrequencyRowModel> rows = new ArrayList<>(); + List<IndividualObservationBatchRowModel> obsRows = new ArrayList<>(); - Species species = speciesBatch.getSpecies(); + Species species = speciesBatch.getSpecies(); - model.setTotalWeight(speciesBatch.getWeight()); + model.setTotalWeight(speciesBatch.getWeight()); - Optional<String> speciesMaturityPmfmId = Optional.empty(); + Optional<String> speciesMaturityPmfmId = Optional.empty(); - // set rtps - TuttiProtocol protocol = getDataContext().getProtocol(); - if (protocol != null) { + // 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(); + 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 (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(); - } + if (sampleCategoryValue != null) { + if (Sexs.isMale(sampleCategoryValue)) { + rtp = speciesProtocol.getRtpMale(); + } else if (Sexs.isFemale(sampleCategoryValue)) { + rtp = speciesProtocol.getRtpFemale(); } else { rtp = speciesProtocol.getRtpUndefined(); } - model.setRtp(rtp); - speciesMaturityPmfmId = Optional.ofNullable(speciesProtocol.getMaturityPmfmId()); + } else { + rtp = speciesProtocol.getRtpUndefined(); } - } + model.setRtp(rtp); - List<SpeciesFrequencyRowModel> frequency = speciesBatch.getFrequency(); - List<IndividualObservationBatchRowModel> individualObservations = speciesBatch.getIndividualObservation(); - - // try to load existing frequency + speciesMaturityPmfmId = Optional.ofNullable(speciesProtocol.getMaturityPmfmId()); + } + } - if (CollectionUtils.isNotEmpty(frequency)) { + List<SpeciesFrequencyRowModel> frequency = speciesBatch.getFrequency(); + List<IndividualObservationBatchRowModel> individualObservations = speciesBatch.getIndividualObservation(); - SpeciesFrequencyTableModel tableModel = getTableModel(); + // + // try to load existing frequency + // - for (SpeciesFrequencyRowModel rowModel : frequency) { + if (CollectionUtils.isNotEmpty(frequency)) { - SpeciesFrequencyRowModel newRow = tableModel.createNewRow(false, false); - newRow.setLengthStepCaracteristic(rowModel.getLengthStepCaracteristic()); - newRow.setLengthStep(rowModel.getLengthStep()); - newRow.setNumber(rowModel.getNumber()); - newRow.setWeight(rowModel.getWeight()); - rows.add(newRow); - } + SpeciesFrequencyTableModel tableModel = getTableModel(); - // use first frequency row length step caracteristics + for (SpeciesFrequencyRowModel rowModel : frequency) { - SpeciesFrequencyRowModel rowModel = frequency.get(0); - lengthStepCaracteristic = rowModel.getLengthStepCaracteristic(); + SpeciesFrequencyRowModel newRow = tableModel.createNewRow(false, false); + newRow.copy(rowModel); + rows.add(newRow); - if (log.isInfoEnabled()) { - log.info("Use existing lengthStep " + - "caracteristic / step " + - decorate(lengthStepCaracteristic)); - } } - // Add maturity column if necessary + // use first frequency row length step caracteristics - Optional<Caracteristic> maturityCaracteristic = speciesMaturityPmfmId.map(maturityCaracteristics::get); + SpeciesFrequencyRowModel rowModel = frequency.get(0); + lengthStepCaracteristic = rowModel.getLengthStepCaracteristic(); - if (maturityCaracteristic.isPresent()) { - addMaturityCaracteristicColumnToModel(maturityCaracteristic.get()); + if (log.isInfoEnabled()) { + log.info("Use existing lengthStep caracteristic / step " + decorate(lengthStepCaracteristic)); } + } - // try to load existing frequency + // Add maturity column if necessary - if (CollectionUtils.isNotEmpty(individualObservations)) { + Optional<Caracteristic> maturityCaracteristic = speciesMaturityPmfmId.map(maturityCaracteristics::get); - IndividualObservationBatchTableModel tableModel = getObsTableModel(); - tableModel.setRows(new ArrayList<>()); + if (maturityCaracteristic.isPresent()) { + addMaturityCaracteristicColumnToModel(maturityCaracteristic.get()); + } - int rankOrder = 1; - for (IndividualObservationBatchRowModel rowModel : individualObservations) { + // + // try to load existing individual observations + // - IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); - newRow.copyIndividualObservationBatchRowModel(rowModel); - newRow.setRankOrder(rankOrder++); - newRow.addPropertyChangeListener(obsChangedListener); - newRow.setValid(true); + if (CollectionUtils.isNotEmpty(individualObservations)) { - if (maturityCaracteristic.isPresent()) { + IndividualObservationBatchTableModel tableModel = getObsTableModel(); + tableModel.setRows(new ArrayList<>()); + int rankOrder = 1; + for (IndividualObservationBatchRowModel rowModel : individualObservations) { - Caracteristic caracteristicKey = maturityCaracteristic.get(); - Serializable caracteristicValue = newRow.getCaracteristics().remove(caracteristicKey); - newRow.getDefaultCaracteristics().putIfAbsent(caracteristicKey, caracteristicValue); + 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"); } - - obsRows.add(newRow); } + IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); + newRow.copy(rowModel); + newRow.setRankOrder(rankOrder++); + newRow.addPropertyChangeListener(obsChangedListener); + newRow.setValid(true); - // use first frequency row length step caracteristics - - if (lengthStepCaracteristic == null) { - IndividualObservationBatchRowModel rowModel = individualObservations.get(0); - lengthStepCaracteristic = rowModel.getLengthStepCaracteristic(); + if (maturityCaracteristic.isPresent()) { - if (log.isInfoEnabled()) { - log.info("Use existing lengthStep " + - "caracteristic / step " + - decorate(lengthStepCaracteristic)); - } + Caracteristic caracteristicKey = maturityCaracteristic.get(); + Serializable caracteristicValue = newRow.getCaracteristics().remove(caracteristicKey); + newRow.getDefaultCaracteristics().putIfAbsent(caracteristicKey, caracteristicValue); } - } - SpeciesBatchRowModel previousSiblingRow = frequencyEditor.getPreviousSiblingRow(); + obsRows.add(newRow); - if (lengthStepCaracteristic == null && previousSiblingRow != null) { + } - // try to get it from his previous brother row - List<SpeciesFrequencyRowModel> previousFrequency = previousSiblingRow.getFrequency(); + // use first individual observation row length step caracteristics - if (CollectionUtils.isNotEmpty(previousFrequency)) { + if (lengthStepCaracteristic == null) { + IndividualObservationBatchRowModel rowModel = individualObservations.get(0); + lengthStepCaracteristic = rowModel.getLengthStepCaracteristic(); - // 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 (log.isInfoEnabled()) { + log.info("Use existing lengthStep caracteristic / step " + decorate(lengthStepCaracteristic)); } } - if (lengthStepCaracteristic == null) { + } else { - String lengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); + // par défaut pas de mode de recopie + copyIndividualObservationMode = CopyIndividualObservationMode.NOTHING; - if (lengthStepPmfmId != null) { + } - lengthStepCaracteristic = lengthStepCaracteristics.get(lengthStepPmfmId); + if (log.isInfoEnabled()) { + log.info("CopyIndividualObservationMode: " + copyIndividualObservationMode); + } - if (log.isInfoEnabled()) { - log.info("Use existing from protocol lengthStep " + - "caracteristic / step " + - decorate(lengthStepCaracteristic)); - } + 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 (getContext().isIchtyometerConnected()) { + if (lengthStepCaracteristic == null) { - // let's listen the ichtyometer - listenItchtyometer(); + String lengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); - } + if (lengthStepPmfmId != null) { - if (lengthStepCaracteristic == null) { - String speciesLengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); - if (speciesLengthStepPmfmId == null) { - mode = FrequencyConfigurationMode.SIMPLE_COUNTING; + lengthStepCaracteristic = lengthStepCaracteristics.get(lengthStepPmfmId); + + if (log.isInfoEnabled()) { + log.info("Use existing from protocol lengthStep caracteristic / step " + decorate(lengthStepCaracteristic)); } - } - if (log.isDebugEnabled()) { - log.debug("Will edit batch row: " + speciesBatch + " with " + rows.size() + " frequency"); } - Integer number = speciesBatch.getNumber(); - if (number != null && rows.isEmpty()) { + } + + if (lengthStepCaracteristic == null) { + String speciesLengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); + if (speciesLengthStepPmfmId == null) { mode = FrequencyConfigurationMode.SIMPLE_COUNTING; - model.setSimpleCount(number); } } + 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); @@ -895,7 +931,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci Collections.sort(rows); model.setLengthStepCaracteristic(lengthStepCaracteristic); - model.setCopyIndividualObservationMode(CopyIndividualObservationMode.NOTHING); model.setRows(rows); IndividualObservationBatchTableModel obsTableModel = getObsTableModel(); @@ -917,7 +952,25 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // 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) + initCopyIndividualObservationMode = true; + try { + model.setCopyIndividualObservationMode(copyIndividualObservationMode); + } finally { + initCopyIndividualObservationMode = false; + } + + if (getContext().isIchtyometerConnected()) { + + // let's listen the ichtyometer + listenItchtyometer(); + + } + } + // Flag to mark when changing the CopyIndividualObservationMode in init + private boolean initCopyIndividualObservationMode; + public void updateFrequencyRowsNumbers(Float lengthStepToDec, Float lengthStepToInc) { if (log.isInfoEnabled()) { @@ -1128,7 +1181,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci averageWeightsChart = ChartFactory.createXYLineChart(null, t("tutti.editSpeciesFrequencies.table.header.lengthStep"), getConfig().getIndividualObservationWeightUnit() - .decorateLabel(t("tutti.editSpeciesFrequencies.averageWeight.label")), + .decorateLabel(t("tutti.editSpeciesFrequencies.averageWeight.label")), getModel().averageWeightsDataset); averageWeightsChart.clearSubtitles(); @@ -1310,7 +1363,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci break; case TableModelEvent.INSERT: - for (int i = firstRow ; i <= lastRow ; i++) { + for (int i = firstRow; i <= lastRow; i++) { IndividualObservationBatchRowModel newRow = tableModel.getRows().get(i); newRow.addPropertyChangeListener(obsChangedListener); -- 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/8130 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 5bd489fbf103db03bc70ca5f54474ab4e33187dd Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 16 08:50:23 2016 +0100 Revue de la sauvegarde et intégration du mode de recopie --- .../frequency/SpeciesFrequencyCellComponent.java | 91 +++++++++++----------- 1 file changed, 47 insertions(+), 44 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java index 04ac9f2..e0a2d51 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; */ import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; @@ -50,7 +50,9 @@ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * Component to render and edit frequency stuff from batch table. @@ -84,9 +86,7 @@ public class SpeciesFrequencyCellComponent extends DefaultTableCellRenderer { if (data != null && data.getData() != null) { text = String.valueOf(data.getData()); - } else if (data != null - && data.getComputedData() != null - && data.getComputedData() != 0) { + } else if (data != null && data.getComputedData() != null && data.getComputedData() != 0) { String blue = Integer.toHexString(computedDataColor.getRGB()).substring(2); text = "<html><em style='color: #" + blue + "'>" + data.getComputedData() + "</em></html>"; @@ -164,8 +164,7 @@ public class SpeciesFrequencyCellComponent extends DefaultTableCellRenderer { component.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_ENTER || - e.getKeyCode() == KeyEvent.VK_SPACE) { + if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_SPACE) { e.consume(); startEdit(); } @@ -216,8 +215,8 @@ public class SpeciesFrequencyCellComponent extends DefaultTableCellRenderer { if (log.isDebugEnabled()) { log.debug("Will edit frequencies for row: " + rowIndex + - ", nextEditableRow: " + nextEditableRowIndex + - ", previous siblingRow: " + previousSiblingRow); + ", nextEditableRow: " + nextEditableRowIndex + + ", previous siblingRow: " + previousSiblingRow); } EditCatchesUI parent = @@ -230,58 +229,62 @@ public class SpeciesFrequencyCellComponent extends DefaultTableCellRenderer { if (frequencyModel.isValid()) { // at close, synch back frequencies - List<SpeciesFrequencyRowModel> frequency = Lists.newArrayList(); - List<IndividualObservationBatchRowModel> individualObservation = Lists.newArrayList(); + + // set the weigth + editRow.setWeight(frequencyModel.getTotalWeight()); if (frequencyModel.isSimpleCountingMode()) { + editRow.setNumber(frequencyModel.getSimpleCount()); + // DO THIS BEFORE SETTING THE FREQUENCIES AS THE FREQUENCIES MODIFICATIONS TRIGGERS THE SAVE + editRow.setIndividualObservation(new ArrayList<>()); + editRow.setFrequency(new ArrayList<>()); } else { - // transfer rows to editor - for (SpeciesFrequencyRowModel row : frequencyModel.getRows()) { - // the row is valid even if there is no data (just for the highlighter) - // but we save it only if there is data - if (row.isValid() - && !(row.getNumber() == null && row.getWeight() == null)) { + // push back to batch + editRow.setNumber(null); + + // + // transfert back individual observations + // - // can keep this row - frequency.add(row); - } - } - if (log.isDebugEnabled()) { - log.debug("Push back " + frequency.size() + - " frequency to batch " + frequencyModel.getBatch()); - } + List<IndividualObservationBatchRowModel> individualObservation = new ArrayList<>(); + CopyIndividualObservationMode copyIndividualObservationMode = frequencyModel.getCopyIndividualObservationMode(); for (IndividualObservationBatchRowModel row : frequencyModel.getIndividualObservationRows()) { - // the row is valid even if there is no data (just for the highlighter) - // but we save it only if there is data -// if (row.isValid() -// && !(row.getNumber() == null && row.getWeight() == null)) { - - // can keep this row - individualObservation.add(row); -// } + row.setCopyIndividualObservationMode(copyIndividualObservationMode); + individualObservation.add(row); } if (log.isDebugEnabled()) { - log.debug("Push back " + individualObservation.size() + - " observations to batch " + frequencyModel.getBatch()); + log.debug("Push back " + individualObservation.size() + " observations to batch " + frequencyModel.getBatch()); } - // push back to batch - editRow.setNumber(null); - } + // DO THIS BEFORE SETTING THE FREQUENCIES AS THE FREQUENCIES MODIFICATIONS TRIGGERS THE SAVE + // set individual observations to the incoming batch + editRow.setIndividualObservation(individualObservation); - // set the weigth - editRow.setWeight(frequencyModel.getTotalWeight()); + // + // transfert back frequencies + // - // DO THIS BEFORE SETTING THE FREQUENCIES AS THE FREQUENCIES MODIFICATIONS TRIGGERS THE SAVE - // set individual observations to the incoming batch - editRow.setIndividualObservation(individualObservation); + // the row is valid even if there is no data (just for the highlighter) + // but we save it only if there is data + // can keep this row + List<SpeciesFrequencyRowModel> frequency = + frequencyModel.getRows() + .stream() + .filter(row -> row.isValid() && row.withNumber() && row.withWeight()) + .collect(Collectors.toList()); - // set frequencies to the incoming batch - editRow.setFrequency(frequency); + if (log.isDebugEnabled()) { + log.debug("Push back " + frequency.size() + " frequencies to batch " + frequencyModel.getBatch()); + } + + // set frequencies to the incoming batch + editRow.setFrequency(frequency); + + } // update frequencies total ui.getHandler().updateTotalFromFrequencies(editRow); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm