branch feature/8203 created (now 30f4e68)
This is an automated email from the git hooks/post-receive script. New change to branch feature/8203 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git at 30f4e68 on demande au cache le résumé de prélèvement pour la ligne sélectionnée (s'il n'y a qu'une ligne sélectionnée) (fixes #8203) This branch includes the following new commits: new 30f4e68 on demande au cache le résumé de prélèvement pour la ligne sélectionnée (s'il n'y a qu'une ligne sélectionnée) (fixes #8203) The 1 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 30f4e683857dde88ea0565823a61c5fb694fd7d8 Author: Kevin Morin <morin@codelutin.com> Date: Wed Apr 6 11:34:34 2016 +0200 on demande au cache le résumé de prélèvement pour la ligne sélectionnée (s'il n'y a qu'une ligne sélectionnée) (fixes #8203) -- 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/8203 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 30f4e683857dde88ea0565823a61c5fb694fd7d8 Author: Kevin Morin <morin@codelutin.com> Date: Wed Apr 6 11:34:34 2016 +0200 on demande au cache le résumé de prélèvement pour la ligne sélectionnée (s'il n'y a qu'une ligne sélectionnée) (fixes #8203) --- .../service/sampling/CruiseSamplingCache.java | 58 +++++++++++- .../tutti/service/sampling/SamplingEvent.java | 6 +- .../tutti/service/sampling/SamplingListener.java | 2 +- .../frequency/IndividualObservationUICache.java | 103 ++++++++++++--------- .../frequency/SpeciesFrequencyUIHandler.java | 9 ++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 2 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 +- 7 files changed, 135 insertions(+), 49 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCache.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCache.java index dd03eb7..443cfff 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCache.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCache.java @@ -650,6 +650,62 @@ public class CruiseSamplingCache implements Closeable { } + public Optional<SamplingEvent> getEventForSummary(FishingOperation fishingOperation, + Species species, Boolean maturity, + CaracteristicQualitativeValue gender, + int lengthStep) { + + Objects.requireNonNull(fishingOperation); + Objects.requireNonNull(species); + + Optional < CalcifiedPiecesSamplingDefinition > cpsDefinitionOpt = getCalcifiedPiecesSamplingDefinition(species, maturity, lengthStep); + + Optional<SamplingEvent> result; + if (cpsDefinitionOpt.isPresent()) { + + CalcifiedPiecesSamplingDefinition cpsDefinition = cpsDefinitionOpt.get(); + + if (log.isInfoEnabled()) { + log.info("Found matching sampling definition: " + cpsDefinition); + } + + if (!cpsDefinition.isSex()) { + gender = null; + } + String samplingKey = CruiseSamplingInternalCache.createSamplingKey(species, gender, maturity, lengthStep); + + int totalValue = totalCruiseCache.incrementObservationNb(samplingKey); + int totalSamplingNb = totalCruiseCache.getSamplingNb(samplingKey); + + int zoneValue = 0; + int zoneSamplingNb = 0; + + Optional<Zone> optionalZone = tryFindZone(fishingOperation); + if (optionalZone.isPresent()) { + String zoneKey = CruiseSamplingInternalCache.addPrefixKey(optionalZone.get().getId(), samplingKey); + zoneValue = zoneCache.incrementObservationNb(zoneKey); + zoneSamplingNb = zoneCache.getSamplingNb(zoneKey); + } + + String operationKey = CruiseSamplingInternalCache.addPrefixKey(fishingOperation.getIdAsInt(), samplingKey); + + int operationValue = operationCache.incrementObservationNb(operationKey); + int operationSamplingNb = operationCache.getSamplingNb(operationKey); + + if (log.isInfoEnabled()) { + log.info("add Individual Observation " + samplingKey + " => op " + operationValue + " / zone " + zoneValue + " / cruise " + totalValue); + } + + SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, optionalZone, totalSamplingNb, zoneSamplingNb, operationSamplingNb); + result = Optional.of(event); + + } else { + result = Optional.empty(); + } + + return result; + } + public Optional<Zone> tryFindZone(FishingOperation operation) { Optional<Zone> result; if (operation.getSubStrata() != null) { @@ -697,7 +753,7 @@ public class CruiseSamplingCache implements Closeable { if (samplingListeners.length > 0) { for (SamplingListener listener : samplingListeners) { - listener.resumeUpdated(event); + listener.summaryUpdated(event); } } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java index dc53227..bc4e570 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java @@ -37,7 +37,7 @@ import java.util.Optional; */ public class SamplingEvent extends EventObject { - protected final float lengthStep; + protected final int lengthStep; protected final CaracteristicQualitativeValue gender; @@ -53,7 +53,7 @@ public class SamplingEvent extends EventObject { protected final int nbSamplingForOperation; - public SamplingEvent(CruiseSamplingCache source, float lengthStep, CaracteristicQualitativeValue gender, Boolean maturity, + public SamplingEvent(CruiseSamplingCache source, int lengthStep, CaracteristicQualitativeValue gender, Boolean maturity, CalcifiedPiecesSamplingDefinition cpsDef, Optional<Zone> zone, int nbSamplingForCruise, int nbSamplingForZone, int nbSamplingForOperation) { super(source); this.lengthStep = lengthStep; @@ -66,7 +66,7 @@ public class SamplingEvent extends EventObject { this.nbSamplingForOperation = nbSamplingForOperation; } - public float getLengthStep() { + public int getLengthStep() { return lengthStep; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingListener.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingListener.java index 6aa37e4..f120f10 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingListener.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingListener.java @@ -34,6 +34,6 @@ public interface SamplingListener extends EventListener { void samplingNeeded(SamplingEvent event); - void resumeUpdated(SamplingEvent event); + void summaryUpdated(SamplingEvent event); } 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 f6a03ab..b319580 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 @@ -162,50 +162,10 @@ public class IndividualObservationUICache implements Closeable { } @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(nbForOperation, cpsDef.getOperationLimitation()); - String nbForZoneLabel = getLabelForSamplingNumber(nbForZone, cpsDef.getZoneLimitation()); - String nbForCruiseLabel = getLabelForSamplingNumber(nbForCruise, cpsDef.getMaxByLenghtStep()); - - Decorator<Species> speciesDecorator = ui.getHandler().getDecorator(Species.class, DecoratorService.WITH_SURVEY_CODE); - String key = speciesDecorator.toString(species) - + " " + Numbers.convertFromMm(event.getLengthStep(), uiModel.getLengthStepCaracteristicUnit()) - + " " + uiModel.getLengthStepCaracteristicUnit(); - if (event.getGender() != null) { - key += " " + event.getGender().getDescription(); - } - if (event.getMaturity() != null) { - if (event.getMaturity()) { - key += " " + t("tutti.editSpeciesFrequencies.samplingNeeded.mature"); - } else { - key += " " + t("tutti.editSpeciesFrequencies.samplingNeeded.immature"); - } - } - String resume; - if (event.getZone().isPresent()) { - Decorator<Zone> zoneDecorator = ui.getHandler().getDecorator(Zone.class, null); - String zone = zoneDecorator.toString(event.getZone().get()); - resume = t("tutti.editSpeciesFrequencies.samplingNeeded.resume", key, nbForOperationLabel, zone, nbForZoneLabel, nbForCruiseLabel); - } else { - resume = t("tutti.editSpeciesFrequencies.samplingNeeded.resume.noZone", key, nbForOperationLabel, nbForZoneLabel, nbForCruiseLabel); - } - ui.getSamplingResumeLabel().setText(resume); + public void summaryUpdated(SamplingEvent event) { + displaySummary(event); } - String getLabelForSamplingNumber(int value, Integer max) { - Decorator<Integer> valueDecorator = ui.getHandler().getDecorator(Integer.class, DecoratorService.NULL_INFINITE); - return valueDecorator.toString(value) + "(" + valueDecorator.toString(max) + ")"; - } }; } @@ -494,5 +454,64 @@ public class IndividualObservationUICache implements Closeable { } + public void updateSelectedRow(IndividualObservationBatchRowModel selectedRow) { + + if (samplingCache.isPresent() && selectedRow.withSize()) { + + Boolean maturity = samplingCache.get().getMaturity(uiModel.getBatch().getSpecies().getReferenceTaxonId(), selectedRow.getMaturityState()); + int lengthstep = uiModel.getLengthStepInMm(selectedRow.getSize()); + + Optional<SamplingEvent> event = samplingCache.get().getEventForSummary(fishingOperation, species, maturity, selectedRow.getGender(sexCaracteristic), lengthstep); + + if (event.isPresent()) { + displaySummary(event.get()); + } + } + } + + protected void displaySummary(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(nbForOperation, cpsDef.getOperationLimitation()); + String nbForZoneLabel = getLabelForSamplingNumber(nbForZone, cpsDef.getZoneLimitation()); + String nbForCruiseLabel = getLabelForSamplingNumber(nbForCruise, cpsDef.getMaxByLenghtStep()); + + Decorator<Species> speciesDecorator = ui.getHandler().getDecorator(Species.class, DecoratorService.WITH_SURVEY_CODE); + String key = speciesDecorator.toString(species) + + " " + Numbers.convertFromMm(event.getLengthStep(), uiModel.getLengthStepCaracteristicUnit()) + + " " + uiModel.getLengthStepCaracteristicUnit(); + if (event.getGender() != null) { + key += " " + event.getGender().getDescription(); + } + if (event.getMaturity() != null) { + if (event.getMaturity()) { + key += " " + t("tutti.editSpeciesFrequencies.samplingNeeded.mature"); + } else { + key += " " + t("tutti.editSpeciesFrequencies.samplingNeeded.immature"); + } + } + String summary; + if (event.getZone().isPresent()) { + Decorator<Zone> zoneDecorator = ui.getHandler().getDecorator(Zone.class, null); + String zone = zoneDecorator.toString(event.getZone().get()); + summary = t("tutti.editSpeciesFrequencies.samplingNeeded.summary", key, nbForOperationLabel, zone, nbForZoneLabel, nbForCruiseLabel); + } else { + summary = t("tutti.editSpeciesFrequencies.samplingNeeded.summary.noZone", key, nbForOperationLabel, nbForZoneLabel, nbForCruiseLabel); + } + ui.getSamplingResumeLabel().setText(summary); + } + + protected String getLabelForSamplingNumber(int value, Integer max) { + Decorator<Integer> valueDecorator = ui.getHandler().getDecorator(Integer.class, DecoratorService.NULL_INFINITE); + return "<strong>" + valueDecorator.toString(value) + "</strong> (" + valueDecorator.toString(max) + ")"; + } } 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 d19ff4f..4ffb970 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 @@ -1409,6 +1409,15 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci getModel().recomputeCanEditLengthStep(); }); + + obsTable.getSelectionModel().addListSelectionListener(e -> { + + resetSamplingLabels(); + if (obsTable.getSelectedRowCount() == 1) { + IndividualObservationBatchRowModel selectedRow = getObsTableModel().getRows().get(obsTable.getSelectedRow()); + individualObservationUICache.updateSelectedRow(selectedRow); + } + }); } protected void resetSamplingLabels() { diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 3a279cf..1b4a00f 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -1648,6 +1648,8 @@ tutti.editSpeciesFrequencies.samplingNeeded.mature= tutti.editSpeciesFrequencies.samplingNeeded.max= tutti.editSpeciesFrequencies.samplingNeeded.resume= tutti.editSpeciesFrequencies.samplingNeeded.resume.noZone= +tutti.editSpeciesFrequencies.samplingNeeded.summary= +tutti.editSpeciesFrequencies.samplingNeeded.summary.noZone= tutti.editSpeciesFrequencies.samplingNeeded.warning= tutti.editSpeciesFrequencies.simpleCountingAndFrequencies= tutti.editSpeciesFrequencies.table.header.lengthStep= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 343d943..4c09b12 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -1532,8 +1532,8 @@ tutti.editSpeciesFrequencies.logTable.removeRow.confirm.title=Suppression d'une tutti.editSpeciesFrequencies.samplingNeeded.immature=Immature tutti.editSpeciesFrequencies.samplingNeeded.mature=Mature tutti.editSpeciesFrequencies.samplingNeeded.max=max -tutti.editSpeciesFrequencies.samplingNeeded.resume=<html><body><strong>%s</strong> \: Trait \: %s | %s \: %s | Campagne \: %s -tutti.editSpeciesFrequencies.samplingNeeded.resume.noZone=<html><body><strong>%s</strong> \: Trait \: %s | (pas dans une zone) | Campagne \: %s +tutti.editSpeciesFrequencies.samplingNeeded.summary=<html><body><strong>%s</strong> \: Trait \: %s | %s \: %s | Campagne \: %s +tutti.editSpeciesFrequencies.samplingNeeded.summary.noZone=<html><body><strong>%s</strong> \: Trait \: %s | (pas dans une zone) | Campagne \: %s tutti.editSpeciesFrequencies.samplingNeeded.warning=<html><body><strong>Prélevez les pièces calcifiées \!</body></html> tutti.editSpeciesFrequencies.simpleCountingAndFrequencies=Des mensurations ont été saisies dans le tableau. Saisir un simple dénombrement les effacera. tutti.editSpeciesFrequencies.table.header.lengthStep=Classe de taille -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm