This is an automated email from the git hooks/post-receive script. New commit to branch feature/8177 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 3e3c3fa5d27373760c73cecc119dced198f95e74 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 11:56:16 2016 +0200 gestion des prélèvements + affichage des prélèvements réels (refs #8177 refs #8152) --- .../frequency/IndividualObservationUICache.java | 155 +++++++++++++++++---- .../frequency/SpeciesFrequencyUIHandler.java | 37 +++-- 2 files changed, 156 insertions(+), 36 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationUICache.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationUICache.java index b8a63e0..e99576f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationUICache.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationUICache.java @@ -122,15 +122,16 @@ public class IndividualObservationUICache implements Closeable { log.info("samplingNeeded for " + cpsDef); } - int nbForOperation = event.getNbForOperation(); - int nbForZone = event.getNbForZone(); - int nbForCruise = event.getNbForCruise(); - - Integer operationLimitation = cpsDef.getOperationLimitation(); - Integer zoneLimitation = cpsDef.getZoneLimitation(); - Integer maxByLenghtStep = cpsDef.getMaxByLenghtStep(); + int nbForOperation = event.getNbSamplingForOperation(); + int nbForZone = event.getNbSamplingForZone(); + int nbForCruise = event.getNbSamplingForCruise(); if (log.isInfoEnabled()) { + + Integer operationLimitation = cpsDef.getOperationLimitation(); + Integer zoneLimitation = cpsDef.getZoneLimitation(); + Integer maxByLenghtStep = cpsDef.getMaxByLenghtStep(); + log.info(String.format("nbForOperation: %d/%s - nbForZone: %d/%s - nbForCruise: %d/%s", nbForOperation, operationLimitation == null ? "∞" : operationLimitation, nbForZone, zoneLimitation == null ? "∞" : zoneLimitation, @@ -146,12 +147,28 @@ public class IndividualObservationUICache implements Closeable { log.info("showSamplingWarning " + showSamplingWarning); } ui.getSamplingWarningLabel().setVisible(showSamplingWarning); + } + + @Override + public void resumeUpdated(SamplingEvent event) { + + CalcifiedPiecesSamplingDefinition cpsDef = event.getCpsDef(); + if (log.isInfoEnabled()) { + log.info("samplingNeeded for " + cpsDef); + } + + int nbForOperation = event.getNbSamplingForOperation(); + int nbForZone = event.getNbSamplingForZone(); + int nbForCruise = event.getNbSamplingForCruise(); - String nbForOperationLabel = getLabelForSamplingNumber(operationValueUpperMax, nbForOperation, operationLimitation); - String nbForZoneLabel = getLabelForSamplingNumber(zoneValueUpperMax, nbForZone, zoneLimitation); - String nbForCruiseLabel = getLabelForSamplingNumber(cruiseValueUpperMax, nbForCruise, maxByLenghtStep); +// boolean operationValueUpperMax = CalcifiedPiecesSamplingDefinitions.isOperationValueUpperMax(cpsDef, nbForOperation); +// boolean zoneValueUpperMax = CalcifiedPiecesSamplingDefinitions.isZoneValueUpperMax(cpsDef, nbForZone); +// boolean cruiseValueUpperMax = CalcifiedPiecesSamplingDefinitions.isCruiseValueUpperMax(cpsDef, nbForCruise); + + String nbForOperationLabel = getLabelForSamplingNumber(nbForOperation, cpsDef.getOperationLimitation()); + String nbForZoneLabel = getLabelForSamplingNumber(nbForZone, cpsDef.getZoneLimitation()); + String nbForCruiseLabel = getLabelForSamplingNumber(nbForCruise, cpsDef.getMaxByLenghtStep()); - //TODO add mauturity String key = event.getLengthStep() + " " + uiModel.getLengthStepCaracteristicUnit(); if (event.getGender() != null) { key += " " + event.getGender().getDescription(); @@ -164,18 +181,10 @@ public class IndividualObservationUICache implements Closeable { } } ui.getSamplingResumeLabel().setText(t("tutti.editSpeciesFrequencies.samplingNeeded.resume", key, nbForOperationLabel, nbForZoneLabel, nbForCruiseLabel)); - } - String getLabelForSamplingNumber(boolean valueUpperMax, int value, Integer max) { - String result; - if (valueUpperMax) { - result = t("tutti.editSpeciesFrequencies.samplingNeeded.max"); - } else { - // min à 0 (pour le cas où on ne soit pas dans une zone (pas de strate ou de sous strate définie)) - result = String.valueOf(Math.max(0, value - 1)); - } - return result; + String getLabelForSamplingNumber(int value, Integer max) { + return value + "(" + max + ")"; } }; @@ -215,8 +224,19 @@ public class IndividualObservationUICache implements Closeable { */ public void increments(IndividualObservationBatchRowModel row) { - increments(row.getGender(sexCaracteristic), row.getMaturityState(), row.getSize()); + incrementsObservationNb(row.getGender(sexCaracteristic), row.getMaturityState(), row.getSize(), Optional.ofNullable(row.getSamplingCode())); + + } + /** + * Ajoute une observation individuelle via ses composantes (sexe, maturité, classe de taille) dans le cache. + * + * @param gender le sexe + * @param maturityQualitativeValue l'état de maturité + * @param lengthStep la classe de taille + */ + public void incrementsObservationNb(CaracteristicQualitativeValue gender, Optional<CaracteristicQualitativeValue> maturityQualitativeValue, float lengthStep) { + incrementsObservationNb(gender, maturityQualitativeValue, lengthStep, Optional.empty()); } /** @@ -225,8 +245,12 @@ public class IndividualObservationUICache implements Closeable { * @param gender le sexe * @param maturityQualitativeValue l'état de maturité * @param lengthStep la classe de taille + * @param samplingCode le code de prélèvement ajouté s'il y en a un */ - public void increments(CaracteristicQualitativeValue gender, Optional<CaracteristicQualitativeValue> maturityQualitativeValue, float lengthStep) { + public void incrementsObservationNb(CaracteristicQualitativeValue gender, + Optional<CaracteristicQualitativeValue> maturityQualitativeValue, + float lengthStep, + Optional<String> samplingCode) { if (!on) { if (log.isDebugEnabled()) { @@ -241,6 +265,39 @@ public class IndividualObservationUICache implements Closeable { gender, maturity, uiModel.getLengthStep(lengthStep)); + + if (samplingCode.isPresent()) { + incrementsSamplingNb(gender, maturityQualitativeValue, lengthStep, samplingCode.get()); + } + } + + /** + * Ajoute une observation individuelle via ses composantes (sexe, maturité, classe de taille) dans le cache. + * + * @param gender le sexe + * @param maturityQualitativeValue l'état de maturité + * @param lengthStep la classe de taille + * @param samplingCode le code de prélèvement ajouté + */ + public void incrementsSamplingNb(CaracteristicQualitativeValue gender, + Optional<CaracteristicQualitativeValue> maturityQualitativeValue, + float lengthStep, + String samplingCode) { + + if (!on) { + if (log.isDebugEnabled()) { + log.debug("Cache is off, skip increments sampling in cache."); + } + return; + } + + Boolean maturity = samplingCache.get().getMaturity(uiModel.getBatch().getSpecies().getReferenceTaxonId(), maturityQualitativeValue); + samplingCache.get().addSampling(fishingOperation, + species, + gender, + maturity, + uiModel.getLengthStep(lengthStep), + samplingCode); } /** @@ -250,8 +307,20 @@ public class IndividualObservationUICache implements Closeable { */ public void decrements(IndividualObservationBatchRowModel row) { - decrements(row.getGender(sexCaracteristic), row.getMaturityState(), row.getSize()); + decrementsObservationNb(row.getGender(sexCaracteristic), row.getMaturityState(), row.getSize(), Optional.ofNullable(row.getSamplingCode())); + + } + + /** + * Retire une observation individuelle via ses composantes (sexe, maturité, classe de taille) dans le cache. + * + * @param gender le sexe + * @param maturityQualitativeValue l'état de maturité + * @param lengthStep la classe de taille + */ + public void decrementsObservationNb(CaracteristicQualitativeValue gender, Optional<CaracteristicQualitativeValue> maturityQualitativeValue, float lengthStep) { + decrementsObservationNb(gender, maturityQualitativeValue, lengthStep, Optional.empty()); } /** @@ -260,8 +329,12 @@ public class IndividualObservationUICache implements Closeable { * @param gender le sexe * @param maturityQualitativeValue l'état de maturité * @param lengthStep la classe de taille + * @param samplingCode le code de prélèvement supprimée */ - public void decrements(CaracteristicQualitativeValue gender, Optional<CaracteristicQualitativeValue> maturityQualitativeValue, float lengthStep) { + public void decrementsObservationNb(CaracteristicQualitativeValue gender, + Optional<CaracteristicQualitativeValue> maturityQualitativeValue, + float lengthStep, + Optional<String> samplingCode) { if (!on) { if (log.isDebugEnabled()) { @@ -277,6 +350,38 @@ public class IndividualObservationUICache implements Closeable { maturity, uiModel.getLengthStep(lengthStep)); + if (samplingCode.isPresent()) { + decrementsSamplingNb(gender, maturityQualitativeValue, uiModel.getLengthStep(lengthStep), samplingCode.get()); + } + } + + /** + * Ajoute une observation individuelle via ses composantes (sexe, maturité, classe de taille) dans le cache. + * + * @param gender le sexe + * @param maturityQualitativeValue l'état de maturité + * @param lengthStep la classe de taille + * @param samplingCode le code de prélèvement supprimé + */ + public void decrementsSamplingNb(CaracteristicQualitativeValue gender, + Optional<CaracteristicQualitativeValue> maturityQualitativeValue, + float lengthStep, + String samplingCode) { + + if (!on) { + if (log.isDebugEnabled()) { + log.debug("Cache is off, skip increments sampling in cache."); + } + return; + } + + Boolean maturity = samplingCache.get().getMaturity(uiModel.getBatch().getSpecies().getReferenceTaxonId(), maturityQualitativeValue); + samplingCache.get().removeSampling(fishingOperation, + species, + gender, + maturity, + uiModel.getLengthStep(lengthStep), + samplingCode); } /** 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 567eb03..0999b24 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -50,6 +50,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellEditor; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellRenderer; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellEditor; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.EditSpeciesBatchPanelUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesOrBenthosBatchUISupport; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchRowModel; @@ -230,10 +231,10 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci Float newValue = (Float) evt.getNewValue(); if (oldValue != null) { - individualObservationUICache.decrements(gender, maturity, oldValue); + individualObservationUICache.decrementsObservationNb(gender, maturity, oldValue, Optional.ofNullable(row.getSamplingCode())); } if (newValue != null) { - individualObservationUICache.increments(gender, maturity, newValue); + individualObservationUICache.incrementsObservationNb(gender, maturity, newValue, Optional.ofNullable(row.getSamplingCode())); } // we only update the frequencies if the row is valid @@ -278,25 +279,43 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci CaracteristicMap oldValue = (CaracteristicMap) evt.getOldValue(); CaracteristicMap newValue = (CaracteristicMap) evt.getNewValue(); + if (log.isInfoEnabled()) { + log.info("caracteristics changed"); + } + if (row.getMaturityCaracteristic().isPresent()) { Optional<CaracteristicQualitativeValue> oldMaturity = Optional.ofNullable((CaracteristicQualitativeValue) oldValue.get(row.getMaturityCaracteristic().get())); Optional<CaracteristicQualitativeValue> newMaturity = Optional.ofNullable((CaracteristicQualitativeValue) newValue.get(row.getMaturityCaracteristic().get())); - + if (log.isInfoEnabled()) { + log.info("maturities : " + oldMaturity + " " + newMaturity); + } if (!Objects.equals(oldMaturity, newMaturity)) { - individualObservationUICache.decrements(gender, oldMaturity, row.getSize()); - individualObservationUICache.increments(gender, newMaturity, row.getSize()); + individualObservationUICache.decrementsObservationNb(gender, oldMaturity, row.getSize()); + individualObservationUICache.incrementsObservationNb(gender, newMaturity, row.getSize(), Optional.ofNullable(row.getSamplingCode())); } } CaracteristicQualitativeValue oldGender = (CaracteristicQualitativeValue) oldValue.get(sexCaracteristic); CaracteristicQualitativeValue newGender = (CaracteristicQualitativeValue) newValue.get(sexCaracteristic); if (!Objects.equals(oldGender, newGender)) { - individualObservationUICache.decrements(oldGender, maturity, row.getSize()); - individualObservationUICache.increments(newGender, maturity, row.getSize()); + individualObservationUICache.decrementsObservationNb(oldGender, maturity, row.getSize()); + individualObservationUICache.incrementsObservationNb(newGender, maturity, row.getSize(), Optional.ofNullable(row.getSamplingCode())); } } + if (IndividualObservationBatchRowModel.PROPERTY_SAMPLING_CODE.equals(propertyName) && row.withSize()) { + String oldValue = (String) evt.getOldValue(); + String newValue = (String) evt.getNewValue(); + + if (StringUtils.isNotBlank(oldValue)) { + individualObservationUICache.decrementsSamplingNb(gender, maturity, row.getSize(), oldValue); + } + if (StringUtils.isNotBlank(newValue)) { + individualObservationUICache.incrementsSamplingNb(gender, maturity, row.getSize(), newValue); + } + } + // if the row's valid state changes, then remove or readd it to the frequencies if (!getModel().isRowComputationInProgress() && IndividualObservationBatchRowModel.PROPERTY_VALID.equals(propertyName)) { @@ -306,14 +325,10 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci if (oldValue && getModel().mustCopyIndividualObservationSize()) { updateFrequencyRowsNumbers(row.getSize(), null); - individualObservationUICache.decrements(gender, maturity, row.getSize()); } if (newValue) { if (getModel().mustCopyIndividualObservationSize()) { updateFrequencyRowsNumbers(null, row.getSize()); - if (row.withSize()) { - individualObservationUICache.increments(gender, maturity, row.getSize()); - } } if (getModel().mustCopyIndividualObservationWeight()) { updateFrequencyRowsWeights(row.getSize(), row.getWeight()); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.