This is an automated email from the git hooks/post-receive script. New commit to branch feature/8109 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit fa8b5488f6e6d8cfd3eefe9944603b01455bd790 Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 23 19:41:21 2016 +0100 gestion de la maturité dans le cache des observations individuelles (refs #8109) --- .../service/samplingCache/CruiseSamplingCache.java | 47 ++++++++++++++++++---- .../samplingCache/CruiseSamplingCacheLoader.java | 6 ++- .../frequency/SpeciesFrequencyUIHandler.java | 19 +++++++-- 3 files changed, 61 insertions(+), 11 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCache.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCache.java index 925d2b4..cd13e9b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCache.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCache.java @@ -43,9 +43,13 @@ import org.apache.commons.logging.LogFactory; import javax.swing.event.EventListenerList; import java.io.Closeable; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @author Kevin Morin (Code Lutin) @@ -77,6 +81,14 @@ public class CruiseSamplingCache implements Closeable { */ private final Multimap<Integer, CalcifiedPiecesSamplingDefinition> cpsDefinitionsBySpecies = HashMultimap.create(); /** + * La caractéristique de maturité pour chaque espèce + */ + private final Map<Integer, Caracteristic> maturityCaracteristicBySpecies = new HashMap<>(); + /** + * Les états matures pour chaque caractéristique de maturité + */ + private final Multimap<String, String> matureStatesByMaturityCracteristic = HashMultimap.create(); + /** * La caractéristic qui définie le sexe dans une observation individuelle. */ private final Caracteristic sexCaracteristic; @@ -97,7 +109,7 @@ public class CruiseSamplingCache implements Closeable { */ private boolean loading; - public CruiseSamplingCache(Integer cruiseId, TuttiProtocol protocol, Caracteristic sexCaracteristic) { + public CruiseSamplingCache(Integer cruiseId, TuttiProtocol protocol, Caracteristic sexCaracteristic, Collection<Caracteristic> allCaracteristics) { this.cruiseId = cruiseId; this.sexCaracteristic = sexCaracteristic; this.protocolId = protocol.getId(); @@ -105,9 +117,16 @@ public class CruiseSamplingCache implements Closeable { locationIdsPerZone = HashMultimap.create(); protocol.getZone().forEach(zone -> locationIdsPerZone.putAll(zone, Zones.getAllLocationIds(zone))); - protocol.getSpecies().forEach(speciesProtocol -> - cpsDefinitionsBySpecies.putAll(speciesProtocol.getSpeciesReferenceTaxonId(), - speciesProtocol.getCalcifiedPiecesSamplingDefinition())); + Map<String, Caracteristic> caracteristicsById = allCaracteristics.stream().collect(Collectors.toMap(Caracteristic::getId, Function.identity())); + + protocol.getSpecies().forEach(speciesProtocol -> { + cpsDefinitionsBySpecies.putAll(speciesProtocol.getSpeciesReferenceTaxonId(), + speciesProtocol.getCalcifiedPiecesSamplingDefinition()); + maturityCaracteristicBySpecies.put(speciesProtocol.getSpeciesReferenceTaxonId(), + caracteristicsById.get(speciesProtocol.getMaturityPmfmId())); + }); + + protocol.getMaturityCaracteristics().forEach(mc -> matureStatesByMaturityCracteristic.putAll(mc.getId(), mc.getMatureStateIds())); } public Integer getCruiseId() { @@ -136,6 +155,8 @@ public class CruiseSamplingCache implements Closeable { operationCache.close(); locationIdsPerZone.clear(); cpsDefinitionsBySpecies.clear(); + maturityCaracteristicBySpecies.clear(); + matureStatesByMaturityCracteristic.clear(); SamplingListener[] samplingListeners = listeners.getListeners(SamplingListener.class); for (SamplingListener listener : samplingListeners) { removeSamplingListener(listener); @@ -171,7 +192,7 @@ public class CruiseSamplingCache implements Closeable { Species species = individualObservationBatch.getSpecies(); Objects.requireNonNull(species); - Boolean maturity = null; + Boolean maturity = getMaturity(individualObservationBatch); Float lengthStep = individualObservationBatch.getSize(); Objects.requireNonNull(lengthStep); @@ -225,6 +246,7 @@ public class CruiseSamplingCache implements Closeable { Objects.requireNonNull(fishingOperationId); Objects.requireNonNull(species); + Optional<CalcifiedPiecesSamplingDefinition> cpsDefinitionOpt = getCalcifiedPiecesSamplingDefinition(species, maturity, lengthStep); if (cpsDefinitionOpt.isPresent()) { @@ -478,9 +500,7 @@ public class CruiseSamplingCache implements Closeable { for (SamplingListener listener : samplingListeners) { listener.samplingNeeded(event); } - } - } protected Optional<Zone> tryFindZone(TuttiLocation location) { @@ -490,6 +510,19 @@ public class CruiseSamplingCache implements Closeable { .stream() .filter(zone -> locationIdsPerZone.containsEntry(zone, locationId)) .findFirst(); + } + protected Boolean getMaturity(IndividualObservationBatch individualObservationBatch) { + Boolean maturity = null; + Caracteristic maturityCaracteristic = maturityCaracteristicBySpecies.get(individualObservationBatch.getSpecies().getIdAsInt()); + // if a maturity caracteristic is defined in the protocol for this species + if (maturityCaracteristic != null) { + CaracteristicQualitativeValue qualitativeValue = individualObservationBatch.getCaracteristics().getQualitativeValue(maturityCaracteristic); + // it the maturity is set + if (qualitativeValue != null) { + maturity = matureStatesByMaturityCracteristic.containsEntry(maturityCaracteristic.getId(), qualitativeValue.getId()); + } + } + return maturity; } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCacheLoader.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCacheLoader.java index 39f5ad6..6bc75df 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCacheLoader.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCacheLoader.java @@ -12,6 +12,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; +import java.util.Collection; import java.util.List; import java.util.Optional; @@ -44,7 +45,10 @@ public class CruiseSamplingCacheLoader { Caracteristic sexCaracteristic = persistenceService.getSexCaracteristic(); - CruiseSamplingCache cruiseSamplingCache = new CruiseSamplingCache(cruiseId, protocol, sexCaracteristic); + //FIXME il faudrait seulement charger les caracteristiques de maturité du protocole + Collection<Caracteristic> allCaracteristics = persistenceService.getAllCaracteristic(); + + CruiseSamplingCache cruiseSamplingCache = new CruiseSamplingCache(cruiseId, protocol, sexCaracteristic, allCaracteristics); cruiseSamplingCache.setLoading(true); 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 8f4cc04..9d8baac 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 @@ -270,7 +270,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } } - // TODO idem avec la maturité if (row.withSize() && (IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS.equals(propertyName) || IndividualObservationBatchRowModel.PROPERTY_CARACTERISTICS.equals(propertyName))) { @@ -278,12 +277,26 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci CaracteristicMap oldValue = (CaracteristicMap) evt.getOldValue(); CaracteristicMap newValue = (CaracteristicMap) evt.getNewValue(); + Boolean maturity = null; + +// if (maturityColumnId.isPresent()) { +// Caracteristic maturityCaracteristic = maturityColumnId.get().getCaracteristic(); +// CaracteristicQualitativeValue oldMaturity = (CaracteristicQualitativeValue) oldValue.get(maturityCaracteristic); +// CaracteristicQualitativeValue newMaturityr = (CaracteristicQualitativeValue) newValue.get(maturityCaracteristic); +// if (!Objects.equals(oldMaturity, newMaturityr)) { +// individualObservationUICache.decrements(oldGender, null, row.getSize()); +// individualObservationUICache.increments(newGender, null, row.getSize()); +// } +// +// } + CaracteristicQualitativeValue oldGender = (CaracteristicQualitativeValue) oldValue.get(sexCaracteristic); CaracteristicQualitativeValue newGender = (CaracteristicQualitativeValue) newValue.get(sexCaracteristic); if (!Objects.equals(oldGender, newGender)) { - individualObservationUICache.decrements(oldGender, null, row.getSize()); - individualObservationUICache.increments(newGender, null, row.getSize()); + individualObservationUICache.decrements(oldGender, maturity, row.getSize()); + individualObservationUICache.increments(newGender, maturity, row.getSize()); } + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.