Tutti-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- 4130 discussions
20 Apr '16
This is an automated email from the git hooks/post-receive script.
New commit to branch develop in repository tutti.
See https://gitlab.nuiton.org/codelutin/tutti.git
commit 4807b5172e8d1a2d9a2c42ad497ab13c1abc42d4
Merge: 3886a2d efe729c
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Apr 20 07:48:41 2016 +0200
Livrable #8261
Merge branch 'feature/8261' into develop
.../catches/species/edit/actions/RemoveSpeciesBatchAction.java | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
This is an automated email from the git hooks/post-receive script.
New change to branch develop in repository tutti.
See https://gitlab.nuiton.org/codelutin/tutti.git
from 3886a2d Livrable #8263 Merge branch 'feature/8263' into develop
new efe729c Ne pas tenter de supprimer des lots déjà supprimés (See #8261)
new 4807b51 Livrable #8261 Merge branch 'feature/8261' into develop
The 2 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 4807b5172e8d1a2d9a2c42ad497ab13c1abc42d4
Merge: 3886a2d efe729c
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Apr 20 07:48:41 2016 +0200
Livrable #8261
Merge branch 'feature/8261' into develop
commit efe729c272e3af40b3ca53f0e86d22afcee2534e
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Apr 20 07:48:39 2016 +0200
Ne pas tenter de supprimer des lots déjà supprimés (See #8261)
Summary of changes:
.../catches/species/edit/actions/RemoveSpeciesBatchAction.java | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
1
This is an automated email from the git hooks/post-receive script.
New change to branch develop in repository tutti.
See https://gitlab.nuiton.org/codelutin/tutti.git
from eba83d2 Merge branch 'feature/8255' into 'develop'
new 3de3001 Fix npe... Refs #8263
new 3886a2d Livrable #8263 Merge branch 'feature/8263' into develop
The 2 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 3886a2d3bfbef3fe8ff6c59e8f2c200db116bcf4
Merge: eba83d2 3de3001
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Apr 20 03:21:51 2016 +0200
Livrable #8263
Merge branch 'feature/8263' into develop
commit 3de30016e5ffc0ecb1365fd1e57f715e9bd83fff
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Wed Apr 20 03:21:49 2016 +0200
Fix npe... Refs #8263
Summary of changes:
.../ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
2
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
was b65b154 si on modifie la catégorie vrac/hors vrac, on met à jour le compte de lots vrac/hors vrac (fixes #8255)
The revisions that were on this branch are still contained in
other references; therefore, this change does not discard any commits
from the repository.
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
This is an automated email from the git hooks/post-receive script.
New change to branch develop in repository tutti.
See https://gitlab.nuiton.org/codelutin/tutti.git
from 22912b8 Livrable #8248 Merge branch 'feature/8248' into develop
adds d0bfe06 Déplacement du cache de haut niveau dans un paquetage plus adapté + amélioration code dans le cache (côté ui)
adds 2dad5f3 Revue de comment interroger le cache
adds 2488271 Utilisation d'un nouvel handler pour gérer la zone de notification
adds 9025fe4 Ajout d'états sur le cache d'ui
adds e7dec7b Revue de la zone de notification
adds 2ce988a Suppression des listeners sur le cache + revue du code du cache
adds 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)
adds 48d0e06 Revue du modèle de la zone de notification et de son handler
adds e899b8a traduction perdue
adds af55cbb Renommage méthode + suppression méthode non utilisée
adds 7de63b3 Normalement on a le bon flow pour la rafraichissement de la zone de notification des prélèvements + nettoyage de code
adds d8e5c5f Retour sur develop, car déjà trop de modifications... mais non fini Merge branch 'feature/revue_algorithme' into develop
adds b65b154 si on modifie la catégorie vrac/hors vrac, on met à jour le compte de lots vrac/hors vrac (fixes #8255)
adds eba83d2 Merge branch 'feature/8255' into 'develop'
No new revisions were added by this update.
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 +-
.../ChangeSpeciesBatchSampleCategoryAction.java | 22 +-
.../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 +-
32 files changed, 1273 insertions(+), 839 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(a)codelutin.com>.
1
0
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(a)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(a)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(a)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(a)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(a)codelutin.com>
Date: Wed Apr 20 02:17:14 2016 +0200
traduction perdue
commit 48d0e067104b56a4afa32d552e77d17f264dcf71
Author: Tony CHEMIT <chemit(a)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(a)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(a)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(a)codelutin.com>
Date: Tue Apr 19 15:16:27 2016 +0200
Revue de la zone de notification
commit 9025fe4882840061fa5b88291dc4a25a59f61d98
Author: Tony CHEMIT <chemit(a)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(a)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(a)codelutin.com>
Date: Tue Apr 19 10:50:16 2016 +0200
Revue de comment interroger le cache
commit d0bfe0616ac5a7dd3620d00d59de2c7a770511d3
Author: Tony CHEMIT <chemit(a)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(a)codelutin.com>.
1
7
07/13: 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)
by codelutin.com scm 20 Apr '16
by codelutin.com scm 20 Apr '16
20 Apr '16
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 41059a9cd2a86b5359d3715376f7899125a0aa23
Author: Tony CHEMIT <chemit(a)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)
---
.../frequency/IndividualObservationBatchRowModel.java | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchRowModel.java
index 9895745..8244875 100644
--- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchRowModel.java
+++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchRowModel.java
@@ -34,7 +34,6 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
-import fr.ifremer.tutti.service.sampling.IndividualObservationSamplingStatus;
import fr.ifremer.tutti.service.sampling.SamplingCodePrefix;
import fr.ifremer.tutti.type.WeightUnit;
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel;
@@ -96,13 +95,6 @@ public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel
*/
protected SamplingCodePrefix samplingCodePrefix;
- /**
- * Le statut venant du cache des observations individuelles.
- *
- * @since 4.5
- */
- protected IndividualObservationSamplingStatus individualObservationSamplingStatus;
-
protected static final Binder<IndividualObservationBatch, IndividualObservationBatchRowModel> fromBeanBinder =
BinderFactory.newBinder(IndividualObservationBatch.class,
IndividualObservationBatchRowModel.class);
@@ -144,14 +136,6 @@ public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel
firePropertyChange(PROPERTY_DEFAULT_CARACTERISTICS, oldValue, defaultCaracteristics);
}
- public IndividualObservationSamplingStatus getIndividualObservationSamplingStatus() {
- return individualObservationSamplingStatus;
- }
-
- public void setIndividualObservationSamplingStatus(IndividualObservationSamplingStatus individualObservationSamplingStatus) {
- this.individualObservationSamplingStatus = individualObservationSamplingStatus;
- }
-
//------------------------------------------------------------------------//
//-- AbstractTuttiBeanUIModel --//
//------------------------------------------------------------------------//
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
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 e7dec7b3385ffdb9537990bd65767a1ec9bf95bd
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Apr 19 15:16:27 2016 +0200
Revue de la zone de notification
---
...dividualObservationNotificationZoneHandler.java | 260 ----------------
.../frequency/SamplingNotificationZoneHandler.java | 331 +++++++++++++++++++++
.../frequency/SamplingNotificationZoneModel.java | 44 +++
.../frequency/SamplingNotificationZoneStatus.java | 15 +
.../frequency/SpeciesFrequencyUIHandler.java | 6 +-
5 files changed, 393 insertions(+), 263 deletions(-)
diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationNotificationZoneHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationNotificationZoneHandler.java
deleted file mode 100644
index 806258c..0000000
--- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationNotificationZoneHandler.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency;
-
-import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition;
-import fr.ifremer.tutti.persistence.entities.protocol.Zone;
-import fr.ifremer.tutti.persistence.entities.referential.Species;
-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;
-import fr.ifremer.tutti.util.Numbers;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.nuiton.decorator.Decorator;
-
-import javax.swing.JLabel;
-import javax.swing.ListSelectionModel;
-import javax.swing.event.ListSelectionListener;
-import java.awt.Color;
-import java.io.Closeable;
-
-import static org.nuiton.i18n.I18n.t;
-
-/**
- * Pour gérer la zone de notification des observations individuelles.
- *
- * Created on 18/04/16.
- *
- * @author Tony Chemit - chemit(a)codelutin.com
- */
-public class IndividualObservationNotificationZoneHandler implements Closeable {
-
- /** Logger. */
- private static final Log log = LogFactory.getLog(IndividualObservationNotificationZoneHandler.class);
-
- private final SpeciesFrequencyUI ui;
- private final SpeciesFrequencyUIModel uiModel;
- private final SpeciesFrequencyUIHandler uiHandler;
- private final IndividualObservationUICache individualObservationUICache;
- private final IndividualObservationBatchTableModel individualObservationTableModel;
- private final JLabel samplingWarningLabel;
- private final JLabel samplingSummaryLabel;
- private final SamplingListener samplingListener;
- private final ListSelectionListener listSelectionListener;
- private final Decorator<Integer> infiniteDecorator;
- private final Decorator<Species> speciesDecorator;
-
- public IndividualObservationNotificationZoneHandler(SpeciesFrequencyUI ui) {
- this.ui = ui;
- this.uiModel = ui.getModel();
- this.samplingWarningLabel = ui.getSamplingWarningLabel();
- this.samplingSummaryLabel = ui.getSamplingResumeLabel();
- this.individualObservationTableModel = (IndividualObservationBatchTableModel) ui.getObsTable().getModel();
- this.uiHandler = ui.getHandler();
- this.individualObservationUICache = uiHandler.getIndividualObservationUICache();
- this.infiniteDecorator = ui.getHandler().getDecorator(Integer.class, DecoratorService.NULL_INFINITE);
- this.speciesDecorator = ui.getHandler().getDecorator(Species.class, DecoratorService.WITH_SURVEY_CODE);
- // 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());
-
- }
- };
-
- listSelectionListener = e -> {
-
- ListSelectionModel source = (ListSelectionModel) e.getSource();
-
- if (e.getValueIsAdjusting()) {
- return;
- }
-
- if (source.isSelectionEmpty()) {
- whenCanNotUseSampling("Aucune observation individuelle sélectionnée.");
- return;
- }
-
- if (getSelectedRowCount(source) > 1) {
- whenCanNotUseSampling("Plusieurs observations individuelles sélectionnées.");
- return;
- }
-
- IndividualObservationBatchRowModel selectedRow = individualObservationTableModel.getEntry(source.getMinSelectionIndex());
- updateSelectedRow(selectedRow);
-
- };
-
- }
-
- public void editBatch(SpeciesBatchRowModel speciesBatch) {
-
- if (log.isInfoEnabled()) {
- log.info("Edit batch for " + speciesBatch);
- }
-
- samplingWarningLabel.setText("");
- samplingSummaryLabel.setText("");
-
- if (!uiHandler.getContext().isProtocolFilled()) {
-
- // pas de protocole
- whenCanNotUseSampling("Pas de protocole défini.");
- return;
- }
-
- if (!uiHandler.getContext().getDataContext().getProtocol().isUseCalcifiedPieceSampling()) {
-
- // pas d'utilisation de l'algorithme de prélèvement des pièces calcifiées
- whenCanNotUseSampling("L'utilisation de l'algorithme n'est pas activée dans le protocole.");
- return;
- }
-
- if (!individualObservationUICache.isFishingOperationWithZone()) {
-
- // pas de zone définie sur l'opération de pêche
- whenCanNotUseSampling("Le trait n'est pas dans une zone.");
- return;
- }
-
- if (!individualObservationUICache.isSpeciesDefinedInCalcifiedPiecesSampling()) {
-
- // pas de définition d'algorithme sur cette espèce
- whenCanNotUseSampling("L'espèce du lot n'est pas connue dans la définition de l'algorithme.");
- return;
- }
-
- individualObservationUICache.getCruiseSamplingCache().addSamplingListener(samplingListener);
-
- ui.getObsTable().getSelectionModel().addListSelectionListener(listSelectionListener);
-
- // on vide volontairement la sélection pour que la zone de notification soit bien mise à jour
- whenCanNotUseSampling("Aucune observation individuelle sélectionnée.");
-
-
- }
-
- @Override
- public void close() {
-
- ui.getObsTable().getSelectionModel().removeListSelectionListener(listSelectionListener);
- if (individualObservationUICache.useCruiseSamplingCache()) {
- individualObservationUICache.getCruiseSamplingCache().removeSamplingListener(samplingListener);
- }
-
- }
-
- public void updateSelectedRow(IndividualObservationBatchRowModel selectedRow) {
-
- 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.");
- }
-
- }
-
- private void whenCanNotUseSampling(String message) {
- samplingWarningLabel.setText("< L'algorithme de prélèvements des pièces calcifiées n'est pas utilisé >");
- samplingWarningLabel.setForeground(null);
- samplingWarningLabel.setBackground(Color.LIGHT_GRAY);
- samplingSummaryLabel.setText(message);
- }
-
- private void whenSamplingNeeded(IndividualObservationSamplingStatus status) {
-
- if (log.isInfoEnabled()) {
- log.info("samplingNeeded for " + status);
- }
-
- samplingWarningLabel.setText(t("tutti.editSpeciesFrequencies.samplingNeeded.warning"));
- samplingWarningLabel.setForeground(uiHandler.getConfig().getColorHighlightInfoForeground());
- samplingWarningLabel.setBackground(uiHandler.getConfig().getColorHighlightInfoBackground());
- displaySummary(status);
-
- }
-
- private void whenUpdateSummary(IndividualObservationSamplingStatus status) {
- if (status.isOneTotalCountIsAttained()) {
- samplingWarningLabel.setText(t("tutti.editSpeciesFrequencies.samplingTotalCountAttained.warning"));
- samplingWarningLabel.setForeground(null);
- samplingWarningLabel.setBackground(Color.LIGHT_GRAY);
- } else {
- samplingWarningLabel.setText(null);
- }
- displaySummary(status);
- }
-
- private void displaySummary(IndividualObservationSamplingStatus event) {
-
- IndividualObservationSamplingContext individualObservationSamplingContext = event.getIndividualObservationSamplingContext();
-
- CalcifiedPiecesSamplingDefinition calcifiedPiecesSamplingDefinition = event.getCalcifiedPiecesSamplingDefinition();
-
- int nbForOperation = event.getSamplingCountInFishingOperation();
- int nbForZone = event.getSamplingCountInZone();
- int nbForCruise = event.getSamplingCountInCruise();
-
- String nbForOperationLabel = getLabelForSamplingNumber(nbForOperation, calcifiedPiecesSamplingDefinition.getOperationLimitation());
- String nbForZoneLabel = getLabelForSamplingNumber(nbForZone, calcifiedPiecesSamplingDefinition.getZoneLimitation());
- String nbForCruiseLabel = getLabelForSamplingNumber(nbForCruise, calcifiedPiecesSamplingDefinition.getMaxByLenghtStep());
-
- String key = speciesDecorator.toString(individualObservationSamplingContext.getSpecies())
- + " " + Numbers.convertFromMm(individualObservationSamplingContext.getLengthStep(), uiModel.getLengthStepCaracteristicUnit())
- + " " + uiModel.getLengthStepCaracteristicUnit();
- if (individualObservationSamplingContext.withGender()) {
- key += " " + individualObservationSamplingContext.getGender().getDescription();
- }
- if (individualObservationSamplingContext.withMaturity()) {
- if (individualObservationSamplingContext.getMaturity()) {
- key += " " + t("tutti.editSpeciesFrequencies.samplingNeeded.mature");
- } else {
- key += " " + t("tutti.editSpeciesFrequencies.samplingNeeded.immature");
- }
- }
-
- Decorator<Zone> zoneDecorator = ui.getHandler().getDecorator(Zone.class, null);
- String zone = zoneDecorator.toString(individualObservationSamplingContext.getZone());
- String summary = t("tutti.editSpeciesFrequencies.samplingNeeded.summary", key, nbForOperationLabel, zone, nbForZoneLabel, nbForCruiseLabel);
-
- samplingSummaryLabel.setText(summary);
- }
-
- /**
- * Returns the number of selected rows.
- *
- * @return the number of selected rows, 0 if no rows are selected
- */
- private int getSelectedRowCount(ListSelectionModel selectionModel) {
- int iMin = selectionModel.getMinSelectionIndex();
- int iMax = selectionModel.getMaxSelectionIndex();
- int count = 0;
-
- for (int i = iMin; i <= iMax; i++) {
- if (selectionModel.isSelectedIndex(i)) {
- count++;
- }
- }
- return count;
- }
-
-
- private String getLabelForSamplingNumber(int value, Integer max) {
-
- return "<strong>" + infiniteDecorator.toString(value) + "</strong> (" + infiniteDecorator.toString(max) + ")";
- }
-}
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
new file mode 100644
index 0000000..0587d90
--- /dev/null
+++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneHandler.java
@@ -0,0 +1,331 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency;
+
+import com.google.common.base.Preconditions;
+import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition;
+import fr.ifremer.tutti.persistence.entities.protocol.Zone;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+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;
+import fr.ifremer.tutti.util.Numbers;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.decorator.Decorator;
+
+import javax.swing.JLabel;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionListener;
+import java.awt.Color;
+import java.beans.PropertyChangeListener;
+import java.io.Closeable;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+ * Pour gérer la zone de notification des observations individuelles.
+ *
+ * Created on 18/04/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ */
+public class SamplingNotificationZoneHandler implements Closeable {
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(SamplingNotificationZoneHandler.class);
+
+ private final SpeciesFrequencyUIModel uiModel;
+ private final SamplingNotificationZoneModel model;
+ private final IndividualObservationBatchTableModel individualObservationTableModel;
+ private final ListSelectionModel listSelectionModel;
+
+ private final IndividualObservationUICache individualObservationUICache;
+
+ private final JLabel samplingWarningLabel;
+ private final JLabel samplingSummaryLabel;
+
+ private final SamplingListener samplingListener;
+ private final ListSelectionListener listSelectionListener;
+ private final PropertyChangeListener modelSummaryTextChanged;
+ private final PropertyChangeListener modelStatusChanged;
+
+ private final Decorator<Integer> infiniteDecorator;
+ private final Decorator<Species> speciesDecorator;
+ private final Decorator<Zone> zoneDecorator;
+
+ private final Color colorHighlightInfoForeground;
+ private final Color colorHighlightInfoBackground;
+
+ public SamplingNotificationZoneHandler(SpeciesFrequencyUI ui) {
+ this.uiModel = ui.getModel();
+ this.samplingWarningLabel = ui.getSamplingWarningLabel();
+ this.samplingSummaryLabel = ui.getSamplingResumeLabel();
+ this.individualObservationTableModel = (IndividualObservationBatchTableModel) ui.getObsTable().getModel();
+ this.model = new SamplingNotificationZoneModel();
+ this.listSelectionModel = ui.getObsTable().getSelectionModel();
+
+ SpeciesFrequencyUIHandler uiHandler = ui.getHandler();
+ this.individualObservationUICache = uiHandler.getIndividualObservationUICache();
+ this.infiniteDecorator = uiHandler.getDecorator(Integer.class, DecoratorService.NULL_INFINITE);
+ this.speciesDecorator = uiHandler.getDecorator(Species.class, DecoratorService.WITH_SURVEY_CODE);
+ this.zoneDecorator = uiHandler.getDecorator(Zone.class, null);
+ 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 -> {
+
+ SamplingNotificationZoneStatus newValue = (SamplingNotificationZoneStatus) event.getNewValue();
+
+ switch (newValue) {
+
+ case DISABLED:
+
+ samplingWarningLabel.setText("< L'algorithme de prélèvements des pièces calcifiées n'est pas utilisé >");
+ samplingWarningLabel.setForeground(null);
+ samplingWarningLabel.setBackground(Color.LIGHT_GRAY);
+
+ break;
+ case NEED_SAMPLING:
+
+ samplingWarningLabel.setText(t("tutti.editSpeciesFrequencies.samplingNeeded.warning"));
+ samplingWarningLabel.setForeground(colorHighlightInfoForeground);
+ samplingWarningLabel.setBackground(colorHighlightInfoBackground);
+
+ break;
+ case COUNT_ATTAINED:
+
+ samplingWarningLabel.setText(t("tutti.editSpeciesFrequencies.samplingTotalCountAttained.warning"));
+ samplingWarningLabel.setForeground(null);
+ samplingWarningLabel.setBackground(Color.LIGHT_GRAY);
+
+ break;
+ case NONE:
+
+ samplingWarningLabel.setText(null);
+ samplingWarningLabel.setForeground(null);
+ samplingWarningLabel.setBackground(null);
+
+ break;
+ }
+ };
+
+ // Ecoute le changement du texte de la zone de notification pour mettre à jour l'ui
+ this.modelSummaryTextChanged = event -> {
+
+ String newValue = (String) event.getNewValue();
+ samplingSummaryLabel.setText(newValue);
+
+ };
+
+ // Ecoute la sélection sur le tableau des observations individuelles pour rafraîchir la zone de notification
+ this.listSelectionListener = event -> {
+
+ ListSelectionModel source = (ListSelectionModel) event.getSource();
+
+ if (event.getValueIsAdjusting()) {
+ return;
+ }
+
+ if (source.isSelectionEmpty()) {
+ whenCanNotUseSampling("Aucune observation individuelle sélectionnée.");
+ return;
+ }
+
+ if (getSelectedRowCount(source) > 1) {
+ whenCanNotUseSampling("Plusieurs observations individuelles sélectionnées.");
+ return;
+ }
+
+ 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.");
+ }
+
+ };
+
+ }
+
+ public void editBatch(SpeciesBatchRowModel speciesBatch) {
+
+ if (log.isInfoEnabled()) {
+ log.info("Edit batch for " + speciesBatch);
+ }
+
+ // toujours supprimer les listeners
+ listSelectionModel.removeListSelectionListener(listSelectionListener);
+ model.removePropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SAMPLING_STATUS, modelStatusChanged);
+ 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_SUMMARY_TEXT, modelSummaryTextChanged);
+
+ if (!individualObservationUICache.isProtocolFilled()) {
+
+ // pas de protocole
+ stopUsingStatusNotication("Pas de protocole défini.");
+ return;
+ }
+
+ if (!individualObservationUICache.isProtocolUseCalcifiedPieceSampling()) {
+
+ // pas d'utilisation de l'algorithme de prélèvement des pièces calcifiées
+ stopUsingStatusNotication("L'utilisation de l'algorithme n'est pas activée dans le protocole.");
+ return;
+ }
+
+ if (!individualObservationUICache.isFishingOperationWithZone()) {
+
+ // pas de zone définie sur l'opération de pêche
+ stopUsingStatusNotication("Le trait n'est pas dans une zone.");
+ return;
+ }
+
+ if (!individualObservationUICache.isSpeciesDefinedInCalcifiedPiecesSampling()) {
+
+ // pas de définition d'algorithme sur cette espèce
+ stopUsingStatusNotication("L'espèce du lot n'est pas connue dans la définition de l'algorithme.");
+ return;
+ }
+
+ Preconditions.checkState(individualObservationUICache.useCruiseSamplingCache());
+
+ model.reset();
+
+ individualObservationUICache.getCruiseSamplingCache().addSamplingListener(samplingListener);
+ listSelectionModel.addListSelectionListener(listSelectionListener);
+
+ }
+
+ @Override
+ public void close() {
+
+ listSelectionModel.removeListSelectionListener(listSelectionListener);
+ if (individualObservationUICache.useCruiseSamplingCache()) {
+ individualObservationUICache.getCruiseSamplingCache().removeSamplingListener(samplingListener);
+ }
+ model.removePropertyChangeListener(SamplingNotificationZoneModel.PROPERTY_SAMPLING_STATUS, modelStatusChanged);
+ 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_SUMMARY_TEXT, modelSummaryTextChanged);
+
+ }
+
+ private void whenSamplingNeeded(IndividualObservationSamplingStatus status) {
+
+ model.setSummaryText(getSummaryText(status));
+ model.setSamplingNotificationZoneStatus(SamplingNotificationZoneStatus.NEED_SAMPLING);
+
+ }
+
+ private void whenUpdateSummary(IndividualObservationSamplingStatus status) {
+
+ model.setSummaryText(getSummaryText(status));
+
+ SamplingNotificationZoneStatus zoneStatus = status.isOneTotalCountIsAttained() ?
+ SamplingNotificationZoneStatus.COUNT_ATTAINED :
+ SamplingNotificationZoneStatus.NONE;
+ model.setSamplingNotificationZoneStatus(zoneStatus);
+
+ }
+
+ private String getSummaryText(IndividualObservationSamplingStatus status) {
+
+ IndividualObservationSamplingContext individualObservationSamplingContext = status.getIndividualObservationSamplingContext();
+
+ CalcifiedPiecesSamplingDefinition calcifiedPiecesSamplingDefinition = status.getCalcifiedPiecesSamplingDefinition();
+
+ int nbForOperation = status.getSamplingCountInFishingOperation();
+ int nbForZone = status.getSamplingCountInZone();
+ int nbForCruise = status.getSamplingCountInCruise();
+
+ String nbForOperationLabel = getLabelForSamplingNumber(nbForOperation, calcifiedPiecesSamplingDefinition.getOperationLimitation());
+ String nbForZoneLabel = getLabelForSamplingNumber(nbForZone, calcifiedPiecesSamplingDefinition.getZoneLimitation());
+ String nbForCruiseLabel = getLabelForSamplingNumber(nbForCruise, calcifiedPiecesSamplingDefinition.getMaxByLenghtStep());
+
+ String key = speciesDecorator.toString(individualObservationSamplingContext.getSpecies())
+ + " " + Numbers.convertFromMm(individualObservationSamplingContext.getLengthStep(), uiModel.getLengthStepCaracteristicUnit())
+ + " " + uiModel.getLengthStepCaracteristicUnit();
+ if (individualObservationSamplingContext.withGender()) {
+ key += " " + individualObservationSamplingContext.getGender().getDescription();
+ }
+ if (individualObservationSamplingContext.withMaturity()) {
+ if (individualObservationSamplingContext.getMaturity()) {
+ key += " " + t("tutti.editSpeciesFrequencies.samplingNeeded.mature");
+ } else {
+ key += " " + t("tutti.editSpeciesFrequencies.samplingNeeded.immature");
+ }
+ }
+
+ String zone = zoneDecorator.toString(individualObservationSamplingContext.getZone());
+
+ return t("tutti.editSpeciesFrequencies.samplingNeeded.summary", key, nbForOperationLabel, zone, nbForZoneLabel, nbForCruiseLabel);
+
+ }
+
+ /**
+ * Returns the number of selected rows.
+ *
+ * @return the number of selected rows, 0 if no rows are selected
+ */
+ private int getSelectedRowCount(ListSelectionModel selectionModel) {
+ int iMin = selectionModel.getMinSelectionIndex();
+ int iMax = selectionModel.getMaxSelectionIndex();
+ int count = 0;
+
+ for (int i = iMin; i <= iMax; i++) {
+ if (selectionModel.isSelectedIndex(i)) {
+ count++;
+ }
+ }
+ return count;
+ }
+
+
+ private String getLabelForSamplingNumber(int value, Integer max) {
+ return "<strong>" + infiniteDecorator.toString(value) + "</strong> (" + infiniteDecorator.toString(max) + ")";
+ }
+}
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
new file mode 100644
index 0000000..6e6547d
--- /dev/null
+++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneModel.java
@@ -0,0 +1,44 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency;
+
+import org.jdesktop.beans.AbstractSerializableBean;
+
+/**
+ * Created on 19/04/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ */
+public class SamplingNotificationZoneModel extends AbstractSerializableBean {
+
+ public static final String PROPERTY_SAMPLING_STATUS = "samplingNotificationZoneStatus";
+ public static final String PROPERTY_SUMMARY_TEXT = "summaryText";
+
+ private SamplingNotificationZoneStatus samplingNotificationZoneStatus;
+ private String summaryText;
+
+ public SamplingNotificationZoneStatus getSamplingNotificationZoneStatus() {
+ return samplingNotificationZoneStatus;
+ }
+
+ public void setSamplingNotificationZoneStatus(SamplingNotificationZoneStatus samplingNotificationZoneStatus) {
+ Object oldValue = getSamplingNotificationZoneStatus();
+ this.samplingNotificationZoneStatus = samplingNotificationZoneStatus;
+ firePropertyChange(PROPERTY_SAMPLING_STATUS, oldValue, samplingNotificationZoneStatus);
+ }
+
+ public String getSummaryText() {
+ return summaryText;
+ }
+
+ public void setSummaryText(String summaryText) {
+ Object oldValue = getSummaryText();
+ this.summaryText = summaryText;
+ firePropertyChange(PROPERTY_SUMMARY_TEXT, oldValue, summaryText);
+ }
+
+ public void reset() {
+
+ setSamplingNotificationZoneStatus(SamplingNotificationZoneStatus.DISABLED);
+ setSummaryText("Aucune observation individuelle sélectionnée.");
+
+ }
+}
diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneStatus.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneStatus.java
new file mode 100644
index 0000000..6806581
--- /dev/null
+++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SamplingNotificationZoneStatus.java
@@ -0,0 +1,15 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency;
+
+/**
+ * Pour définir les différents états de la zone de notification des prélèvements.
+ *
+ * Created on 19/04/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ */
+public enum SamplingNotificationZoneStatus {
+ DISABLED, /* Not using algorithm */
+ NEED_SAMPLING, /* Selected indivdual observation need sampling */
+ COUNT_ATTAINED, /* Selected individual observation has attained one of his total count */
+ NONE /* Nothing in special */
+}
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 592561c..d400df7 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
@@ -136,7 +136,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci
protected IndividualObservationBatchTableHandler individualObservationBatchTableHandler;
protected AverageWeightsHistogramHandler averageWeightsHistogramHandler;
protected FrequenciesHistogramHandler frequenciesHistogramHandler;
- protected IndividualObservationNotificationZoneHandler individualObservationNotificationZoneHandler;
+ protected SamplingNotificationZoneHandler samplingNotificationZoneHandler;
protected Decorator<Caracteristic> caracteristicDecorator;
protected Decorator<Caracteristic> caracteristicTipDecorator;
@@ -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.individualObservationNotificationZoneHandler = new IndividualObservationNotificationZoneHandler(ui);
+ this.samplingNotificationZoneHandler = new SamplingNotificationZoneHandler(ui);
listenValidatorValid(ui.getValidator(), model);
@@ -649,7 +649,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci
individualObservationBatchTableHandler.initObservationsCache(speciesBatch, getDataContext().getFishingOperation());
- individualObservationNotificationZoneHandler.editBatch(speciesBatch);
+ samplingNotificationZoneHandler.editBatch(speciesBatch);
// individualObservationUICache.init(ui, frequencyEditor.getEditRow(), getDataContext().getFishingOperation(), model.getRows());
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
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 9025fe4882840061fa5b88291dc4a25a59f61d98
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Apr 19 15:16:15 2016 +0200
Ajout d'états sur le cache d'ui
---
.../frequency/IndividualObservationBatchTableHandler.java | 2 +-
.../species/frequency/IndividualObservationUICache.java | 15 ++++++++++++++-
2 files changed, 15 insertions(+), 2 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 cdd6e9d..c68e7d3 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);
+ this.individualObservationUICache = new IndividualObservationUICache(optionalCruiseCache.get(), model, uiHandler.getDataContext());
this.individualObservationTable = ui.getObsTable();
this.frequencyTableModel = uiHandler.getTableModel();
this.individualObservationToFrequencyEngine = new IndividualObservationToFrequencyEngine(model2.getIndividualObservationWeightUnit());
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 926a62c..23a149a 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
@@ -28,6 +28,7 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
import fr.ifremer.tutti.persistence.entities.protocol.Zone;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
+import fr.ifremer.tutti.service.TuttiDataContext;
import fr.ifremer.tutti.service.cruise.CruiseCache;
import fr.ifremer.tutti.service.sampling.CalcifiedPiecesSamplingAlgorithmEntryNotFoundException;
import fr.ifremer.tutti.service.sampling.CruiseSamplingCache;
@@ -67,6 +68,8 @@ public class IndividualObservationUICache implements Closeable {
private final SamplingCodeCache samplingCodeCache;
private final boolean useCruiseSamplingCache;
+ private final boolean protocolFilled;
+ private final boolean protocolUseCalcifiedPieceSampling;
private boolean speciesDefinedInCalcifiedPiecesSampling;
private final SpeciesFrequencyUIModel uiModel;
@@ -94,12 +97,14 @@ public class IndividualObservationUICache implements Closeable {
*/
private boolean on;
- public IndividualObservationUICache(CruiseCache cruiseCache, SpeciesFrequencyUIModel uiModel) {
+ public IndividualObservationUICache(CruiseCache cruiseCache, SpeciesFrequencyUIModel uiModel, TuttiDataContext tuttiDataContext) {
this.useCruiseSamplingCache = cruiseCache.useSamplingCache();
this.cruiseSamplingCache = cruiseCache.getSamplingCruiseCache().orElse(null);
this.samplingCodeCache = cruiseCache.getSamplingCodeCache();
this.uiModel = uiModel;
this.individualObservationModel = uiModel.getIndividualObservationModel();
+ this.protocolFilled = tuttiDataContext.isProgramFilled();
+ this.protocolUseCalcifiedPieceSampling = protocolFilled && tuttiDataContext.getProtocol().isUseCalcifiedPieceSampling();
// Ecoute sur le modèle de l'ui pour savoir quand on peut activer le cache (i.e uand le modèle n'est pas en construction)
this.uiModel.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_INIT_BATCH_EDITION, new PropertyChangeListener() {
@@ -174,6 +179,14 @@ public class IndividualObservationUICache implements Closeable {
return fishingOperationZone != null;
}
+ public boolean isProtocolFilled() {
+ return protocolFilled;
+ }
+
+ public boolean isProtocolUseCalcifiedPieceSampling() {
+ return protocolUseCalcifiedPieceSampling;
+ }
+
public boolean isSpeciesDefinedInCalcifiedPiecesSampling() {
return speciesDefinedInCalcifiedPiecesSampling;
}
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0
03/13: Utilisation d'un nouvel handler pour gérer la zone de notification
by codelutin.com scm 20 Apr '16
by codelutin.com scm 20 Apr '16
20 Apr '16
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 2488271da21803a1723b47c1f907c7963cad1749
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Tue Apr 19 10:53:45 2016 +0200
Utilisation d'un nouvel handler pour gérer la zone de notification
---
.../IndividualObservationBatchRowModel.java | 16 ++
.../IndividualObservationBatchTableHandler.java | 34 +--
...dividualObservationNotificationZoneHandler.java | 260 +++++++++++++++++++++
.../frequency/IndividualObservationUICache.java | 195 +++++-----------
.../species/frequency/SpeciesFrequencyUI.jcss | 4 -
.../frequency/SpeciesFrequencyUIHandler.java | 7 +-
.../resources/i18n/tutti-ui-swing_en_GB.properties | 1 +
.../resources/i18n/tutti-ui-swing_fr_FR.properties | 3 +-
8 files changed, 354 insertions(+), 166 deletions(-)
diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchRowModel.java
index 8244875..9895745 100644
--- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchRowModel.java
+++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchRowModel.java
@@ -34,6 +34,7 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch;
import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
+import fr.ifremer.tutti.service.sampling.IndividualObservationSamplingStatus;
import fr.ifremer.tutti.service.sampling.SamplingCodePrefix;
import fr.ifremer.tutti.type.WeightUnit;
import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel;
@@ -95,6 +96,13 @@ public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel
*/
protected SamplingCodePrefix samplingCodePrefix;
+ /**
+ * Le statut venant du cache des observations individuelles.
+ *
+ * @since 4.5
+ */
+ protected IndividualObservationSamplingStatus individualObservationSamplingStatus;
+
protected static final Binder<IndividualObservationBatch, IndividualObservationBatchRowModel> fromBeanBinder =
BinderFactory.newBinder(IndividualObservationBatch.class,
IndividualObservationBatchRowModel.class);
@@ -136,6 +144,14 @@ public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel
firePropertyChange(PROPERTY_DEFAULT_CARACTERISTICS, oldValue, defaultCaracteristics);
}
+ public IndividualObservationSamplingStatus getIndividualObservationSamplingStatus() {
+ return individualObservationSamplingStatus;
+ }
+
+ public void setIndividualObservationSamplingStatus(IndividualObservationSamplingStatus individualObservationSamplingStatus) {
+ this.individualObservationSamplingStatus = individualObservationSamplingStatus;
+ }
+
//------------------------------------------------------------------------//
//-- AbstractTuttiBeanUIModel --//
//------------------------------------------------------------------------//
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 3652e9b..cdd6e9d 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
@@ -479,23 +479,23 @@ 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);
- });
+// 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()));
diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationNotificationZoneHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationNotificationZoneHandler.java
new file mode 100644
index 0000000..806258c
--- /dev/null
+++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationNotificationZoneHandler.java
@@ -0,0 +1,260 @@
+package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency;
+
+import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition;
+import fr.ifremer.tutti.persistence.entities.protocol.Zone;
+import fr.ifremer.tutti.persistence.entities.referential.Species;
+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;
+import fr.ifremer.tutti.util.Numbers;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.decorator.Decorator;
+
+import javax.swing.JLabel;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionListener;
+import java.awt.Color;
+import java.io.Closeable;
+
+import static org.nuiton.i18n.I18n.t;
+
+/**
+ * Pour gérer la zone de notification des observations individuelles.
+ *
+ * Created on 18/04/16.
+ *
+ * @author Tony Chemit - chemit(a)codelutin.com
+ */
+public class IndividualObservationNotificationZoneHandler implements Closeable {
+
+ /** Logger. */
+ private static final Log log = LogFactory.getLog(IndividualObservationNotificationZoneHandler.class);
+
+ private final SpeciesFrequencyUI ui;
+ private final SpeciesFrequencyUIModel uiModel;
+ private final SpeciesFrequencyUIHandler uiHandler;
+ private final IndividualObservationUICache individualObservationUICache;
+ private final IndividualObservationBatchTableModel individualObservationTableModel;
+ private final JLabel samplingWarningLabel;
+ private final JLabel samplingSummaryLabel;
+ private final SamplingListener samplingListener;
+ private final ListSelectionListener listSelectionListener;
+ private final Decorator<Integer> infiniteDecorator;
+ private final Decorator<Species> speciesDecorator;
+
+ public IndividualObservationNotificationZoneHandler(SpeciesFrequencyUI ui) {
+ this.ui = ui;
+ this.uiModel = ui.getModel();
+ this.samplingWarningLabel = ui.getSamplingWarningLabel();
+ this.samplingSummaryLabel = ui.getSamplingResumeLabel();
+ this.individualObservationTableModel = (IndividualObservationBatchTableModel) ui.getObsTable().getModel();
+ this.uiHandler = ui.getHandler();
+ this.individualObservationUICache = uiHandler.getIndividualObservationUICache();
+ this.infiniteDecorator = ui.getHandler().getDecorator(Integer.class, DecoratorService.NULL_INFINITE);
+ this.speciesDecorator = ui.getHandler().getDecorator(Species.class, DecoratorService.WITH_SURVEY_CODE);
+ // 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());
+
+ }
+ };
+
+ listSelectionListener = e -> {
+
+ ListSelectionModel source = (ListSelectionModel) e.getSource();
+
+ if (e.getValueIsAdjusting()) {
+ return;
+ }
+
+ if (source.isSelectionEmpty()) {
+ whenCanNotUseSampling("Aucune observation individuelle sélectionnée.");
+ return;
+ }
+
+ if (getSelectedRowCount(source) > 1) {
+ whenCanNotUseSampling("Plusieurs observations individuelles sélectionnées.");
+ return;
+ }
+
+ IndividualObservationBatchRowModel selectedRow = individualObservationTableModel.getEntry(source.getMinSelectionIndex());
+ updateSelectedRow(selectedRow);
+
+ };
+
+ }
+
+ public void editBatch(SpeciesBatchRowModel speciesBatch) {
+
+ if (log.isInfoEnabled()) {
+ log.info("Edit batch for " + speciesBatch);
+ }
+
+ samplingWarningLabel.setText("");
+ samplingSummaryLabel.setText("");
+
+ if (!uiHandler.getContext().isProtocolFilled()) {
+
+ // pas de protocole
+ whenCanNotUseSampling("Pas de protocole défini.");
+ return;
+ }
+
+ if (!uiHandler.getContext().getDataContext().getProtocol().isUseCalcifiedPieceSampling()) {
+
+ // pas d'utilisation de l'algorithme de prélèvement des pièces calcifiées
+ whenCanNotUseSampling("L'utilisation de l'algorithme n'est pas activée dans le protocole.");
+ return;
+ }
+
+ if (!individualObservationUICache.isFishingOperationWithZone()) {
+
+ // pas de zone définie sur l'opération de pêche
+ whenCanNotUseSampling("Le trait n'est pas dans une zone.");
+ return;
+ }
+
+ if (!individualObservationUICache.isSpeciesDefinedInCalcifiedPiecesSampling()) {
+
+ // pas de définition d'algorithme sur cette espèce
+ whenCanNotUseSampling("L'espèce du lot n'est pas connue dans la définition de l'algorithme.");
+ return;
+ }
+
+ individualObservationUICache.getCruiseSamplingCache().addSamplingListener(samplingListener);
+
+ ui.getObsTable().getSelectionModel().addListSelectionListener(listSelectionListener);
+
+ // on vide volontairement la sélection pour que la zone de notification soit bien mise à jour
+ whenCanNotUseSampling("Aucune observation individuelle sélectionnée.");
+
+
+ }
+
+ @Override
+ public void close() {
+
+ ui.getObsTable().getSelectionModel().removeListSelectionListener(listSelectionListener);
+ if (individualObservationUICache.useCruiseSamplingCache()) {
+ individualObservationUICache.getCruiseSamplingCache().removeSamplingListener(samplingListener);
+ }
+
+ }
+
+ public void updateSelectedRow(IndividualObservationBatchRowModel selectedRow) {
+
+ 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.");
+ }
+
+ }
+
+ private void whenCanNotUseSampling(String message) {
+ samplingWarningLabel.setText("< L'algorithme de prélèvements des pièces calcifiées n'est pas utilisé >");
+ samplingWarningLabel.setForeground(null);
+ samplingWarningLabel.setBackground(Color.LIGHT_GRAY);
+ samplingSummaryLabel.setText(message);
+ }
+
+ private void whenSamplingNeeded(IndividualObservationSamplingStatus status) {
+
+ if (log.isInfoEnabled()) {
+ log.info("samplingNeeded for " + status);
+ }
+
+ samplingWarningLabel.setText(t("tutti.editSpeciesFrequencies.samplingNeeded.warning"));
+ samplingWarningLabel.setForeground(uiHandler.getConfig().getColorHighlightInfoForeground());
+ samplingWarningLabel.setBackground(uiHandler.getConfig().getColorHighlightInfoBackground());
+ displaySummary(status);
+
+ }
+
+ private void whenUpdateSummary(IndividualObservationSamplingStatus status) {
+ if (status.isOneTotalCountIsAttained()) {
+ samplingWarningLabel.setText(t("tutti.editSpeciesFrequencies.samplingTotalCountAttained.warning"));
+ samplingWarningLabel.setForeground(null);
+ samplingWarningLabel.setBackground(Color.LIGHT_GRAY);
+ } else {
+ samplingWarningLabel.setText(null);
+ }
+ displaySummary(status);
+ }
+
+ private void displaySummary(IndividualObservationSamplingStatus event) {
+
+ IndividualObservationSamplingContext individualObservationSamplingContext = event.getIndividualObservationSamplingContext();
+
+ CalcifiedPiecesSamplingDefinition calcifiedPiecesSamplingDefinition = event.getCalcifiedPiecesSamplingDefinition();
+
+ int nbForOperation = event.getSamplingCountInFishingOperation();
+ int nbForZone = event.getSamplingCountInZone();
+ int nbForCruise = event.getSamplingCountInCruise();
+
+ String nbForOperationLabel = getLabelForSamplingNumber(nbForOperation, calcifiedPiecesSamplingDefinition.getOperationLimitation());
+ String nbForZoneLabel = getLabelForSamplingNumber(nbForZone, calcifiedPiecesSamplingDefinition.getZoneLimitation());
+ String nbForCruiseLabel = getLabelForSamplingNumber(nbForCruise, calcifiedPiecesSamplingDefinition.getMaxByLenghtStep());
+
+ String key = speciesDecorator.toString(individualObservationSamplingContext.getSpecies())
+ + " " + Numbers.convertFromMm(individualObservationSamplingContext.getLengthStep(), uiModel.getLengthStepCaracteristicUnit())
+ + " " + uiModel.getLengthStepCaracteristicUnit();
+ if (individualObservationSamplingContext.withGender()) {
+ key += " " + individualObservationSamplingContext.getGender().getDescription();
+ }
+ if (individualObservationSamplingContext.withMaturity()) {
+ if (individualObservationSamplingContext.getMaturity()) {
+ key += " " + t("tutti.editSpeciesFrequencies.samplingNeeded.mature");
+ } else {
+ key += " " + t("tutti.editSpeciesFrequencies.samplingNeeded.immature");
+ }
+ }
+
+ Decorator<Zone> zoneDecorator = ui.getHandler().getDecorator(Zone.class, null);
+ String zone = zoneDecorator.toString(individualObservationSamplingContext.getZone());
+ String summary = t("tutti.editSpeciesFrequencies.samplingNeeded.summary", key, nbForOperationLabel, zone, nbForZoneLabel, nbForCruiseLabel);
+
+ samplingSummaryLabel.setText(summary);
+ }
+
+ /**
+ * Returns the number of selected rows.
+ *
+ * @return the number of selected rows, 0 if no rows are selected
+ */
+ private int getSelectedRowCount(ListSelectionModel selectionModel) {
+ int iMin = selectionModel.getMinSelectionIndex();
+ int iMax = selectionModel.getMaxSelectionIndex();
+ int count = 0;
+
+ for (int i = iMin; i <= iMax; i++) {
+ if (selectionModel.isSelectedIndex(i)) {
+ count++;
+ }
+ }
+ return count;
+ }
+
+
+ private String getLabelForSamplingNumber(int value, Integer max) {
+
+ return "<strong>" + infiniteDecorator.toString(value) + "</strong> (" + infiniteDecorator.toString(max) + ")";
+ }
+}
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 ebe8de6..926a62c 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
@@ -25,33 +25,30 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency;
*/
import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
-import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition;
import fr.ifremer.tutti.persistence.entities.protocol.Zone;
import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
import fr.ifremer.tutti.persistence.entities.referential.Species;
-import fr.ifremer.tutti.service.DecoratorService;
import fr.ifremer.tutti.service.cruise.CruiseCache;
+import fr.ifremer.tutti.service.sampling.CalcifiedPiecesSamplingAlgorithmEntryNotFoundException;
import fr.ifremer.tutti.service.sampling.CruiseSamplingCache;
+import fr.ifremer.tutti.service.sampling.IndividualObservationSamplingStatus;
import fr.ifremer.tutti.service.sampling.SamplingCodeCache;
import fr.ifremer.tutti.service.sampling.SamplingCodePrefix;
-import fr.ifremer.tutti.service.sampling.SamplingEvent;
-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;
-import fr.ifremer.tutti.util.Numbers;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.decorator.Decorator;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.Closeable;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
import java.util.Set;
import java.util.TreeSet;
-import static org.nuiton.i18n.I18n.t;
-
/**
* Cache des observations individuelles.
*
@@ -66,27 +63,26 @@ public class IndividualObservationUICache implements Closeable {
/** Logger. */
private static final Log log = LogFactory.getLog(IndividualObservationUICache.class);
- private final SamplingListener samplingListener;
- private final CruiseCache cruiseCache;
+ private final CruiseSamplingCache cruiseSamplingCache;
private final SamplingCodeCache samplingCodeCache;
+
+ private final boolean useCruiseSamplingCache;
+ private boolean speciesDefinedInCalcifiedPiecesSampling;
+
private final SpeciesFrequencyUIModel uiModel;
private final IndividualObservationBatchUIModel individualObservationModel;
- private final boolean withSamplingCache;
- private final CruiseSamplingCache cruiseSamplingCache;
- private SpeciesBatchRowModel speciesEditRow;
private FishingOperation fishingOperation;
+ private Zone fishingOperationZone;
+ private SpeciesBatchRowModel speciesEditRow;
private Species species;
- private SpeciesFrequencyUI ui;
-
/**
* Contient les codes de prélèvements qu'on sait non utilisables.
*
* Au chargement de l'écran, on remplit cet ensemble avec les codes des observations individuelles du lot.
*/
private final Set<Integer> samplingCodesNotAvailable = new TreeSet<>();
-
/**
* Contient les codes de prélèvements qu'on sait utilisables.
*
@@ -99,8 +95,7 @@ public class IndividualObservationUICache implements Closeable {
private boolean on;
public IndividualObservationUICache(CruiseCache cruiseCache, SpeciesFrequencyUIModel uiModel) {
- this.cruiseCache = cruiseCache;
- this.withSamplingCache = cruiseCache.useSamplingCache();
+ this.useCruiseSamplingCache = cruiseCache.useSamplingCache();
this.cruiseSamplingCache = cruiseCache.getSamplingCruiseCache().orElse(null);
this.samplingCodeCache = cruiseCache.getSamplingCodeCache();
this.uiModel = uiModel;
@@ -135,45 +130,10 @@ public class IndividualObservationUICache implements Closeable {
}
});
- // Ecoute sur le cache de données pour savoir quand il faut afficher les notifications de prélèvements
- this.samplingListener = new SamplingListener() {
-
- @Override
- public void samplingNeeded(SamplingEvent event) {
-
- if (uiModel.isCanDisplayNotifications()) {
- CalcifiedPiecesSamplingDefinition cpsDef = event.getCpsDef();
- if (log.isInfoEnabled()) {
- log.info("samplingNeeded for " + cpsDef);
- }
-
- 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,
- nbForCruise, maxByLenghtStep == null ? "∞" : maxByLenghtStep));
- }
-
- ui.getSamplingWarningLabel().setVisible(true);
- }
- }
-
- @Override
- public void summaryUpdated(SamplingEvent event) {
- displaySummary(event);
- }
-
- };
+ }
+ public boolean useCruiseSamplingCache() {
+ return useCruiseSamplingCache;
}
public void init(SpeciesFrequencyUI ui, SpeciesBatchRowModel speciesEditRow, FishingOperation fishingOperation, List<IndividualObservationBatchRowModel> individualObservationRows) {
@@ -183,12 +143,19 @@ public class IndividualObservationUICache implements Closeable {
Objects.requireNonNull(speciesEditRow.getSpecies());
Objects.requireNonNull(fishingOperation);
- this.ui = ui;
this.speciesEditRow = speciesEditRow;
this.species = speciesEditRow.getSpecies();
this.fishingOperation = fishingOperation;
- if (withSamplingCache) {
- cruiseSamplingCache.addSamplingListener(samplingListener);
+ if (useCruiseSamplingCache) {
+
+ // calcule de la zone associée à l'opération de pêche
+
+ Optional<Zone> optionalZone = cruiseSamplingCache.tryFindZone(fishingOperation);
+ fishingOperationZone = optionalZone.orElse(null);
+
+ // est-ce que l'espèce du lot existe dans l'algortihme des pièces calcifiées
+ speciesDefinedInCalcifiedPiecesSampling = cruiseSamplingCache.isSpeciesDefined(species);
+
}
this.samplingCodesAvailable.clear();
@@ -199,16 +166,34 @@ public class IndividualObservationUICache implements Closeable {
.forEach(individualObservationRow -> addSamplingCodeNotAvailable(individualObservationRow.getSamplingCode()));
}
+ public CruiseSamplingCache getCruiseSamplingCache() {
+ return cruiseSamplingCache;
+ }
+
+ public boolean isFishingOperationWithZone() {
+ return fishingOperationZone != null;
+ }
+
+ public boolean isSpeciesDefinedInCalcifiedPiecesSampling() {
+ return speciesDefinedInCalcifiedPiecesSampling;
+ }
@Override
public void close() {
- this.ui = null;
this.speciesEditRow = null;
this.species = null;
this.fishingOperation = null;
- if (withSamplingCache) {
- cruiseSamplingCache.removeSamplingListener(samplingListener);
- }
+ }
+
+ public IndividualObservationSamplingStatus getIndividualObservationStatus(IndividualObservationBatchRowModel row) throws CalcifiedPiecesSamplingAlgorithmEntryNotFoundException, SizeNotDefinedOnIndividualObservationException, ZoneNotDefinedOnFishingOperationException {
+
+ Float size = row.getSize();
+ return cruiseSamplingCache.getIndividualObservationSamplingStatus(fishingOperation,
+ row,
+ size == null ? null : uiModel.getLengthStepInMm(size),
+ individualObservationModel.getGender(row),
+ individualObservationModel.getMaturityValue(row));
+
}
/**
@@ -250,7 +235,7 @@ public class IndividualObservationUICache implements Closeable {
return;
}
- if (withSamplingCache) {
+ if (useCruiseSamplingCache) {
Boolean maturity = cruiseSamplingCache.getMaturity(species.getReferenceTaxonId(), maturityQualitativeValue);
cruiseSamplingCache.addIndividualObservation(fishingOperation,
@@ -284,7 +269,7 @@ public class IndividualObservationUICache implements Closeable {
return;
}
- if (withSamplingCache) {
+ if (useCruiseSamplingCache) {
Boolean maturity = cruiseSamplingCache.getMaturity(species.getReferenceTaxonId(), maturityQualitativeValue);
int lengthStepInMm = uiModel.getLengthStepInMm(lengthStep);
@@ -351,7 +336,7 @@ public class IndividualObservationUICache implements Closeable {
decrementsSamplingCode(samplingCode);
}
- if (withSamplingCache) {
+ if (useCruiseSamplingCache) {
Boolean maturity = cruiseSamplingCache.getMaturity(species.getReferenceTaxonId(), maturityQualitativeValue);
cruiseSamplingCache.removeIndividualObservation(fishingOperation,
@@ -378,7 +363,7 @@ public class IndividualObservationUICache implements Closeable {
return;
}
- if (withSamplingCache) {
+ if (useCruiseSamplingCache) {
Boolean maturity = cruiseSamplingCache.getMaturity(species.getReferenceTaxonId(), maturityQualitativeValue);
cruiseSamplingCache.removeSampling(fishingOperation,
@@ -445,82 +430,6 @@ public class IndividualObservationUICache implements Closeable {
return samplingCodesAvailable.contains(samplingCode);
}
- public void updateSelectedRow(IndividualObservationBatchRowModel selectedRow) {
-
- SamplingEvent event = null;
-
- if (withSamplingCache && selectedRow != null && selectedRow.withSize()) {
-
- CaracteristicQualitativeValue maturityQualitativeValue = individualObservationModel.getMaturityValue(selectedRow);
- Boolean maturity = cruiseSamplingCache.getMaturity(selectedRow.getSpecies().getReferenceTaxonId(), maturityQualitativeValue);
- int lengthstep = uiModel.getLengthStepInMm(selectedRow.getSize());
-
- event = cruiseSamplingCache.getEventForSummary(fishingOperation, species, maturity, individualObservationModel.getGender(selectedRow), lengthstep).orElse(null);
-
- }
-
- displaySummary(event);
- }
-
- protected void displaySummary(SamplingEvent event) {
-
- if (isInit()) {
- String summary = null;
-
- if (event != null && uiModel.isCanDisplayNotifications()) {
-
- CalcifiedPiecesSamplingDefinition cpsDef = event.getCpsDef();
- if (log.isInfoEnabled()) {
- log.info("displaySummary 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");
- }
- }
- if (event.getZone() != null) {
- Decorator<Zone> zoneDecorator = ui.getHandler().getDecorator(Zone.class, null);
- String zone = zoneDecorator.toString(event.getZone());
- summary = t("tutti.editSpeciesFrequencies.samplingNeeded.summary", key, nbForOperationLabel, zone, nbForZoneLabel, nbForCruiseLabel);
- } else {
- summary = t("tutti.editSpeciesFrequencies.samplingNeeded.summary.noZone", key, nbForOperationLabel, nbForZoneLabel, nbForCruiseLabel);
- }
- }
-
- if (log.isInfoEnabled()) {
- log.info("getSamplingResumeLabel: " + summary);
- }
- ui.getSamplingResumeLabel().setText(summary);
- }
- }
-
- private boolean isInit() {
- return ui != null;
- }
-
- private 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) + ")";
- }
-
public void decrementsSamplingCode(String samplingCode) {
samplingCodeCache.removeSamplingCode(species.getReferenceTaxonId(), samplingCode);
diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss
index cb41d94..948b1d0 100644
--- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss
+++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss
@@ -394,11 +394,7 @@ ComputableDataEditor {
}
#samplingWarningLabel {
- text: "tutti.editSpeciesFrequencies.samplingNeeded.warning";
- visible: false;
opaque: true;
- foreground: {handler.getConfig().getColorHighlightInfoForeground()};
- background: {handler.getConfig().getColorHighlightInfoBackground()};
horizontalAlignment: {SwingConstants.CENTER};
font-size: 16;
border: {BorderFactory.createEmptyBorder(3, 10, 5, 10)};
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 f9049fa..592561c 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
@@ -136,6 +136,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci
protected IndividualObservationBatchTableHandler individualObservationBatchTableHandler;
protected AverageWeightsHistogramHandler averageWeightsHistogramHandler;
protected FrequenciesHistogramHandler frequenciesHistogramHandler;
+ protected IndividualObservationNotificationZoneHandler individualObservationNotificationZoneHandler;
protected Decorator<Caracteristic> caracteristicDecorator;
protected Decorator<Caracteristic> caracteristicTipDecorator;
@@ -480,6 +481,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci
this.individualObservationBatchTableHandler = new IndividualObservationBatchTableHandler(ui);
this.averageWeightsHistogramHandler = new AverageWeightsHistogramHandler(ui);
this.frequenciesHistogramHandler = new FrequenciesHistogramHandler(ui);
+ this.individualObservationNotificationZoneHandler = new IndividualObservationNotificationZoneHandler(ui);
listenValidatorValid(ui.getValidator(), model);
@@ -508,6 +510,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci
IOUtils.closeQuietly(individualObservationBatchTableHandler);
IOUtils.closeQuietly(averageWeightsHistogramHandler);
IOUtils.closeQuietly(frequenciesHistogramHandler);
+ IOUtils.closeQuietly(individualObservationBatchTableHandler);
// resetSamplingLabel();
@@ -644,7 +647,9 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci
loadFrequenciesAndObservations(frequency, individualObservations);
- individualObservationBatchTableHandler.initObservationsCache(frequencyEditor.getEditRow(), getDataContext().getFishingOperation());
+ individualObservationBatchTableHandler.initObservationsCache(speciesBatch, getDataContext().getFishingOperation());
+
+ individualObservationNotificationZoneHandler.editBatch(speciesBatch);
// individualObservationUICache.init(ui, frequencyEditor.getEditRow(), getDataContext().getFishingOperation(), model.getRows());
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 f7e654d..a1df422 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
@@ -1651,6 +1651,7 @@ tutti.editSpeciesFrequencies.samplingNeeded.resume.noZone=
tutti.editSpeciesFrequencies.samplingNeeded.summary=
tutti.editSpeciesFrequencies.samplingNeeded.summary.noZone=
tutti.editSpeciesFrequencies.samplingNeeded.warning=
+tutti.editSpeciesFrequencies.samplingTotalCountAttained.warning=
tutti.editSpeciesFrequencies.simpleCountingAndFrequencies=
tutti.editSpeciesFrequencies.table.header.lengthStep=
tutti.editSpeciesFrequencies.table.header.number=
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 a99f983..4f46f12 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
@@ -1534,7 +1534,8 @@ 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=<html><body><strong>Prélevez les pièces calcifiées \!</body></html>
+tutti.editSpeciesFrequencies.samplingNeeded.warning=
+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
tutti.editSpeciesFrequencies.table.header.number=Nombre
--
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm(a)codelutin.com>.
1
0