branch feature/8255 updated (7533282 -> b65b154)
This is an automated email from the git hooks/post-receive script. New change to branch feature/8255 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git omits 7533282 si on modifie la catégorie vrac/hors vrac, on met à jour le compte de lots vrac/hors vrac (fixes #8255) new d0bfe06 Déplacement du cache de haut niveau dans un paquetage plus adapté + amélioration code dans le cache (côté ui) new 2dad5f3 Revue de comment interroger le cache new 2488271 Utilisation d'un nouvel handler pour gérer la zone de notification new 9025fe4 Ajout d'états sur le cache d'ui new e7dec7b Revue de la zone de notification new 2ce988a Suppression des listeners sur le cache + revue du code du cache new 41059a9 Suppression du statut de la ligne d'une observation (cela pose des problème sur la sélection dans par exemple l'éditeur des code de prélèvement qui se déclanche avant que la ligne soit sélectionnée) new 48d0e06 Revue du modèle de la zone de notification et de son handler new e899b8a traduction perdue new af55cbb Renommage méthode + suppression méthode non utilisée new 7de63b3 Normalement on a le bon flow pour la rafraichissement de la zone de notification des prélèvements + nettoyage de code new d8e5c5f Retour sur develop, car déjà trop de modifications... mais non fini Merge branch 'feature/revue_algorithme' into develop new b65b154 si on modifie la catégorie vrac/hors vrac, on met à jour le compte de lots vrac/hors vrac (fixes #8255) This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (7533282) \ N -- N -- N refs/heads/feature/8255 (b65b154) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 13 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 b65b154735aac2c7deb1ab7c466f4e39d342a072 Author: Kevin Morin <morin@codelutin.com> Date: Tue Apr 19 10:28:01 2016 +0200 si on modifie la catégorie vrac/hors vrac, on met à jour le compte de lots vrac/hors vrac (fixes #8255) commit d8e5c5f190c3f7a934c278adce1ac24b30c46ffd Merge: 22912b8 7de63b3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:39:33 2016 +0200 Retour sur develop, car déjà trop de modifications... mais non fini Merge branch 'feature/revue_algorithme' into develop commit 7de63b3196d6cab28a601e6d1d7cfd88b589b0b6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:27:52 2016 +0200 Normalement on a le bon flow pour la rafraichissement de la zone de notification des prélèvements + nettoyage de code commit af55cbb697ba72eda6aafeef1e2a769230855b46 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:17:38 2016 +0200 Renommage méthode + suppression méthode non utilisée commit e899b8ab8b822120a6c46d62938d24f881c3ef9f Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:17:14 2016 +0200 traduction perdue commit 48d0e067104b56a4afa32d552e77d17f264dcf71 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:16:51 2016 +0200 Revue du modèle de la zone de notification et de son handler commit 41059a9cd2a86b5359d3715376f7899125a0aa23 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:15:11 2016 +0200 Suppression du statut de la ligne d'une observation (cela pose des problème sur la sélection dans par exemple l'éditeur des code de prélèvement qui se déclanche avant que la ligne soit sélectionnée) commit 2ce988a985c99d24a6a35772bd7dadb57a53b314 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:14:13 2016 +0200 Suppression des listeners sur le cache + revue du code du cache commit e7dec7b3385ffdb9537990bd65767a1ec9bf95bd Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 19 15:16:27 2016 +0200 Revue de la zone de notification commit 9025fe4882840061fa5b88291dc4a25a59f61d98 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 19 15:16:15 2016 +0200 Ajout d'états sur le cache d'ui commit 2488271da21803a1723b47c1f907c7963cad1749 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 19 10:53:45 2016 +0200 Utilisation d'un nouvel handler pour gérer la zone de notification commit 2dad5f37f58930d5fb512d9a4325c2b5304d647a Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 19 10:50:16 2016 +0200 Revue de comment interroger le cache commit d0bfe0616ac5a7dd3620d00d59de2c7a770511d3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Apr 18 11:05:24 2016 +0200 Déplacement du cache de haut niveau dans un paquetage plus adapté + amélioration code dans le cache (côté ui) Summary of changes: .../ifremer/tutti/service/PersistenceService.java | 4 +- .../fr/ifremer/tutti/service/TuttiDataContext.java | 4 +- .../service/{sampling => cruise}/CruiseCache.java | 4 +- .../{sampling => cruise}/CruiseCacheAble.java | 2 +- .../{sampling => cruise}/CruiseCacheLoader.java | 4 +- .../cps/CalcifiedPiecesSamplingExportService.java | 2 +- ...cesSamplingAlgorithmEntryNotFoundException.java | 17 + .../service/sampling/CruiseSamplingCache.java | 611 ++++++++++----------- .../sampling/CruiseSamplingInternalCache.java | 147 ++--- .../IndividualObservationSamplingContext.java | 148 +++++ .../IndividualObservationSamplingStatus.java | 140 +++++ ...lObservationSamplingStatusExceptionSupport.java | 29 + .../tutti/service/sampling/SamplingCodeCache.java | 1 + .../tutti/service/sampling/SamplingEvent.java | 105 ---- .../tutti/service/sampling/SamplingListener.java | 39 -- ...NotDefinedOnIndividualObservationException.java | 17 + .../ZoneNotDefinedOnFishingOperationException.java | 17 + .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 2 +- .../content/actions/EditCatchesSupportAction.java | 2 +- .../CalcifiedPiecesSamplingReportAction.java | 2 +- .../SamplingCodeCellEditor.java | 2 +- .../IndividualObservationBatchTableHandler.java | 141 +---- .../IndividualObservationBatchUIModel.java | 7 + .../frequency/IndividualObservationUICache.java | 220 +++----- .../frequency/SamplingNotificationZoneHandler.java | 331 +++++++++++ .../frequency/SamplingNotificationZoneModel.java | 56 ++ .../frequency/SamplingNotificationZoneStatus.java | 15 + .../species/frequency/SpeciesFrequencyUI.jcss | 4 - .../frequency/SpeciesFrequencyUIHandler.java | 14 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 +- 31 files changed, 1252 insertions(+), 838 deletions(-) rename tutti-service/src/main/java/fr/ifremer/tutti/service/{sampling => cruise}/CruiseCache.java (96%) rename tutti-service/src/main/java/fr/ifremer/tutti/service/{sampling => cruise}/CruiseCacheAble.java (97%) rename tutti-service/src/main/java/fr/ifremer/tutti/service/{sampling => cruise}/CruiseCacheLoader.java (97%) create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CalcifiedPiecesSamplingAlgorithmEntryNotFoundException.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/IndividualObservationSamplingContext.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/IndividualObservationSamplingStatus.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/IndividualObservationSamplingStatusExceptionSupport.java delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingListener.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SizeNotDefinedOnIndividualObservationException.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/ZoneNotDefinedOnFishingOperationException.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneHandler.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneStatus.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/8255 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 2ce988a985c99d24a6a35772bd7dadb57a53b314 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:14:13 2016 +0200 Suppression des listeners sur le cache + revue du code du cache --- .../service/sampling/CruiseSamplingCache.java | 76 ++++------------------ .../IndividualObservationSamplingStatus.java | 14 ++++ .../tutti/service/sampling/SamplingEvent.java | 51 --------------- .../tutti/service/sampling/SamplingListener.java | 38 ----------- 4 files changed, 27 insertions(+), 152 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 61507f6..7d8bed0 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 @@ -43,7 +43,6 @@ import fr.ifremer.tutti.util.Numbers; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.event.EventListenerList; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -98,10 +97,6 @@ public class CruiseSamplingCache implements CruiseCacheAble { */ private final Map<Integer, CaracteristicQualitativeValue> sexQualitativeValues; /** - * La liste des listeners. - */ - private final EventListenerList listeners = new EventListenerList(); - /** * Un drapeau pour indiquer qu'on est en train de construire le cache et donc ne déclancher aucun listener. */ private boolean loading; @@ -160,8 +155,6 @@ public class CruiseSamplingCache implements CruiseCacheAble { try { - int fishingOperationId = fishingOperation.getIdAsInt(); - for (IndividualObservationBatch individualObservationBatch : individualObservations) { Optional<CalcifiedPiecesSamplingDefinition> optionalCalcifiedPiecesSamplingDefinition = @@ -186,8 +179,6 @@ public class CruiseSamplingCache implements CruiseCacheAble { CaracteristicQualitativeValue gender = individualObservationBatch.getCaracteristics().getQualitativeValue(sexCaracteristic); -// CalcifiedPiecesSamplingDefinition calcifiedPiecesSamplingDefinition = optionalCalcifiedPiecesSamplingDefinition.get(); - IndividualObservationSamplingContext individualObservationSamplingContext = createContext(fishingOperation.getIdAsInt(), species, @@ -236,8 +227,6 @@ public class CruiseSamplingCache implements CruiseCacheAble { try { - int fishingOperationId = fishingOperation.getIdAsInt(); - for (IndividualObservationBatch individualObservationBatch : individualObservations) { Optional<CalcifiedPiecesSamplingDefinition> optionalCalcifiedPiecesSamplingDefinition = @@ -260,8 +249,6 @@ public class CruiseSamplingCache implements CruiseCacheAble { CaracteristicQualitativeValue gender = individualObservationBatch.getCaracteristics().getQualitativeValue(sexCaracteristic); -// CalcifiedPiecesSamplingDefinition calcifiedPiecesSamplingDefinition = optionalCalcifiedPiecesSamplingDefinition.get(); - IndividualObservationSamplingContext individualObservationSamplingContext = createContext(fishingOperation.getIdAsInt(), species, @@ -362,11 +349,6 @@ public class CruiseSamplingCache implements CruiseCacheAble { cpsDefinitionsBySpecies.clear(); maturityCaracteristicBySpecies.clear(); matureStatesByMaturityCracteristic.clear(); - SamplingListener[] samplingListeners = listeners.getListeners(SamplingListener.class); - for (SamplingListener listener : samplingListeners) { - removeSamplingListener(listener); - } - } @Override @@ -428,8 +410,16 @@ public class CruiseSamplingCache implements CruiseCacheAble { String fishingOperationSamplingKey = context.getFishingOperationSamplingKey(); CruiseSamplingInternalCache.SamplingData fishingOperationSamplingData = fishingOperationCache.getSamplingData(fishingOperationSamplingKey); - return new IndividualObservationSamplingStatus(context, cruiseSamplingData, zoneSamplingData, fishingOperationSamplingData); + boolean needSampling; + if (individualObservationBatch.getSamplingCode() != null) { + needSampling = false; + } else { + int samplingInterval = context.getCalcifiedPiecesSamplingDefinition().getSamplingInterval(); + int cruiseIndividualObservationCount = cruiseSamplingData.getIndividualObservationCount(); + needSampling = cruiseIndividualObservationCount == 1 || samplingInterval == 1 || cruiseIndividualObservationCount % samplingInterval == 1; + } + return new IndividualObservationSamplingStatus(context, needSampling, cruiseSamplingData, zoneSamplingData, fishingOperationSamplingData); } /** @@ -652,14 +642,6 @@ public class CruiseSamplingCache implements CruiseCacheAble { return maturity; } - public void addSamplingListener(SamplingListener listener) { - listeners.add(SamplingListener.class, listener); - } - - public void removeSamplingListener(SamplingListener listener) { - listeners.remove(SamplingListener.class, listener); - } - public List<CacheExtractedKey> getSamplingNumbers(Map<String, Species> speciesById) { List<CacheExtractedKey> result = cruiseCache.getSamplingNumbers(speciesById, sexQualitativeValues); result.forEach(key -> { @@ -687,17 +669,6 @@ public class CruiseSamplingCache implements CruiseCacheAble { return cpsDefinitionsBySpecies.containsKey(species.getReferenceTaxonId()); } - private void fireSamplingNeeded(SamplingEvent event) { - - SamplingListener[] samplingListeners = listeners.getListeners(SamplingListener.class); - if (samplingListeners.length > 0) { - - for (SamplingListener listener : samplingListeners) { - listener.samplingNeeded(event); - } - } - } - private Optional<Zone> tryFindZone(TuttiLocation location) { Integer locationId = location.getIdAsInt(); @@ -763,32 +734,11 @@ public class CruiseSamplingCache implements CruiseCacheAble { CruiseSamplingInternalCache.SamplingData fishingOperationSamplingData = fishingOperationCache.addOneIndividualObservation(fishingOperationSamplingKey); if (log.isInfoEnabled()) { - log.info("add individual observation " + cruiseSamplingKey + " => op " + fishingOperationSamplingData.getSamplingCount() + " / zone " + zoneSamplingData.getSamplingCount() + " / cruise " + cruiseSamplingData.getSamplingCount()); - } - - if (!isLoading()) { - - int samplingInterval = individualObservationSamplingContext.getCalcifiedPiecesSamplingDefinition().getSamplingInterval(); - int cruiseIndividualObservationCount = cruiseSamplingData.getIndividualObservationCount(); - if (cruiseIndividualObservationCount == 1 || samplingInterval == 1 || cruiseIndividualObservationCount % samplingInterval == 1) { - - IndividualObservationSamplingStatus status = new IndividualObservationSamplingStatus(individualObservationSamplingContext, cruiseSamplingData, zoneSamplingData, fishingOperationSamplingData); - SamplingEvent event = new SamplingEvent(this, status); - if (log.isInfoEnabled()) { - log.info("-> needs sampling"); - } - fireSamplingNeeded(event); - } - + log.info("add individual observation " + cruiseSamplingKey + " ⇒ op " + fishingOperationSamplingData + " / zone " + zoneSamplingData + " / cruise " + cruiseSamplingData); } } - /** - * Suppression d'un échantillon du cache. - * - * @param individualObservationSamplingContext le contexte de l'observation individuelle - */ private void removeIndividualObservation(IndividualObservationSamplingContext individualObservationSamplingContext) { Objects.requireNonNull(individualObservationSamplingContext); @@ -803,7 +753,7 @@ public class CruiseSamplingCache implements CruiseCacheAble { CruiseSamplingInternalCache.SamplingData fishingOperationSamplingData = fishingOperationCache.removeOneIndividualObservation(fishingOperationSamplingKey); if (log.isInfoEnabled()) { - log.info("remove individual observation " + cruiseSamplingKey + " => op " + fishingOperationSamplingData.getSamplingCount() + " / zone " + zoneSamplingData.getSamplingCount() + " / cruise " + cruiseSamplingData.getSamplingCount()); + log.info("remove individual observation " + cruiseSamplingKey + " ⇒ op " + fishingOperationSamplingData + " / zone " + zoneSamplingData + " / cruise " + cruiseSamplingData); } } @@ -822,7 +772,7 @@ public class CruiseSamplingCache implements CruiseCacheAble { CruiseSamplingInternalCache.SamplingData fishingOperationSamplingData = fishingOperationCache.addOneSampling(fishingOperationSamplingKey); if (log.isInfoEnabled()) { - log.info("add Sampling " + cruiseSamplingKey + " => op " + fishingOperationSamplingData.getSamplingCount() + " / zone " + zoneSamplingData.getSamplingCount() + " / cruise " + cruiseSamplingData.getSamplingCount()); + log.info("add sampling " + cruiseSamplingKey + " ⇒ op " + fishingOperationSamplingData + " / zone " + zoneSamplingData + " / cruise " + cruiseSamplingData); } } @@ -841,7 +791,7 @@ public class CruiseSamplingCache implements CruiseCacheAble { CruiseSamplingInternalCache.SamplingData fishingOperationSamplingData = fishingOperationCache.removeOneSampling(fishingOperationSamplingKey); if (log.isInfoEnabled()) { - log.info("remove Sampling " + cruiseSamplingKey + " => op " + fishingOperationSamplingData.getSamplingCount() + " / zone " + zoneSamplingData.getSamplingCount() + " / cruise " + cruiseSamplingData.getSamplingCount()); + log.info("remove sampling " + cruiseSamplingKey + " ⇒ op " + fishingOperationSamplingData + " / zone " + zoneSamplingData + " / cruise " + cruiseSamplingData); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/IndividualObservationSamplingStatus.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/IndividualObservationSamplingStatus.java index 92184c6..46dcfdb 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/IndividualObservationSamplingStatus.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/IndividualObservationSamplingStatus.java @@ -50,11 +50,21 @@ public class IndividualObservationSamplingStatus { */ private final int samplingCountInZone; + /** + * Pour savoir si on demande un prélèvement. + */ + private final boolean needSampling; + public IndividualObservationSamplingStatus(IndividualObservationSamplingContext individualObservationSamplingContext, + boolean needSampling, CruiseSamplingInternalCache.SamplingData cruiseSamplingData, CruiseSamplingInternalCache.SamplingData zoneSamplingData, CruiseSamplingInternalCache.SamplingData fishingOperationSamplingData) { Objects.requireNonNull(individualObservationSamplingContext); + Objects.requireNonNull(cruiseSamplingData); + Objects.requireNonNull(zoneSamplingData); + Objects.requireNonNull(fishingOperationSamplingData); + this.needSampling = needSampling; this.individualObservationSamplingContext = individualObservationSamplingContext; this.samplingCountInCruise = cruiseSamplingData.getSamplingCount(); this.individualObservationCountInCruise = cruiseSamplingData.getIndividualObservationCount(); @@ -68,6 +78,10 @@ public class IndividualObservationSamplingStatus { return individualObservationSamplingContext; } + public boolean isNeedSampling() { + return needSampling; + } + public CalcifiedPiecesSamplingDefinition getCalcifiedPiecesSamplingDefinition() { return individualObservationSamplingContext.getCalcifiedPiecesSamplingDefinition(); } 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 deleted file mode 100644 index f06583c..0000000 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -package fr.ifremer.tutti.service.sampling; - -/* - * #%L - * Tutti :: Service - * $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% - */ - -import java.util.EventObject; - -/** - * @author Kevin Morin (Code Lutin) - * @since 4.5 - */ -public class SamplingEvent extends EventObject { - - private final IndividualObservationSamplingStatus status; - - public SamplingEvent(CruiseSamplingCache source, IndividualObservationSamplingStatus status) { - super(source); - this.status = status; - } - - @Override - public CruiseSamplingCache getSource() { - return (CruiseSamplingCache) super.getSource(); - } - - public IndividualObservationSamplingStatus getStatus() { - return status; - } - -} 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 deleted file mode 100644 index 8f14783..0000000 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingListener.java +++ /dev/null @@ -1,38 +0,0 @@ -package fr.ifremer.tutti.service.sampling; - -/* - * #%L - * Tutti :: Service - * $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% - */ - -import java.util.EventListener; - -/** - * @author Kevin Morin (Code Lutin) - * @since 4.5 - */ -public interface SamplingListener extends EventListener { - - void samplingNeeded(SamplingEvent event); - -} - -- 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/8255 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 48d0e067104b56a4afa32d552e77d17f264dcf71 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:16:51 2016 +0200 Revue du modèle de la zone de notification et de son handler --- .../frequency/SamplingNotificationZoneHandler.java | 96 +++++++++++----------- .../frequency/SamplingNotificationZoneModel.java | 12 +++ 2 files changed, 60 insertions(+), 48 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneHandler.java index 0587d90..9c9b2b0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneHandler.java @@ -8,7 +8,6 @@ import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.sampling.CalcifiedPiecesSamplingAlgorithmEntryNotFoundException; import fr.ifremer.tutti.service.sampling.IndividualObservationSamplingContext; import fr.ifremer.tutti.service.sampling.IndividualObservationSamplingStatus; -import fr.ifremer.tutti.service.sampling.SamplingListener; import fr.ifremer.tutti.service.sampling.SizeNotDefinedOnIndividualObservationException; import fr.ifremer.tutti.service.sampling.ZoneNotDefinedOnFishingOperationException; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchRowModel; @@ -48,9 +47,9 @@ public class SamplingNotificationZoneHandler implements Closeable { private final JLabel samplingWarningLabel; private final JLabel samplingSummaryLabel; - private final SamplingListener samplingListener; private final ListSelectionListener listSelectionListener; private final PropertyChangeListener modelSummaryTextChanged; + private final PropertyChangeListener modelSelectedRowChanged; private final PropertyChangeListener modelStatusChanged; private final Decorator<Integer> infiniteDecorator; @@ -60,12 +59,12 @@ public class SamplingNotificationZoneHandler implements Closeable { private final Color colorHighlightInfoForeground; private final Color colorHighlightInfoBackground; - public SamplingNotificationZoneHandler(SpeciesFrequencyUI ui) { + public SamplingNotificationZoneHandler(SpeciesFrequencyUI ui, SamplingNotificationZoneModel model) { this.uiModel = ui.getModel(); this.samplingWarningLabel = ui.getSamplingWarningLabel(); this.samplingSummaryLabel = ui.getSamplingResumeLabel(); this.individualObservationTableModel = (IndividualObservationBatchTableModel) ui.getObsTable().getModel(); - this.model = new SamplingNotificationZoneModel(); + this.model = model; this.listSelectionModel = ui.getObsTable().getSelectionModel(); SpeciesFrequencyUIHandler uiHandler = ui.getHandler(); @@ -76,16 +75,6 @@ public class SamplingNotificationZoneHandler implements Closeable { this.colorHighlightInfoForeground = uiHandler.getConfig().getColorHighlightInfoForeground(); this.colorHighlightInfoBackground = uiHandler.getConfig().getColorHighlightInfoBackground(); - // Ecoute sur le cache de données pour savoir quand il faut afficher les notifications de prélèvements - this.samplingListener = event -> { - - if (uiModel.isCanDisplayNotifications()) { - - whenSamplingNeeded(event.getStatus()); - - } - }; - // Ecoute le changement d'état de la zone de notification pour mettre à jour le statut this.modelStatusChanged = event -> { @@ -132,6 +121,34 @@ public class SamplingNotificationZoneHandler implements Closeable { }; + this.modelSelectedRowChanged = event -> { + + IndividualObservationBatchRowModel selectedRow = (IndividualObservationBatchRowModel) event.getNewValue(); + + if (selectedRow == null) { + + whenCanNotUseSampling("Aucune observation individuelle sélectionnée."); + return; + } + + try { + + // récupération du status de l'observation individuelle + IndividualObservationSamplingStatus status = individualObservationUICache.getIndividualObservationSamplingStatus(selectedRow); + + // mise à jour de la zone de notification + whenUpdateSummary(status); + + } catch (CalcifiedPiecesSamplingAlgorithmEntryNotFoundException e) { + whenCanNotUseSampling("Pas de correspondance sur l'observation individuelle sélectionnée dans le protocole."); + } catch (SizeNotDefinedOnIndividualObservationException e) { + whenCanNotUseSampling("La taille n'est pas définie sur l'observation individuelle sélectionnée."); + } catch (ZoneNotDefinedOnFishingOperationException e) { + whenCanNotUseSampling("Le trait n'est pas dans une zone."); + } + + }; + // Ecoute la sélection sur le tableau des observations individuelles pour rafraîchir la zone de notification this.listSelectionListener = event -> { @@ -142,7 +159,7 @@ public class SamplingNotificationZoneHandler implements Closeable { } if (source.isSelectionEmpty()) { - whenCanNotUseSampling("Aucune observation individuelle sélectionnée."); + model.setSelectedRow(null); return; } @@ -152,23 +169,7 @@ public class SamplingNotificationZoneHandler implements Closeable { } IndividualObservationBatchRowModel selectedRow = individualObservationTableModel.getEntry(source.getMinSelectionIndex()); - - // on commence toujours par supprimer le status de cette ligne - selectedRow.setIndividualObservationSamplingStatus(null); - - try { - - IndividualObservationSamplingStatus status = individualObservationUICache.getIndividualObservationStatus(selectedRow); - selectedRow.setIndividualObservationSamplingStatus(status); - whenUpdateSummary(status); - - } catch (CalcifiedPiecesSamplingAlgorithmEntryNotFoundException e) { - whenCanNotUseSampling("Pas de correspondance sur l'observation individuelle sélectionnée dans le protocole."); - } catch (SizeNotDefinedOnIndividualObservationException e) { - whenCanNotUseSampling("La taille n'est pas définie sur l'observation individuelle sélectionnée."); - } catch (ZoneNotDefinedOnFishingOperationException e) { - whenCanNotUseSampling("Le trait n'est pas dans une zone."); - } + model.setSelectedRow(selectedRow); }; @@ -183,13 +184,12 @@ public class SamplingNotificationZoneHandler implements Closeable { // toujours supprimer les listeners listSelectionModel.removeListSelectionListener(listSelectionListener); model.removePropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SAMPLING_STATUS, modelStatusChanged); + model.removePropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SELECTED_ROW, modelSelectedRowChanged); model.removePropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SUMMARY_TEXT, modelSummaryTextChanged); - if (individualObservationUICache.useCruiseSamplingCache()) { - individualObservationUICache.getCruiseSamplingCache().removeSamplingListener(samplingListener); - } // on les ajoutent (on peut en avoir besoin pour désactiver la zone de notification) model.addPropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SAMPLING_STATUS, modelStatusChanged); + model.addPropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SELECTED_ROW, modelSelectedRowChanged); model.addPropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SUMMARY_TEXT, modelSummaryTextChanged); if (!individualObservationUICache.isProtocolFilled()) { @@ -224,7 +224,6 @@ public class SamplingNotificationZoneHandler implements Closeable { model.reset(); - individualObservationUICache.getCruiseSamplingCache().addSamplingListener(samplingListener); listSelectionModel.addListSelectionListener(listSelectionListener); } @@ -233,41 +232,42 @@ public class SamplingNotificationZoneHandler implements Closeable { public void close() { listSelectionModel.removeListSelectionListener(listSelectionListener); - if (individualObservationUICache.useCruiseSamplingCache()) { - individualObservationUICache.getCruiseSamplingCache().removeSamplingListener(samplingListener); - } model.removePropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SAMPLING_STATUS, modelStatusChanged); + model.removePropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SELECTED_ROW, modelSelectedRowChanged); model.removePropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SUMMARY_TEXT, modelSummaryTextChanged); } private void whenCanNotUseSampling(String message) { + model.setSummaryText(message); model.setSamplingNotificationZoneStatus(SamplingNotificationZoneStatus.DISABLED); + } private void stopUsingStatusNotication(String message) { whenCanNotUseSampling(message); model.removePropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SAMPLING_STATUS, modelStatusChanged); + model.removePropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SELECTED_ROW, modelSelectedRowChanged); model.removePropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SUMMARY_TEXT, modelSummaryTextChanged); } - private void whenSamplingNeeded(IndividualObservationSamplingStatus status) { + private void whenUpdateSummary(IndividualObservationSamplingStatus status) { model.setSummaryText(getSummaryText(status)); - model.setSamplingNotificationZoneStatus(SamplingNotificationZoneStatus.NEED_SAMPLING); - - } - private void whenUpdateSummary(IndividualObservationSamplingStatus status) { + SamplingNotificationZoneStatus zoneStatus; - model.setSummaryText(getSummaryText(status)); + if (status.isNeedSampling()) { + zoneStatus = SamplingNotificationZoneStatus.NEED_SAMPLING; + } else if (status.isOneTotalCountIsAttained()) { + zoneStatus = SamplingNotificationZoneStatus.COUNT_ATTAINED; + } else { + zoneStatus = SamplingNotificationZoneStatus.NONE; + } - SamplingNotificationZoneStatus zoneStatus = status.isOneTotalCountIsAttained() ? - SamplingNotificationZoneStatus.COUNT_ATTAINED : - SamplingNotificationZoneStatus.NONE; model.setSamplingNotificationZoneStatus(zoneStatus); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneModel.java index 6e6547d..1572e0d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneModel.java @@ -11,7 +11,9 @@ public class SamplingNotificationZoneModel extends AbstractSerializableBean { public static final String PROPERTY_SAMPLING_STATUS = "samplingNotificationZoneStatus"; public static final String PROPERTY_SUMMARY_TEXT = "summaryText"; + public static final String PROPERTY_SELECTED_ROW = "selectedRow"; + private IndividualObservationBatchRowModel selectedRow; private SamplingNotificationZoneStatus samplingNotificationZoneStatus; private String summaryText; @@ -41,4 +43,14 @@ public class SamplingNotificationZoneModel extends AbstractSerializableBean { setSummaryText("Aucune observation individuelle sélectionnée."); } + + public IndividualObservationBatchRowModel getSelectedRow() { + return selectedRow; + } + + public void setSelectedRow(IndividualObservationBatchRowModel selectedRow) { + this.selectedRow = selectedRow; + firePropertyChange(PROPERTY_SELECTED_ROW, null /* On force la propagation de l'évènement! */, selectedRow); + } + } -- 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/8255 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit e899b8ab8b822120a6c46d62938d24f881c3ef9f Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:17:14 2016 +0200 traduction perdue --- tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 4f46f12..647a22e 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 @@ -1533,8 +1533,7 @@ tutti.editSpeciesFrequencies.samplingNeeded.immature=Immature tutti.editSpeciesFrequencies.samplingNeeded.mature=Mature tutti.editSpeciesFrequencies.samplingNeeded.max=max 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= +tutti.editSpeciesFrequencies.samplingNeeded.warning=<html><body><strong>Prélevez les pièces calcifiées \!</body></html> tutti.editSpeciesFrequencies.samplingTotalCountAttained.warning=<html><body><strong>Le nombre de prélèvements requis est atteint \!</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>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/8255 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit af55cbb697ba72eda6aafeef1e2a769230855b46 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:17:38 2016 +0200 Renommage méthode + suppression méthode non utilisée --- .../catches/species/frequency/IndividualObservationUICache.java | 6 +----- 1 file changed, 1 insertion(+), 5 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 23a149a..f487a6a 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 @@ -171,10 +171,6 @@ public class IndividualObservationUICache implements Closeable { .forEach(individualObservationRow -> addSamplingCodeNotAvailable(individualObservationRow.getSamplingCode())); } - public CruiseSamplingCache getCruiseSamplingCache() { - return cruiseSamplingCache; - } - public boolean isFishingOperationWithZone() { return fishingOperationZone != null; } @@ -198,7 +194,7 @@ public class IndividualObservationUICache implements Closeable { this.fishingOperation = null; } - public IndividualObservationSamplingStatus getIndividualObservationStatus(IndividualObservationBatchRowModel row) throws CalcifiedPiecesSamplingAlgorithmEntryNotFoundException, SizeNotDefinedOnIndividualObservationException, ZoneNotDefinedOnFishingOperationException { + public IndividualObservationSamplingStatus getIndividualObservationSamplingStatus(IndividualObservationBatchRowModel row) throws CalcifiedPiecesSamplingAlgorithmEntryNotFoundException, SizeNotDefinedOnIndividualObservationException, ZoneNotDefinedOnFishingOperationException { Float size = row.getSize(); return cruiseSamplingCache.getIndividualObservationSamplingStatus(fishingOperation, -- 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/8255 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 7de63b3196d6cab28a601e6d1d7cfd88b589b0b6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:27:52 2016 +0200 Normalement on a le bon flow pour la rafraichissement de la zone de notification des prélèvements + nettoyage de code --- .../IndividualObservationBatchTableHandler.java | 139 +++++---------------- .../IndividualObservationBatchUIModel.java | 7 ++ .../frequency/SpeciesFrequencyUIHandler.java | 11 +- 3 files changed, 39 insertions(+), 118 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchTableHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchTableHandler.java index c68e7d3..37eacb1 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchTableHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchTableHandler.java @@ -103,7 +103,7 @@ public class IndividualObservationBatchTableHandler implements Closeable { if (!optionalCruiseCache.isPresent()) { throw new IllegalStateException("Can't find cruise cache"); } - this.individualObservationUICache = new IndividualObservationUICache(optionalCruiseCache.get(), model, uiHandler.getDataContext()); + this.individualObservationUICache = new IndividualObservationUICache(optionalCruiseCache.get(), model, dataContext); this.individualObservationTable = ui.getObsTable(); this.frequencyTableModel = uiHandler.getTableModel(); this.individualObservationToFrequencyEngine = new IndividualObservationToFrequencyEngine(model2.getIndividualObservationWeightUnit()); @@ -120,6 +120,7 @@ public class IndividualObservationBatchTableHandler implements Closeable { CaracteristicQualitativeValue gender = model2.getGender(row); CaracteristicQualitativeValue maturity = model2.getMaturityValue(row); + boolean recomputeSamplingNotificationZone = false; switch (propertyName) { case IndividualObservationBatchRowModel.PROPERTY_INDIVIDUAL_OBSERVATION_BATCH_ROW_STATE: { @@ -139,6 +140,7 @@ public class IndividualObservationBatchTableHandler implements Closeable { float lengthStepToDecrement = optionalDecrementSize.get(); frequencyTableModel.decrementFrequencyRowsNumbers(lengthStepToDecrement); individualObservationUICache.decrementsObservationNb(gender, maturity, lengthStepToDecrement, row.getSamplingCode()); + recomputeSamplingNotificationZone = true; } Optional<Float> optionalIncrementSize = frequencyUpdate.getIncrementSize(); @@ -146,6 +148,7 @@ public class IndividualObservationBatchTableHandler implements Closeable { float lengthStepToIncrement = optionalIncrementSize.get(); frequencyTableModel.incrementFrequencyRowsNumbers(lengthStepToIncrement); individualObservationUICache.incrementsObservationNb(gender, maturity, lengthStepToIncrement, row.getSamplingCode()); + recomputeSamplingNotificationZone = true; } Optional<Pair<Float, Float>> optionalSubstractWeight = frequencyUpdate.getSubstractWeight(); @@ -176,73 +179,11 @@ public class IndividualObservationBatchTableHandler implements Closeable { } break; -// case IndividualObservationBatchRowModel.PROPERTY_SIZE: { -// -// Float oldValue = (Float) evt.getOldValue(); -// Float newValue = (Float) evt.getNewValue(); -// -// if (oldValue != null) { -// individualObservationUICache.decrementsObservationNb(gender, maturity, oldValue, row.getSamplingCode()); -// } -// if (newValue != null) { -// individualObservationUICache.incrementsObservationNb(gender, maturity, newValue, row.getSamplingCode()); -// } -// -// // we only update the frequencies if the row is valid -// if (row.isValid() && model.mustCopyIndividualObservationSize()) { -// -// if (oldValue != null) { -// frequencyTableModel.decrementFrequencyRowsNumbers(oldValue); -// } -// if (newValue != null) { -// frequencyTableModel.incrementFrequencyRowsNumbers(newValue); -// } -// -// if (model.isCopyIndividualObservationAll() && row.withWeight()) { -// float weight = row.getWeight(); -// if (oldValue != null) { -// frequencyTableModel.removeWeightToFrequencyRow(oldValue, weight); -// } -// if (newValue != null) { -// frequencyTableModel.addWeightToFrequencyRow(newValue, weight); -// } -// } -// } -// } -// break; -// -// case IndividualObservationBatchRowModel.PROPERTY_WEIGHT: -// if (row.isValid() && model.isCopyIndividualObservationAll()) { -// -// Float oldValue = (Float) evt.getOldValue(); -// Float newValue = (Float) evt.getNewValue(); -// Float weightToAdd; -// -// if (oldValue == null) { -// weightToAdd = newValue; -// -// } else if (newValue == null) { -// weightToAdd = -oldValue; -// -// } else { -// weightToAdd = newValue - oldValue; -// } -// -// WeightUnit weightUnit = model.getWeightUnit(); -// -// if (weightUnit.isNotNullNorZero(weightToAdd)) { -// if (weightUnit.isGreaterThanZero(weightToAdd)) { -// frequencyTableModel.addWeightToFrequencyRow(row, weightToAdd); -// } else { -// frequencyTableModel.removeWeightToFrequencyRow(row, -weightToAdd); -// } -// } -// } -// break; - case IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS: case IndividualObservationBatchRowModel.PROPERTY_CARACTERISTICS: + if (row.withSize()) { + CaracteristicMap oldValue = (CaracteristicMap) evt.getOldValue(); CaracteristicMap newValue = (CaracteristicMap) evt.getNewValue(); @@ -259,6 +200,7 @@ public class IndividualObservationBatchTableHandler implements Closeable { if (!Objects.equals(oldMaturity, newMaturity)) { individualObservationUICache.decrementsObservationNb(gender, oldMaturity, row.getSize()); individualObservationUICache.incrementsObservationNb(gender, newMaturity, row.getSize(), row.getSamplingCode()); + recomputeSamplingNotificationZone = true; } } @@ -267,8 +209,11 @@ public class IndividualObservationBatchTableHandler implements Closeable { if (!Objects.equals(oldGender, newGender)) { individualObservationUICache.decrementsObservationNb(oldGender, maturity, row.getSize()); individualObservationUICache.incrementsObservationNb(newGender, maturity, row.getSize(), row.getSamplingCode()); + recomputeSamplingNotificationZone = true; } + } + break; case IndividualObservationBatchRowModel.PROPERTY_SAMPLING_CODE: @@ -288,39 +233,31 @@ public class IndividualObservationBatchTableHandler implements Closeable { if (row.withSize()) { - float size = row.getSize(); + boolean removeSampling = withOldSamplingCode && !withNewSamplingCode; + boolean addSampling = withNewSamplingCode && !withOldSamplingCode; + + if (removeSampling) { + + individualObservationUICache.decrementsSamplingNb(gender, maturity, row.getSize()); + recomputeSamplingNotificationZone = true; + + } else if (addSampling) { + + individualObservationUICache.incrementsSamplingNb(gender, maturity, row.getSize()); + recomputeSamplingNotificationZone = true; - if (withOldSamplingCode) { - individualObservationUICache.decrementsSamplingNb(gender, maturity, size); - } - if (withNewSamplingCode) { - individualObservationUICache.incrementsSamplingNb(gender, maturity, size); } } + break; -// case IndividualObservationBatchRowModel.PROPERTY_VALID: -// // if the row's valid state changes, then remove or readd it to the frequencies -// if (!model.isRowComputationInProgress()) { -// -// boolean oldValue = (boolean) evt.getOldValue(); -// boolean newValue = (boolean) evt.getNewValue(); -// -// if (oldValue && model.mustCopyIndividualObservationSize()) { -// -// frequencyTableModel.decrementFrequencyRowsNumbers(row); -// } -// if (newValue) { -// if (model.mustCopyIndividualObservationSize()) { -// frequencyTableModel.incrementFrequencyRowsNumbers(row); -// } -// if (model.isCopyIndividualObservationAll() && row.withWeight()) { -// frequencyTableModel.addWeightToFrequencyRow(row, row.getWeight()); -// } -// } -// } -// break; + } + + if (recomputeSamplingNotificationZone) { + + // recalcul de la zone de notification + model2.getSamplingNotificationZoneModel().setSelectedRow(row); } // model2.recomputeRowValidState(row); @@ -479,24 +416,6 @@ public class IndividualObservationBatchTableHandler implements Closeable { }); -// individualObservationTable.getSelectionModel().addListSelectionListener(e -> { -// -// if (!model.isInRafaleRowCreation()) { -// uiHandler.resetSamplingLabel(); -// } -// -// IndividualObservationBatchRowModel selectedRow = null; -// -// if (!individualObservationTable.getSelectionModel().isSelectionEmpty()) { -// if (individualObservationTable.getSelectedRowCount() == 1) { -// selectedRow = individualObservationTableModel.getEntry(individualObservationTable.getSelectedRow()); -// -// } -// } -// -// individualObservationUICache.updateSelectedRow(selectedRow); -// }); - model2.addPropertyChangeListener(IndividualObservationBatchUIModel.PROPERTY_ROWS, evt -> individualObservationTableModel.setRows((List<IndividualObservationBatchRowModel>) evt.getNewValue())); // Pour bloquer le changement du mode de recopie des observations individuelles → mensurations diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchUIModel.java index d5f1d0c..7c7f4b6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchUIModel.java @@ -54,6 +54,8 @@ public class IndividualObservationBatchUIModel extends AbstractTuttiTableUIModel */ private Collection<Caracteristic> notEditableCaracteristic; + private final SamplingNotificationZoneModel samplingNotificationZoneModel; + @Override protected SpeciesBatchRowModel newEntity() { return null; // Jamais utilisé! @@ -64,6 +66,11 @@ public class IndividualObservationBatchUIModel extends AbstractTuttiTableUIModel this.sexCaracteristic = sexCaracteristic; this.individualObservationWeightUnit = individualObservationWeightUnit; this.defaultCaracteristic = defaultCaracteristic == null ? new ArrayList<>() : new ArrayList<>(defaultCaracteristic); + this.samplingNotificationZoneModel = new SamplingNotificationZoneModel(); + } + + public SamplingNotificationZoneModel getSamplingNotificationZoneModel() { + return samplingNotificationZoneModel; } public WeightUnit getIndividualObservationWeightUnit() { 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 d400df7..5e9960f 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 @@ -481,7 +481,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci this.individualObservationBatchTableHandler = new IndividualObservationBatchTableHandler(ui); this.averageWeightsHistogramHandler = new AverageWeightsHistogramHandler(ui); this.frequenciesHistogramHandler = new FrequenciesHistogramHandler(ui); - this.samplingNotificationZoneHandler = new SamplingNotificationZoneHandler(ui); + this.samplingNotificationZoneHandler = new SamplingNotificationZoneHandler(ui, model.getIndividualObservationModel().getSamplingNotificationZoneModel()); listenValidatorValid(ui.getValidator(), model); @@ -510,9 +510,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci IOUtils.closeQuietly(individualObservationBatchTableHandler); IOUtils.closeQuietly(averageWeightsHistogramHandler); IOUtils.closeQuietly(frequenciesHistogramHandler); - IOUtils.closeQuietly(individualObservationBatchTableHandler); - -// resetSamplingLabel(); + IOUtils.closeQuietly(samplingNotificationZoneHandler); frequencyEditor = null; @@ -535,10 +533,9 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci EditSpeciesBatchPanelUI parent = getParentContainer(EditSpeciesBatchPanelUI.class); parent.switchToEditBatch(); + //FIXME Voir si on doit encore faire ça après le switch ? je pense que oui... // // on supprime la colonne maturité en fermant, pour avoir les même colonnes qu'à la création de l'écran (important pour la swing session) // removeMaturityColumnIfPresent(); -// -// individualObservationUICache.close(); } @@ -1083,8 +1080,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci boolean sampleCodeMenusEnabled = individualObservationBatchTableHandler.isSampleCodeMenusEnabled(modelRowIndex); -// boolean sampleCodeMenusEnabled = modelRowIndex >= 0 && ui.getObsTable().getSelectedRowCount() == 1 -// && getObsTableModel().getRows().get(ui.getObsTable().getSelectedRow()).withSamplingCode(); ui.getEditSampleCodeMenu().setEnabled(sampleCodeMenusEnabled); ui.getDeleteSampleCodeMenu().setEnabled(sampleCodeMenusEnabled); } -- 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/8255 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit d8e5c5f190c3f7a934c278adce1ac24b30c46ffd Merge: 22912b8 7de63b3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Apr 20 02:39:33 2016 +0200 Retour sur develop, car déjà trop de modifications... mais non fini Merge branch 'feature/revue_algorithme' into develop .../ifremer/tutti/service/PersistenceService.java | 4 +- .../fr/ifremer/tutti/service/TuttiDataContext.java | 4 +- .../service/{sampling => cruise}/CruiseCache.java | 4 +- .../{sampling => cruise}/CruiseCacheAble.java | 2 +- .../{sampling => cruise}/CruiseCacheLoader.java | 4 +- .../cps/CalcifiedPiecesSamplingExportService.java | 2 +- ...cesSamplingAlgorithmEntryNotFoundException.java | 17 + .../service/sampling/CruiseSamplingCache.java | 611 ++++++++++----------- .../sampling/CruiseSamplingInternalCache.java | 147 ++--- .../IndividualObservationSamplingContext.java | 148 +++++ .../IndividualObservationSamplingStatus.java | 140 +++++ ...lObservationSamplingStatusExceptionSupport.java | 29 + .../tutti/service/sampling/SamplingCodeCache.java | 1 + .../tutti/service/sampling/SamplingEvent.java | 105 ---- .../tutti/service/sampling/SamplingListener.java | 39 -- ...NotDefinedOnIndividualObservationException.java | 17 + .../ZoneNotDefinedOnFishingOperationException.java | 17 + .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 2 +- .../content/actions/EditCatchesSupportAction.java | 2 +- .../CalcifiedPiecesSamplingReportAction.java | 2 +- .../SamplingCodeCellEditor.java | 2 +- .../IndividualObservationBatchTableHandler.java | 141 +---- .../IndividualObservationBatchUIModel.java | 7 + .../frequency/IndividualObservationUICache.java | 220 +++----- .../frequency/SamplingNotificationZoneHandler.java | 331 +++++++++++ .../frequency/SamplingNotificationZoneModel.java | 56 ++ .../frequency/SamplingNotificationZoneStatus.java | 15 + .../species/frequency/SpeciesFrequencyUI.jcss | 4 - .../frequency/SpeciesFrequencyUIHandler.java | 14 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 +- 31 files changed, 1252 insertions(+), 838 deletions(-) -- 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/8255 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit b65b154735aac2c7deb1ab7c466f4e39d342a072 Author: Kevin Morin <morin@codelutin.com> Date: Tue Apr 19 10:28:01 2016 +0200 si on modifie la catégorie vrac/hors vrac, on met à jour le compte de lots vrac/hors vrac (fixes #8255) --- .../ChangeSpeciesBatchSampleCategoryAction.java | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/edit/actions/ChangeSpeciesBatchSampleCategoryAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/edit/actions/ChangeSpeciesBatchSampleCategoryAction.java index 1b0139f..06f1d54 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/edit/actions/ChangeSpeciesBatchSampleCategoryAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/edit/actions/ChangeSpeciesBatchSampleCategoryAction.java @@ -24,6 +24,8 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.actions * #L% */ +import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmId; +import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; @@ -35,6 +37,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesB import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchUIHandler; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchUIModel; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; import jaxx.runtime.SwingUtil; @@ -176,10 +179,27 @@ public class ChangeSpeciesBatchSampleCategoryAction extends SimpleActionSupport< // save the first ancestor row with the modified category value handler.saveRow(firstAncestorRow); + SpeciesBatchUIModel model = ui.getModel(); + + // if the user modifies the sorted/unsorted category, update the count of species batches for the categories + // cf https://forge.codelutin.com/issues/8255 + if (PmfmId.SORTED_UNSORTED.getValue().equals(sampleCategoryId)) { + + // if the new value is sorted, the previous value was unsorted + if (QualitativeValueId.SORTED_VRAC.getValue().equals(((CaracteristicQualitativeValue) selectedItem).getIdAsInt())) { + model.decDistinctUnsortedSpeciesCount(); + model.incDistinctSortedSpeciesCount(); + + } else { // if the new value is unsorted, the previous value was sorted + model.decDistinctSortedSpeciesCount(); + model.incDistinctUnsortedSpeciesCount(); + } + } + if (!numericType) { // update speciesUsed cache - EditCatchesUIModel createBatchModel = ui.getModel().getCatchesUIModel(); + EditCatchesUIModel createBatchModel = model.getCatchesUIModel(); createBatchModel.replaceCaracteristicValue(firstAncestorRow.getSpecies(), (CaracteristicQualitativeValue) oldValue, (CaracteristicQualitativeValue) selectedItem); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm