branch feature/ecran_obs_individuelles updated (be0ac0e -> cf52df3)
This is an automated email from the git hooks/post-receive script. New change to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git discards be0ac0e - copie des donnees d'observation individuelles dans le tableau des mensurations en fonction du mode - suppression ou ecrasement des données au changement de mode de copie refs #8019 discards a9c22e9 use lanbdas where possible discards 815f48c - ajout du numéro de l'observation - suppression d'observations refs #8019 discards f600d0c ajout d'une ligne d'observation individuelle quand on ajoute en rafale (refs #8019) discards bed9756 graph des poids moyens (refs #8019) discards 6a26e7b titre de la popup de l'histogramme (refs #8019) discards 47891d3 une seule popup pour l'histogramme pour pouvoir la fermer quand on quitte (refs #8019) discards 2e5ab37 vérification que le poids saisi est proche du poids calculé avec la RTP (refs #8019) discards 6c3ee17 utilisation des rtp pour calculer les poids des lignes de mensuration (refs #8019) discards 02b0ee4 affichage de l'histogramme dans une popup (refs #8019) discards df1825b - suppression de l'onglet observations individuelles dans la capture - ajout des lignes dans la table d'obs individuelles dans les mensurations (refs #8019) discards aa1354f activtation ou desactivation de cellules de la tables des mensurations en fonction du mode de copie (refs #6926) discards a90fe9c organize imports discards 5de9cd8 ajout du model de colonnes de la table des observations (refs #6926) discards 3a3bdac - use jaxx 2.29-SNAPSHOT - correction du mode de config à l'ouverture de l'écran - ajout de useRTP dans le modele refs #6926 discards 3bd5e2e mise en page de l'écran refs #6926 discards 065fdd7 début de réarrangement de l'écran des mensurations refs #6926 adds 4ff1062 Simplification du code de calcul du raising factor final adds e5b5506 Ajout d'un test pour vérifier le calcul du raising factor final adds b68bfe7 Ajout méthode pour récupérer la dernière catégorie renseignée adds 8521235 Utilisation des bonnes catégories pour compléter le sampleWeight (utilisé pour le calcul du raising factor final) adds 1fe175a Fixes #7992 Merge branch 'feature/7992_erreur_calcul_coef_final' into develop adds fad5ce9 Utilisation des bonnes catégories pour compléter le sampleWeight (utilisé pour le calcul du raising factor final) adds c413e57 on ne pousse que les heures et les minutes quand on appelle set...Time (fixes #7996) adds 36d483b Fixes #7996 Merge branch 'feature/7996' into develop adds 39656ac Use pom 7-SNAPSHOT adds 463a07a Début de correction mais il me faut une confirmation de Vincent sur le sujet adds c796f8c Fix test values adds dee8e16 Ajout de nouveaux tests sur le calcul du RF final adds 3f598ad Bien tenir compte de la sous fraction dans le cas de mensurations s'il y a un sous-échantillonage (See #8014) adds f5449e2 Merge branch 'feature/8014' into 'develop' adds 85b0363 Use codelutinpom 7 adds caa6781 Do not use https for project url adds ca7d26b Mise à jour du guide utilisateur adds 27ed7e0 3. ajouter colonne « observations individuelles ». Cette case ne peut être cochée que si « méthode de mensuration » est renseignée refs #8013 adds 1e2aa09 4. ajouter colonne « maturité » et pour chaque taxon proposer liste psfm pour pointer sur l'échelle de maturité adaptée au taxon refs #8013 adds ddf9722 - suppression des colonnes dénombrement et pièces caclifiées - ajout de la colonne type de piece calcifiée refs #8013 adds 2381cf1 wording (refs #8013) adds 523e218 migration du protocole (refs #8013) adds c6bba11 cocher maturité dans l'éditeur de pieces calcifiées si l'espèce sélectionnée a un pmfm de maturité (refs #8013) adds 87cb8c1 Il faut n'autoriser que les taxons dont on a une méthode de mensuration renseigner et du coup il faut aussi demander une confirmation à l'utilisateur si il veut supprimer la méthode de mensuration dans l'onglet espèces (ou benthos) car cela va supprimer des lignes dans l'onglet algo (refs #8013) adds 1a9cd1e ajout du highlighter sur la table des cps (refs #8013) adds 9e44081 coorection de la validité des lignes (refs #8013) adds 370751c test que l'espèce a une méthode de mensuration à l'import de l'algo de pieces calcifiees (refs #8013) adds 883d2f9 modif du nom par défaut des fichiers d'export (refs #8013) adds ad65665 - correction de l'import / export - correction des tests (fixes #8013) adds f3d31f7 wording adds 7d8e1ee correction de la version courante du protocole (fixes #8013) adds ede141d Changement de l'ordre des colonnes dans l'onglet espèces et benthos adds 295d098 Ajout de méthode withXXX sur SpeciesProtocol + bien modifier le modèle global lors d'une modification du tableau des espèces des pièces calcifiées adds 041d0ec Wording toi même! adds a0118c9 Suppression des annotation de génération sur du code non généré adds f5ccf41 Fixes #8013 Merge branch 'feature/8013' into develop adds 7ef3920 Correction du poids total espèce vivant non détaillé trié non exporté (see #8022) adds dbdd317 Correction du poids total espèce vrac non exporté (see #8022) adds 441e785 fixes #8022 Merge branch 'feature/8022' into develop adds dc9b003 [jgitflow-maven-plugin]updating develop poms to master versions to avoid merge conflicts adds 6d7f9a0 [jgitflow-maven-plugin]updating poms for 4.5-alpha-1 branch with snapshot versions adds 809bcd9 Add missing license headers adds 1ef3936 [jgitflow-maven-plugin]updating poms for branch'release/4.5-alpha-1' with non-snapshot versions adds 43e9096 [jgitflow-maven-plugin]merging 'release/4.5-alpha-1' into 'master' adds 0882928 [jgitflow-maven-plugin]merging 'master' into 'develop' adds d65d8e3 [jgitflow-maven-plugin]Updating develop poms back to pre merge state new 34425f8 début de réarrangement de l'écran des mensurations refs #6926 new c8938cb mise en page de l'écran refs #6926 new fac69d8 - use jaxx 2.29-SNAPSHOT - correction du mode de config à l'ouverture de l'écran - ajout de useRTP dans le modele refs #6926 new 998f893 ajout du model de colonnes de la table des observations (refs #6926) new 9ad8c03 organize imports new 47f37ea activtation ou desactivation de cellules de la tables des mensurations en fonction du mode de copie (refs #6926) new c7698c5 - suppression de l'onglet observations individuelles dans la capture - ajout des lignes dans la table d'obs individuelles dans les mensurations (refs #8019) new aad6735 affichage de l'histogramme dans une popup (refs #8019) new ee48c20 utilisation des rtp pour calculer les poids des lignes de mensuration (refs #8019) new 948d32d vérification que le poids saisi est proche du poids calculé avec la RTP (refs #8019) new c15557b une seule popup pour l'histogramme pour pouvoir la fermer quand on quitte (refs #8019) new 95f1e47 titre de la popup de l'histogramme (refs #8019) new ce716ac graph des poids moyens (refs #8019) new c7901d3 ajout d'une ligne d'observation individuelle quand on ajoute en rafale (refs #8019) new e980ec1 - ajout du numéro de l'observation - suppression d'observations refs #8019 new f1b29ce use lanbdas where possible new cf52df3 - copie des donnees d'observation individuelles dans le tableau des mensurations en fonction du mode - suppression ou ecrasement des données au changement de mode de copie refs #8019 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 (be0ac0e) \ N -- N -- N refs/heads/feature/ecran_obs_individuelles (cf52df3) 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 17 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 cf52df320c4fa37faba9e9f2c0b2022dfb49f183 Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 29 16:04:42 2016 +0100 - copie des donnees d'observation individuelles dans le tableau des mensurations en fonction du mode - suppression ou ecrasement des données au changement de mode de copie refs #8019 commit f1b29ce6ba2f02c866567e2c6435cbc9f5be16c4 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 16:35:25 2016 +0100 use lanbdas where possible commit e980ec1bd35ce9a6777aa74e7f1b8e98e660005d Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 16:23:13 2016 +0100 - ajout du numéro de l'observation - suppression d'observations refs #8019 commit c7901d33fd3c2c87093bff68c9a923fc1d028d10 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 14:20:21 2016 +0100 ajout d'une ligne d'observation individuelle quand on ajoute en rafale (refs #8019) commit ce716ac883cf6b7aedcfcf7a27ff962a0f1c5eb3 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 11:35:29 2016 +0100 graph des poids moyens (refs #8019) commit 95f1e478713c4499d7ba70d0213d4d91428ed2ce Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 10:02:50 2016 +0100 titre de la popup de l'histogramme (refs #8019) commit c15557b50da0a2e1aa3c2556e1f9b198fea8c672 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 18:53:22 2016 +0100 une seule popup pour l'histogramme pour pouvoir la fermer quand on quitte (refs #8019) commit 948d32d0b05d2c75c3a1cb470f9a8dc511a2f829 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 18:31:22 2016 +0100 vérification que le poids saisi est proche du poids calculé avec la RTP (refs #8019) commit ee48c200b8962663e81503f3fda6761b6e2faf09 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 17:43:35 2016 +0100 utilisation des rtp pour calculer les poids des lignes de mensuration (refs #8019) commit aad67356d2f22799d008d5b189b04a5ea0bc89f0 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 14:24:41 2016 +0100 affichage de l'histogramme dans une popup (refs #8019) commit c7698c5ff48c63f5b41fbaec3eade4035ce4fb5b Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 11:35:02 2016 +0100 - suppression de l'onglet observations individuelles dans la capture - ajout des lignes dans la table d'obs individuelles dans les mensurations (refs #8019) commit 47f37eacb5e5dab3ac86b7447567aa74e80d7a5a Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 23 09:31:57 2016 +0100 activtation ou desactivation de cellules de la tables des mensurations en fonction du mode de copie (refs #6926) commit 9ad8c03d92824d83ecbe0eaf706fbe81ad13653c Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 22 14:30:13 2016 +0100 organize imports commit 998f89331ed84717af00e5aa5349df7cd933f2e4 Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 22 14:25:37 2016 +0100 ajout du model de colonnes de la table des observations (refs #6926) commit fac69d8b8c95934bdb33bdc117b1018b7fb61fc9 Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 22 10:32:05 2016 +0100 - use jaxx 2.29-SNAPSHOT - correction du mode de config à l'ouverture de l'écran - ajout de useRTP dans le modele refs #6926 commit c8938cb54bd762b60d9ae98b16eb213fc38e0411 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 19 15:09:16 2016 +0100 mise en page de l'écran refs #6926 commit 34425f8d30b0f0ea82cf975584b5b76472fd1e83 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 18 18:04:43 2016 +0100 début de réarrangement de l'écran des mensurations refs #6926 Summary of changes: .gitignore | 12 +- README.txt => README.md | 0 pom.xml | 7 +- src/site/site_fr.xml | 2 + .../README.txt => tutti-ichtyometer/README.md | 0 tutti-persistence/{README.txt => README.md} | 0 .../entities/protocol/SpeciesProtocolBean.java | 14 + .../entities/protocol/TuttiProtocols.java | 107 +++- .../entities/protocol/v1/SpeciesProtocol1.java | 5 +- .../entities/protocol/v1/SpeciesProtocolBean1.java | 5 +- .../entities/protocol/v1/TuttiProtocol1.java | 4 +- .../entities/protocol/v1/TuttiProtocolBean1.java | 4 +- .../entities/protocol/v2/TuttiProtocol2.java | 4 +- .../entities/protocol/v2/TuttiProtocolBean2.java | 2 - .../entities/protocol/v3/SpeciesProtocol3.java | 172 ++++++ .../entities/protocol/v3/SpeciesProtocolBean3.java | 182 +++--- .../entities/protocol/v3/TuttiProtocol3.java | 260 +++++++++ .../entities/protocol/v3/TuttiProtocolBean3.java | 620 +++++++++++++++++++++ .../src/main/xmi/tutti-persistence.zargo | Bin 62059 -> 62284 bytes .../entities/protocol/TuttiProtocolsTest.java | 20 - .../ProtocolPersistenceServiceReadTest.java | 6 - .../ProtocolPersistenceServiceWriteTest.java | 9 +- .../README.txt => tutti-report-generator/README.md | 0 tutti-service/{README.txt => README.md} | 0 .../catches/ValidateCruiseOperationsService.java | 4 +- .../tutti/service/genericformat/csv/CatchRow.java | 21 + .../service/genericformat/csv/OperationRow.java | 6 +- .../producer/CsvProducerForCatch.java | 73 ++- .../protocol/CalcifiedPiecesSamplingRow.java | 24 + .../protocol/CalcifiedPiecesSamplingRowModel.java | 24 + .../protocol/ProtocolImportExportService.java | 2 +- .../ifremer/tutti/service/protocol/SpeciesRow.java | 16 - .../tutti/service/protocol/SpeciesRowModel.java | 6 +- .../GenericFormatExportServiceAno7992Test.java | 217 ++++++++ .../protocol/ProtocolImportExportServiceTest.java | 52 +- .../resources/genericFormat/ano7992.tuttiProtocol | 249 +++++++++ .../README.txt => tutti-ui-swing-updater/README.md | 0 .../README.txt => tutti-ui-swing/README.md | 0 .../filtered-resources/tutti-help-fr.properties | 23 + .../help/Guide_utilisation_Allegro_Campagne.pdf | Bin 1996569 -> 1988880 bytes .../operation/EditFishingOperationUIHandler.java | 2 +- .../operation/EditFishingOperationUIModel.java | 20 +- .../content/operation/catches/BatchSavedEvent.java | 24 + .../operation/catches/BatchSavedListener.java | 24 + .../create/CreateBenthosBatchUIHandler.java | 2 +- .../create/CreateSpeciesBatchUIHandler.java | 2 +- .../protocol/EditProtocolSpeciesRowModel.java | 99 +++- .../protocol/EditProtocolSpeciesTableModel.java | 27 +- .../content/protocol/EditProtocolUIHandler.java | 157 +++++- .../content/protocol/EditProtocolUIModel.java | 12 + .../protocol/actions/AddBenthosProtocolAction.java | 3 +- .../protocol/actions/AddSpeciesProtocolAction.java | 3 +- .../actions/ExportAllCaracteristicAction.java | 2 +- .../actions/ExportProtocolBenthosAction.java | 2 +- .../actions/ExportProtocolCaracteristicAction.java | 2 +- .../actions/ExportProtocolSpeciesAction.java | 2 +- .../protocol/actions/ExportPupitriAction.java | 2 +- .../actions/RemoveBenthosProtocolAction.java | 25 +- .../actions/RemoveSpeciesProtocolAction.java | 26 +- .../protocol/actions/SaveProtocolAction.java | 19 - .../CalcifiedPiecesSamplingEditorRowModel.java | 24 + .../CalcifiedPiecesSamplingEditorTableModel.java | 25 + .../CalcifiedPiecesSamplingEditorUI.jaxx | 23 + .../CalcifiedPiecesSamplingEditorUIHandler.java | 39 ++ .../MinSizePopupUIModel.java | 24 + .../actions/AddSpeciesAction.java | 24 + .../actions/DeleteRowAction.java | 24 + .../actions/DeleteSpeciesAction.java | 24 + .../actions/ExportProtocolCpsAction.java | 2 +- .../actions/ImportProtocolCpsAction.java | 1 + .../actions/SplitSpeciesAction.java | 24 + .../content/protocol/rtp/RtpEditorUIModel.java | 2 +- .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 23 + .../protocol/zones/ZoneEditorUIHandler.java | 24 + .../protocol/zones/actions/AddStratasAction.java | 24 + .../CollapseAvailableStratasTreeAction.java | 24 + .../zones/actions/CollapseZonesTreeAction.java | 24 + .../protocol/zones/actions/CreateZoneAction.java | 24 + .../protocol/zones/actions/DeleteZoneAction.java | 24 + .../actions/ExpandAvailableStratasTreeAction.java | 24 + .../zones/actions/ExpandZonesTreeAction.java | 24 + .../zones/actions/RemoveStratasAction.java | 24 + .../protocol/zones/actions/RenameZoneAction.java | 24 + .../protocol/zones/models/StrataUIModel.java | 24 + .../protocol/zones/models/SubStrataUIModel.java | 24 + .../content/protocol/zones/models/ZoneUIModel.java | 24 + .../zones/tree/AbstractZoneEditorTreeModel.java | 24 + .../content/protocol/zones/tree/StrataNode.java | 24 + .../protocol/zones/tree/StratasTreeModel.java | 24 + .../content/protocol/zones/tree/SubStrataNode.java | 24 + .../protocol/zones/tree/ZoneEditorNode.java | 24 + .../zones/tree/ZoneEditorTreeCellRenderer.java | 24 + .../content/protocol/zones/tree/ZoneNode.java | 24 + .../protocol/zones/tree/ZonesTreeModel.java | 24 + .../MinSizePopupUIModel-error-validation.xml | 23 + .../resources/i18n/tutti-ui-swing_en_GB.properties | 8 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 15 +- 97 files changed, 3004 insertions(+), 412 deletions(-) rename README.txt => README.md (100%) rename tutti-ui-swing/README.txt => tutti-ichtyometer/README.md (100%) rename tutti-persistence/{README.txt => README.md} (100%) create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v3/SpeciesProtocol3.java copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java => tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v3/SpeciesProtocolBean3.java (62%) create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v3/TuttiProtocol3.java create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v3/TuttiProtocolBean3.java rename tutti-ui-swing-updater/README.txt => tutti-report-generator/README.md (100%) rename tutti-service/{README.txt => README.md} (100%) create mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportServiceAno7992Test.java create mode 100644 tutti-service/src/test/resources/genericFormat/ano7992.tuttiProtocol rename tutti-report-generator/README.txt => tutti-ui-swing-updater/README.md (100%) rename tutti-ichtyometer/README.txt => tutti-ui-swing/README.md (100%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit 34425f8d30b0f0ea82cf975584b5b76472fd1e83 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 18 18:04:43 2016 +0100 début de réarrangement de l'écran des mensurations refs #6926 --- .../entities/protocol/TuttiProtocols.java | 4 +- tutti-ui-swing/src/license/THIRD-PARTY.properties | 2 +- .../filtered-resources/tutti-help-fr.properties | 3 +- .../catches/FrequencyConfigurationMode.java | 5 +- .../species/frequency/SpeciesFrequencyUI.jaxx | 295 +++++++++++---------- .../species/frequency/SpeciesFrequencyUI.jcss | 66 +++-- .../frequency/SpeciesFrequencyUIHandler.java | 2 +- .../species/frequency/SpeciesFrequencyUIModel.java | 40 ++- .../resources/i18n/tutti-ui-swing_en_GB.properties | 10 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 16 +- 10 files changed, 266 insertions(+), 177 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java index 856c34f..cf4fe14 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java @@ -119,8 +119,8 @@ public class TuttiProtocols extends AbstractTuttiProtocols { } } catch (Exception e) { - if (log.isInfoEnabled()) { - log.info("Protocol needs to be migrated", e); + if (log.isErrorEnabled()) { + log.error("Error loading protocol, try to migrate", e); } result = migrateProtocol(file); diff --git a/tutti-ui-swing/src/license/THIRD-PARTY.properties b/tutti-ui-swing/src/license/THIRD-PARTY.properties index 901091a..f285228 100644 --- a/tutti-ui-swing/src/license/THIRD-PARTY.properties +++ b/tutti-ui-swing/src/license/THIRD-PARTY.properties @@ -18,7 +18,7 @@ # - GNU General Public License - Version 2 with the class path exception # - GNU General Public License, Version 2 with the Classpath Exception # - GNU Lesser General Public Licence -# - GNU Lesser General Public License (LGPL), version 2.1 +# - GNU Lesser General Public License (LGPL), version 2.1 or later # - GNU Lesser Public License # - GNU Library or Lesser General Public License # - General Public License (GPL) diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index 2bdadf9..7940240 100644 --- a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties +++ b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties @@ -22,7 +22,6 @@ # #L% ### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Mon Feb 08 23:54:51 CET 2016 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -326,10 +325,12 @@ tutti.editSpeciesFrequencies.action.generate.help=editFishingOperation.html\#cap tutti.editSpeciesFrequencies.action.reset.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndClose.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndContinue.help=editFishingOperation.html\#captureEspecesMensurationActions +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.help= tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.maxStep.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.minStep.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.mode.autoGen.help=editFishingOperation.html\#captureEspecesMensurationFields +tutti.editSpeciesFrequencies.field.mode.frequencyMode.help= tutti.editSpeciesFrequencies.field.mode.rafale.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.mode.simple.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.mode.simpleCounting.help=editFishingOperation.html\#captureEspecesMensurationFields diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/FrequencyConfigurationMode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/FrequencyConfigurationMode.java index e15f303..f5fcfad 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/FrequencyConfigurationMode.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/FrequencyConfigurationMode.java @@ -29,7 +29,8 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches; * @since 3.0 */ public enum FrequencyConfigurationMode { + SIMPLE_COUNTING, + FREQUENCIES, AUTO_GEN, - RAFALE, - SIMPLE_COUNTING + RAFALE } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx index f9a7941..d4d6852 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx @@ -81,80 +81,24 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { <SaveAndCloseSpeciesFrequencyAction id="saveAndCloseAction" constructorParams="this"/> <SaveAndContinueSpeciesFrequencyAction id="saveAndContinueAction" constructorParams="this"/> - <JPanel id='configurationPanel' layout='{new BorderLayout()}' constraints='BorderLayout.NORTH'> - - <VBox id='modePanel' constraints='BorderLayout.WEST' verticalAlignment='{SwingConstants.CENTER}'> - <JRadioButton id='autoGenModeButton' - onActionPerformed='model.setConfigurationMode(FrequencyConfigurationMode.AUTO_GEN)'/> - <JRadioButton id='rafaleModeButton' - onActionPerformed='model.setConfigurationMode(FrequencyConfigurationMode.RAFALE)'/> - <JRadioButton id='simpleCountingModeButton' - onActionPerformed='model.setConfigurationMode(FrequencyConfigurationMode.SIMPLE_COUNTING)'/> - </VBox> - - <JPanel id='modeConfigurationPanel' constraints='BorderLayout.CENTER'> - <JPanel id='autoGenModePanel' constraints='"autoGenMode"'> - <Table fill='both' constraints='BorderLayout.SOUTH'> - <!-- Min step--> - <row> - <cell anchor='west'> - <JLabel id='minStepLabel'/> - </cell> - <cell weightx='1.0'> - <NumberEditor id='minStepField' constructorParams='this'/> - </cell> - </row> - <!-- Max step--> - <row> - <cell anchor='west'> - <JLabel id='maxStepLabel'/> - </cell> - <cell weightx='1.0'> - <NumberEditor id='maxStepField' constructorParams='this'/> - </cell> - </row> - <!-- Actions --> - <row> - <cell columns='2'> - <JPanel layout='{new GridLayout(1, 0)}'> - <JButton id='generateButton'/> - </JPanel> - </cell> - </row> - </Table> - </JPanel> - <JPanel id='rafaleModePanel' constraints='"rafaleMode"'> - <Table fill='both' constraints='BorderLayout.SOUTH'> - <!-- Rafale step--> - <row> - <cell weightx='1.0'> - <JLabel id='rafaleStepLabel'/> - </cell> - </row> - <row> - <cell weightx='1.0'> - <NumberEditor id='rafaleStepField' constructorParams='this'/> - </cell> - </row> - </Table> - </JPanel> - <JPanel id='simpleCountingModePanel' constraints='"simpleCountingMode"' layout='{new BorderLayout()}'> - <JLabel id='simpleCountingModeLabel' constraints='BorderLayout.CENTER'/> - </JPanel> - </JPanel> - - <Table id="lengthstepSettingsBlock" fill='both' constraints='BorderLayout.SOUTH'> - <row> - <cell columns='6'> - <JSeparator/> - </cell> - </row> - <!-- length step caracteristic --> - <row> - <cell anchor='west'> + <Table id='configurationPanel' fill="both" anchor="west" constraints='BorderLayout.CENTER'> + + <row> + + <cell weightx="1"> + <HBox id='frequencyModePanel' horizontalAlignment='{SwingConstants.LEFT}'> + <JRadioButton id='simpleCountingModeButton' + onActionPerformed='model.setConfigurationMode(FrequencyConfigurationMode.SIMPLE_COUNTING)'/> + <JRadioButton id='frequencyModeButton' + onActionPerformed='model.setConfigurationMode(FrequencyConfigurationMode.FREQUENCIES)'/> + </HBox> + </cell> + + <cell> + + <!-- length step caracteristic --> + <HBox id="lengthStepCaracteristicPanel" styleClass="visibleIfFrequencies"> <JLabel id='lengthStepCaracteristicLabel'/> - </cell> - <cell weightx='1.0' columns='5'> <JPanel layout='{new BorderLayout()}'> <BeanFilterableComboBox id='lengthStepCaracteristicComboBox' constructorParams='this' @@ -162,72 +106,151 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { constraints='BorderLayout.CENTER'/> <JButton id='addLengthStepCaracteristicButton' constraints='BorderLayout.EAST'/> </JPanel> - </cell> - </row> - <!-- Step --> - <row> - <cell anchor='west'> <JLabel id='stepLabel'/> - </cell> - <cell weightx='1.0'> <NumberEditor id='stepField' constructorParams='this'/> - </cell> - <cell anchor='west'> - <JLabel id='totalNumberLabel'/> - </cell> - <cell weightx='1.0'> - <JTextField id='totalNumberField'/> - </cell> - <cell anchor='west'> - <JLabel id='totalWeightLabel'/> - </cell> - <cell weightx='1.0'> - <ComputableDataEditor id='totalWeightField' genericType="Float" constructorParams='this'/> - </cell> - </row> - </Table> - </JPanel> + </HBox> - <JPanel id='dataFieldPanel' constraints='BorderLayout.CENTER'> - <JSplitPane constraints='"lengthCaracteristicPmfm"' id="firstSplitPane"> - <JSplitPane id="secondSplitPane"> - <JScrollPane id='logsScrollPane'> - <JXTable id='logsTable'/> - </JScrollPane> - <JScrollPane id='tableScrollPane'> - <JXTable id='table'/> - </JScrollPane> - </JSplitPane> - <JPanel id="histogramPanel" layout="{new BorderLayout()}"> - </JPanel> - </JSplitPane> - - <Table constraints='"noLengthCaracteristicPmfm"' fill='horizontal'> - <row> - <cell columns='2'> - <JPanel id='dataInFrequenciesWarningContainer' layout='{new BorderLayout(10, 10)}'> - <JLabel id='dataInFrequenciesWarning' constraints='BorderLayout.CENTER'/> - </JPanel> - </cell> - </row> - <row> - <cell> - <JLabel id='simpleCountingNumberLabel'/> - </cell> - <cell weightx='1'> - <NumberEditor id='simpleCountingNumberField' constructorParams='this'/> - </cell> - </row> - <row> - <cell> - <JLabel id='simpleCountingWeightLabel'/> - </cell> - <cell weightx='1'> - <NumberEditor id='simpleCountingWeightField' constructorParams='this'/> - </cell> - </row> - </Table> - </JPanel> + </cell> + + <cell rows="3" weightx="10"> + <JPanel id="histogramPanel" layout="{new BorderLayout()}" styleClass="visibleIfFrequencies"/> + </cell> + </row> + + <row> + <cell columns="2"> + <JSeparator styleClass="visibleIfFrequencies" /> + </cell> + </row> + + <row> + <cell columns="2"> + <Table styleClass="visibleIfFrequencies"> + <row> + <cell> + <VBox id='modePanel' verticalAlignment='{SwingConstants.CENTER}'> + <JRadioButton id='autoGenModeButton' + onActionPerformed='model.setFrequenciesConfigurationMode(FrequencyConfigurationMode.AUTO_GEN)'/> + <JRadioButton id='rafaleModeButton' + onActionPerformed='model.setFrequenciesConfigurationMode(FrequencyConfigurationMode.RAFALE)'/> + </VBox> + </cell> + + <cell> + <JPanel id='modeConfigurationPanel'> + <Table id='autoGenModePanel' fill='both' constraints='"autoGenMode"'> + <!-- Min step--> + <row> + <cell anchor='west'> + <JLabel id='minStepLabel'/> + </cell> + <cell weightx='1.0'> + <NumberEditor id='minStepField' constructorParams='this'/> + </cell> + </row> + <!-- Max step--> + <row> + <cell anchor='west'> + <JLabel id='maxStepLabel'/> + </cell> + <cell weightx='1.0'> + <NumberEditor id='maxStepField' constructorParams='this'/> + </cell> + </row> + <!-- Actions --> + <row> + <cell columns='2'> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='generateButton'/> + </JPanel> + </cell> + </row> + </Table> + <Table id='rafaleModePanel' fill='both' constraints='"rafaleMode"'> + <!-- Rafale step--> + <row> + <cell weightx='1.0'> + <JLabel id='rafaleStepLabel'/> + </cell> + </row> + <row> + <cell weightx='1.0'> + <NumberEditor id='rafaleStepField' constructorParams='this'/> + </cell> + </row> + </Table> + </JPanel> + </cell> + + <cell weightx="1"> + <JLabel id="samplingWarningLabel"/> + </cell> + </row> + </Table> + </cell> + </row> + + <row> + <cell columns="3"> + <JSeparator styleClass="visibleIfFrequencies" /> + </cell> + </row> + + <row weighty="1"> + <cell columns="3"> + <JPanel id='dataFieldPanel'> + <JSplitPane constraints='"lengthCaracteristicPmfm"' id="firstSplitPane"> + <JPanel layout="{new BorderLayout()}"> + <HBox id="lengthstepSettingsBlock" constraints='BorderLayout.NORTH'> + <!-- Step --> + <JLabel id='totalNumberLabel'/> + <JTextField id='totalNumberField'/> + <JLabel id='totalWeightLabel'/> + <ComputableDataEditor id='totalWeightField' genericType="Float" constructorParams='this'/> + </HBox> + <JSplitPane id="secondSplitPane" constraints='BorderLayout.CENTER'> + <JScrollPane id='logsScrollPane'> + <JXTable id='logsTable'/> + </JScrollPane> + <JScrollPane id='tableScrollPane'> + <JXTable id='table'/> + </JScrollPane> + </JSplitPane> + </JPanel> + <JScrollPane id='obsPanel'> + <JXTable id='obsTable'/> + </JScrollPane> + </JSplitPane> + + <Table id="simpleCountingNumberPanel" constraints='"noLengthCaracteristicPmfm"' fill='horizontal'> + <row> + <cell columns='2'> + <JPanel id='dataInFrequenciesWarningContainer' layout='{new BorderLayout(10, 10)}'> + <JLabel id='dataInFrequenciesWarning' constraints='BorderLayout.CENTER'/> + </JPanel> + </cell> + </row> + <row> + <cell> + <JLabel id='simpleCountingNumberLabel'/> + </cell> + <cell weightx='1'> + <NumberEditor id='simpleCountingNumberField' constructorParams='this'/> + </cell> + </row> + <row> + <cell> + <JLabel id='simpleCountingWeightLabel'/> + </cell> + <cell weightx='1'> + <NumberEditor id='simpleCountingWeightField' constructorParams='this'/> + </cell> + </row> + </Table> + </JPanel> + </cell> + </row> + </Table> <!-- actions --> <JPanel id='actionPanel' layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH' styleClass="buttonPanel"> 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 3b4a877..b22a514 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 @@ -42,6 +42,10 @@ ComputableDataEditor { computedDataColor: {handler.getConfig().getColorComputedWeights()}; } +.visibleIfFrequencies { + visible: {!model.isSimpleCountingMode()}; +} + #editSpeciesFrequenciesTopPanel { _help: {"tutti.editSpeciesFrequencies.help"}; } @@ -151,16 +155,22 @@ ComputableDataEditor { _help: {"tutti.editSpeciesFrequencies.field.rafaleStep.help"}; } +#samplingWarningLabel { + foreground: {Color.RED}; + text: "Prélèvement"; +} + #configurationPanel { border: {new TitledBorder(null, null)}; } #modeConfigurationLayout { - selected: {String.valueOf(mode.getSelectedValue())}; + selected: {String.valueOf(frequenciesMode.getSelectedValue())}; } #modeConfigurationPanel { - layout: {modeConfigurationLayout}; + layout: {modeConfigurationLayout}; + border: {new TitledBorder(null, null)}; } #simpleCountingModeLabel { @@ -210,6 +220,10 @@ ComputableDataEditor { enabled: {model.getLengthStepCaracteristic() != null && model.getStep() > 0f}; } +#simpleCountingNumberPanel { + border: { new TitledBorder(null, null) }; +} + #simpleCountingNumberLabel { text: "tutti.editSpeciesFrequencies.field.simpleCountingNumber"; toolTipText: "tutti.editSpeciesFrequencies.field.simpleCountingNumber.tip"; @@ -251,36 +265,46 @@ ComputableDataEditor { text: "tutti.editSpeciesFrequencies.simpleCountingAndFrequencies"; } +#simpleCountingModeButton { + text: "tutti.editSpeciesFrequencies.field.mode.simpleCounting"; + toolTipText: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.mnemonic"; + value: "simpleCountingMode"; + selected: {model.isSimpleCountingMode()}; + buttonGroup: "mode"; + _help: {"tutti.editSpeciesFrequencies.field.mode.simpleCounting.help"}; +} + +#frequencyModeButton { + text: "tutti.editSpeciesFrequencies.field.mode.frequencyMode"; + toolTipText: "tutti.editSpeciesFrequencies.field.mode.frequencyMode.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.frequencyMode.mnemonic"; + value: "frequenciesMode"; + selected: {model.isFrequenciesMode()}; + buttonGroup: "mode"; + _help: {"tutti.editSpeciesFrequencies.field.mode.frequencyMode.help"}; +} + #autoGenModeButton { - text: "tutti.editSpeciesFrequencies.field.mode.autoGen"; - toolTipText: "tutti.editSpeciesFrequencies.field.mode.autoGen.tip"; - i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.autoGen.mnemonic"; + text: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen"; + toolTipText: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.mnemonic"; value: "autoGenMode"; selected: {model.isAutoGenMode()}; - buttonGroup: "mode"; - _help: {"tutti.editSpeciesFrequencies.field.mode.autoGen.help"}; + buttonGroup: "frequenciesMode"; + _help: {"tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.help"}; } #rafaleModeButton { - text: "tutti.editSpeciesFrequencies.field.mode.rafale"; - toolTipText: "tutti.editSpeciesFrequencies.field.mode.rafale.tip"; - i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.rafale.mnemonic"; + text: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale"; + toolTipText: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale.mnemonic"; value: "rafaleMode"; selected: {model.isRafaleMode()}; - buttonGroup: "mode"; + buttonGroup: "frequenciesMode"; _help: {"tutti.editSpeciesFrequencies.field.mode.rafale.help"}; } -#simpleCountingModeButton { - text: "tutti.editSpeciesFrequencies.field.mode.simpleCounting"; - toolTipText: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.tip"; - i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.mnemonic"; - value: "simpleCountingMode"; - selected: {model.isSimpleCountingMode()}; - buttonGroup: "mode"; - _help: {"tutti.editSpeciesFrequencies.field.mode.simpleCounting.help"}; -} - #generateLengthStepsAction { enabled: {model.isCanGenerate()}; } 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 383bbdd..f5da11e 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 @@ -343,7 +343,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci }); // when configuration mode change, let's focus the best component (see http://forge.codelutin.com/issues/4035) - model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_CONFIGURATION_MODE, new PropertyChangeListener() { + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_FREQUENCIES_CONFIGURATION_MODE, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { final FrequencyConfigurationMode newValue = (FrequencyConfigurationMode) evt.getNewValue(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index e1cdfb9..eae208e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -55,6 +55,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_CONFIGURATION_MODE = "configurationMode"; + public static final String PROPERTY_FREQUENCIES_CONFIGURATION_MODE = "frequenciesConfigurationMode"; + public static final String PROPERTY_STEP = "step"; private static final String PROPERTY_MIN_STEP = "minStep"; @@ -63,6 +65,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_CAN_GENERATE = "canGenerate"; + public static final String PROPERTY_FREQUENCIES_MODE = "frequenciesMode"; + public static final String PROPERTY_AUTO_GEN_MODE = "autoGenMode"; public static final String PROPERTY_RAFALE_MODE = "rafaleMode"; @@ -97,6 +101,13 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa protected FrequencyConfigurationMode configurationMode; /** + * Fill mode. + * + * @since 4.5 + */ + protected FrequencyConfigurationMode frequenciesConfigurationMode = FrequencyConfigurationMode.AUTO_GEN; + + /** * Batch that contains frequencies. * * @since 0.2 @@ -286,10 +297,21 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public void setConfigurationMode(FrequencyConfigurationMode configurationMode) { Object oldValue = getConfigurationMode(); this.configurationMode = configurationMode; + firePropertyChange(PROPERTY_FREQUENCIES_MODE, null, isFrequenciesMode()); + firePropertyChange(PROPERTY_SIMPLE_COUNTING_MODE, null, isSimpleCountingMode()); firePropertyChange(PROPERTY_CONFIGURATION_MODE, oldValue, configurationMode); + } + + public FrequencyConfigurationMode getFrequenciesConfigurationMode() { + return frequenciesConfigurationMode; + } + + public void setFrequenciesConfigurationMode(FrequencyConfigurationMode frequenciesConfigurationMode) { + Object oldValue = getFrequenciesConfigurationMode(); + this.frequenciesConfigurationMode = frequenciesConfigurationMode; firePropertyChange(PROPERTY_AUTO_GEN_MODE, null, isAutoGenMode()); firePropertyChange(PROPERTY_RAFALE_MODE, null, isRafaleMode()); - firePropertyChange(PROPERTY_SIMPLE_COUNTING_MODE, null, isSimpleCountingMode()); + firePropertyChange(PROPERTY_FREQUENCIES_CONFIGURATION_MODE, oldValue, getFrequenciesConfigurationMode()); } public Float getStep() { @@ -374,16 +396,20 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa firePropertyChange(PROPERTY_NEXT_EDITABLE_ROW_INDEX, oldValue, nextEditableRowIndex); } - public boolean isAutoGenMode() { - return FrequencyConfigurationMode.AUTO_GEN == configurationMode; + public boolean isSimpleCountingMode() { + return FrequencyConfigurationMode.SIMPLE_COUNTING == configurationMode; } - public boolean isRafaleMode() { - return FrequencyConfigurationMode.RAFALE == configurationMode; + public boolean isFrequenciesMode() { + return FrequencyConfigurationMode.FREQUENCIES == configurationMode; } - public boolean isSimpleCountingMode() { - return FrequencyConfigurationMode.SIMPLE_COUNTING == configurationMode; + public boolean isAutoGenMode() { + return FrequencyConfigurationMode.AUTO_GEN == frequenciesConfigurationMode; + } + + public boolean isRafaleMode() { + return FrequencyConfigurationMode.RAFALE == frequenciesConfigurationMode; } public boolean isCanGenerate() { 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 f717239..b5f8ed3 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 @@ -1,5 +1,6 @@ <<=
= +Pr\\u00e9l\\u00e8vement= application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= @@ -1445,6 +1446,12 @@ tutti.editSpeciesFrequencies.askBeforeSave.message= tutti.editSpeciesFrequencies.askBeforeSave.title= tutti.editSpeciesFrequencies.error.itchyometer.bad.record= tutti.editSpeciesFrequencies.error.length.doublon= +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen= +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.mnemonic= +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip= +tutti.editSpeciesFrequencies.field.frequencyMode.rafale= +tutti.editSpeciesFrequencies.field.frequencyMode.rafale.mnemonic= +tutti.editSpeciesFrequencies.field.frequencyMode.rafale.tip= tutti.editSpeciesFrequencies.field.lengthStepCaracteristic= tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.tip= tutti.editSpeciesFrequencies.field.maxStep= @@ -1454,6 +1461,9 @@ tutti.editSpeciesFrequencies.field.minStep.tip= tutti.editSpeciesFrequencies.field.mode.autoGen= tutti.editSpeciesFrequencies.field.mode.autoGen.mnemonic= tutti.editSpeciesFrequencies.field.mode.autoGen.tip= +tutti.editSpeciesFrequencies.field.mode.frequencyMode= +tutti.editSpeciesFrequencies.field.mode.frequencyMode.mnemonic= +tutti.editSpeciesFrequencies.field.mode.frequencyMode.tip= tutti.editSpeciesFrequencies.field.mode.rafale= tutti.editSpeciesFrequencies.field.mode.rafale.mnemonic= tutti.editSpeciesFrequencies.field.mode.rafale.tip= 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 af0844e..183512f 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 @@ -1,3 +1,4 @@ +Pr\\u00e9l\\u00e8vement= application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= @@ -1366,18 +1367,21 @@ tutti.editSpeciesFrequencies.askBeforeSave.message=La saisie comporte des classe tutti.editSpeciesFrequencies.askBeforeSave.title=Confirmer l'enregistrement des mensurations tutti.editSpeciesFrequencies.error.itchyometer.bad.record=La mesure provenant de l'ichtyomètre n'est pas valide (la donnée est peut-être corrompue) \:<br/><ul><li>Enregistrement \: <strong>%s</strong></li><li>CRC \: <strong>%s</strong></li><li>CRC calculé \: <strong>%s</strong></li></ul> tutti.editSpeciesFrequencies.error.length.doublon=La classe de taille <strong>%s</strong> est utilisée plusieurs fois (deuxième occurrence trouvée à la ligne <strong>%s</strong>), ce qui n'est pas autorisé.<hr/>Veuillez corriger cela pour pouvoir enregistrer les mensurations. +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen=Génération des classes +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.mnemonic=G +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip=\=Mode où toutes les classes de taille sont générées +tutti.editSpeciesFrequencies.field.frequencyMode.rafale=Mode "rafale" +tutti.editSpeciesFrequencies.field.frequencyMode.rafale.mnemonic=l +tutti.editSpeciesFrequencies.field.frequencyMode.rafale.tip=Mode où on ne saisit uniquement la classe de taille (les nombres seront alors incrémentés...) tutti.editSpeciesFrequencies.field.lengthStepCaracteristic=Type de mesure tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.tip=Méthode de mensuration des individus tutti.editSpeciesFrequencies.field.maxStep=Classe max tutti.editSpeciesFrequencies.field.maxStep.tip=Taille maximale mesurée tutti.editSpeciesFrequencies.field.minStep=Classe min tutti.editSpeciesFrequencies.field.minStep.tip=Taille minimale mesurée -tutti.editSpeciesFrequencies.field.mode.autoGen=Génération des classes -tutti.editSpeciesFrequencies.field.mode.autoGen.mnemonic=G -tutti.editSpeciesFrequencies.field.mode.autoGen.tip=Mode où toutes les classes de taille sont générées -tutti.editSpeciesFrequencies.field.mode.rafale=Mode "rafale" -tutti.editSpeciesFrequencies.field.mode.rafale.mnemonic=l -tutti.editSpeciesFrequencies.field.mode.rafale.tip=Mode où on ne saisit uniquement la classe de taille (les nombres seront alors incrémentés...) +tutti.editSpeciesFrequencies.field.mode.frequencyMode=Mensuration +tutti.editSpeciesFrequencies.field.mode.frequencyMode.mnemonic=M +tutti.editSpeciesFrequencies.field.mode.frequencyMode.tip=Mode par défaut si la classe de taille est renseignée dans le protocole. tutti.editSpeciesFrequencies.field.mode.simpleCounting=Mode simple dénombrement tutti.editSpeciesFrequencies.field.mode.simpleCounting.mnemonic=b tutti.editSpeciesFrequencies.field.mode.simpleCounting.tip=Mode par défaut si la classe de taille n'est pas renseignée dans le protocole.
-- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit c8938cb54bd762b60d9ae98b16eb213fc38e0411 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 19 15:09:16 2016 +0100 mise en page de l'écran refs #6926 --- .../filtered-resources/tutti-help-fr.properties | 5 + .../species/frequency/SpeciesFrequencyUI.jaxx | 120 +++++--- .../species/frequency/SpeciesFrequencyUI.jcss | 311 +++++++++++++-------- .../resources/i18n/tutti-ui-swing_en_GB.properties | 13 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 15 +- 5 files changed, 301 insertions(+), 163 deletions(-) diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index 7940240..e3e80af 100644 --- a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties +++ b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties @@ -22,6 +22,7 @@ # #L% ### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo +#Fri Feb 19 14:49:02 CET 2016 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -325,6 +326,9 @@ tutti.editSpeciesFrequencies.action.generate.help=editFishingOperation.html\#cap tutti.editSpeciesFrequencies.action.reset.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndClose.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndContinue.help=editFishingOperation.html\#captureEspecesMensurationActions +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.help= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.help= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.help= tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.help= tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.maxStep.help=editFishingOperation.html\#captureEspecesMensurationFields @@ -341,6 +345,7 @@ tutti.editSpeciesFrequencies.field.simpleCountingWeight.help=editFishingOperatio tutti.editSpeciesFrequencies.field.step.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.totalNumber.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.totalWeight.help=editFishingOperation.html\#captureEspecesMensurationFields +tutti.editSpeciesFrequencies.field.useRtp.help= tutti.editSpeciesFrequencies.help=editFishingOperation.html\#captureEspecesMensuration tutti.fishingOperations.action.deleteFishingOperation.help=editFishingOperation.html\#traitActions tutti.fishingOperations.action.newFishingOperation.help=editFishingOperation.html\#traitActions diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx index d4d6852..486dbd2 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx @@ -85,8 +85,10 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { <row> - <cell weightx="1"> - <HBox id='frequencyModePanel' horizontalAlignment='{SwingConstants.LEFT}'> + <cell> + <HBox id='frequencyModePanel' + horizontalAlignment='{SwingConstants.LEFT}' + verticalAlignment='{SwingConstants.CENTER}'> <JRadioButton id='simpleCountingModeButton' onActionPerformed='model.setConfigurationMode(FrequencyConfigurationMode.SIMPLE_COUNTING)'/> <JRadioButton id='frequencyModeButton' @@ -94,40 +96,16 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { </HBox> </cell> - <cell> - - <!-- length step caracteristic --> - <HBox id="lengthStepCaracteristicPanel" styleClass="visibleIfFrequencies"> - <JLabel id='lengthStepCaracteristicLabel'/> - <JPanel layout='{new BorderLayout()}'> - <BeanFilterableComboBox id='lengthStepCaracteristicComboBox' - constructorParams='this' - genericType='Caracteristic' - constraints='BorderLayout.CENTER'/> - <JButton id='addLengthStepCaracteristicButton' constraints='BorderLayout.EAST'/> - </JPanel> - <JLabel id='stepLabel'/> - <NumberEditor id='stepField' constructorParams='this'/> - </HBox> - - </cell> - - <cell rows="3" weightx="10"> + <cell rows="2" weightx="1"> <JPanel id="histogramPanel" layout="{new BorderLayout()}" styleClass="visibleIfFrequencies"/> </cell> </row> <row> - <cell columns="2"> - <JSeparator styleClass="visibleIfFrequencies" /> - </cell> - </row> - - <row> - <cell columns="2"> + <cell> <Table styleClass="visibleIfFrequencies"> <row> - <cell> + <cell rows="2"> <VBox id='modePanel' verticalAlignment='{SwingConstants.CENTER}'> <JRadioButton id='autoGenModeButton' onActionPerformed='model.setFrequenciesConfigurationMode(FrequencyConfigurationMode.AUTO_GEN)'/> @@ -136,7 +114,7 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { </VBox> </cell> - <cell> + <cell rows="2"> <JPanel id='modeConfigurationPanel'> <Table id='autoGenModePanel' fill='both' constraints='"autoGenMode"'> <!-- Min step--> @@ -182,7 +160,40 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { </JPanel> </cell> - <cell weightx="1"> + <cell> + <!-- length step caracteristic --> + <Table id="lengthStepCaracteristicPanel" + fill="both" + anchor="west"> + + <row> + <cell> + <JLabel id='lengthStepCaracteristicLabel'/> + </cell> + <cell> + <BeanFilterableComboBox id='lengthStepCaracteristicComboBox' + constructorParams='this' + genericType='Caracteristic'/> + </cell> + <cell> + <JButton id='addLengthStepCaracteristicButton'/> + </cell> + </row> + <row> + <cell> + <JLabel id='stepLabel'/> + </cell> + <cell weightx="1" columns="2"> + <NumberEditor id='stepField' constructorParams='this'/> + </cell> + </row> + + </Table> + </cell> + </row> + + <row> + <cell> <JLabel id="samplingWarningLabel"/> </cell> </row> @@ -191,23 +202,42 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { </row> <row> - <cell columns="3"> - <JSeparator styleClass="visibleIfFrequencies" /> + <cell columns="2"> + <JSeparator styleClass="visibleIfFrequencies"/> </cell> </row> <row weighty="1"> - <cell columns="3"> + <cell columns="2" weightx="1"> <JPanel id='dataFieldPanel'> <JSplitPane constraints='"lengthCaracteristicPmfm"' id="firstSplitPane"> <JPanel layout="{new BorderLayout()}"> - <HBox id="lengthstepSettingsBlock" constraints='BorderLayout.NORTH'> - <!-- Step --> + <Table constraints='BorderLayout.NORTH' + fill="both" + id="lengthstepSettingsBlock"> + <row> + <cell anchor="east"> <JLabel id='totalNumberLabel'/> + </cell> + <cell> <JTextField id='totalNumberField'/> + </cell> + <cell> + <JCheckBox id='useRTPCheckBox' onItemStateChanged='handler.setBoolean(event, "useRTP")'/> + </cell> + </row> + <row> + <cell> <JLabel id='totalWeightLabel'/> + </cell> + <cell> <ComputableDataEditor id='totalWeightField' genericType="Float" constructorParams='this'/> - </HBox> + </cell> + <cell> + <JButton id='graphAverageWeightButton'/> + </cell> + </row> + </Table> <JSplitPane id="secondSplitPane" constraints='BorderLayout.CENTER'> <JScrollPane id='logsScrollPane'> <JXTable id='logsTable'/> @@ -217,9 +247,19 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { </JScrollPane> </JSplitPane> </JPanel> - <JScrollPane id='obsPanel'> - <JXTable id='obsTable'/> - </JScrollPane> + <JPanel layout="{new BorderLayout()}"> + <HBox id="copyToSizeTablePanel" + verticalAlignment='{SwingConstants.CENTER}' + constraints="BorderLayout.NORTH"> + <JLabel id='copyToSizeTableLabel'/> + <JRadioButton id='copyAllButton'/> + <JRadioButton id='copyNothingButton'/> + <JRadioButton id='copySizesButton'/> + </HBox> + <JScrollPane id='obsPanel' constraints="BorderLayout.CENTER"> + <JXTable id='obsTable'/> + </JScrollPane> + </JPanel> </JSplitPane> <Table id="simpleCountingNumberPanel" constraints='"noLengthCaracteristicPmfm"' fill='horizontal'> 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 b22a514..2e8efc8 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 @@ -50,70 +50,67 @@ ComputableDataEditor { _help: {"tutti.editSpeciesFrequencies.help"}; } -#stepLabel { - text: "tutti.editSpeciesFrequencies.field.step"; - toolTipText: "tutti.editSpeciesFrequencies.field.step.tip"; - labelFor: {stepField}; - enabled: {!model.isSimpleCountingMode()}; - _help: {"tutti.editSpeciesFrequencies.field.step.help"}; -} +//configurationPanel -#stepField { - property: step; - numberValue: {model.getStep()}; - numberPattern: {DECIMAL1_PATTERN}; - enabled: {!model.isSimpleCountingMode() && model.isCanEditLengthStep()}; - _validatorLabel: {t("tutti.editSpeciesFrequencies.field.step")}; - _help: {"tutti.editSpeciesFrequencies.field.step.help"}; +#frequencyModePanel { + border: {BorderFactory.createEmptyBorder(5, 10, 5, 10)}; } -#totalNumberLabel { - text: "tutti.editSpeciesFrequencies.field.totalNumber"; - toolTipText: "tutti.editSpeciesFrequencies.field.totalNumber.tip"; - labelFor: {totalNumberField}; - enabled: {!model.isSimpleCountingMode()}; - _help: {"tutti.editSpeciesFrequencies.field.totalNumber.help"}; +#simpleCountingModeButton { + text: "tutti.editSpeciesFrequencies.field.mode.simpleCounting"; + toolTipText: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.mnemonic"; + value: "simpleCountingMode"; + selected: {model.isSimpleCountingMode()}; + buttonGroup: "mode"; + _help: {"tutti.editSpeciesFrequencies.field.mode.simpleCounting.help"}; } -#totalNumberField { - text: {getStringValue(model.getTotalNumber())}; - enabled: false; - _computed: true; - _help: {"tutti.editSpeciesFrequencies.field.totalNumber.help"}; +#frequencyModeButton { + text: "tutti.editSpeciesFrequencies.field.mode.frequencyMode"; + toolTipText: "tutti.editSpeciesFrequencies.field.mode.frequencyMode.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.frequencyMode.mnemonic"; + value: "frequenciesMode"; + selected: {model.isFrequenciesMode()}; + buttonGroup: "mode"; + _help: {"tutti.editSpeciesFrequencies.field.mode.frequencyMode.help"}; } -#totalWeightLabel { - text: "tutti.editSpeciesFrequencies.field.totalWeight"; - toolTipText: "tutti.editSpeciesFrequencies.field.totalWeight.tip"; - labelFor: {totalWeightField}; - enabled: {model.getTotalWeight() != null}; - _help: {"tutti.editSpeciesFrequencies.field.totalWeight.help"}; - _addWeightUnit: {handler.getConfig().getSpeciesWeightUnit()}; +//histogramPanel + +//modePanel + +#autoGenModeButton { + text: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen"; + toolTipText: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.mnemonic"; + value: "autoGenMode"; + selected: {model.isAutoGenMode()}; + buttonGroup: "frequenciesMode"; + _help: {"tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.help"}; } -#totalWeightField { - bean: {model.getTotalComputedOrNotWeight()}; - numberValue: {model.getTotalWeight()}; - _validatorLabel: {t("tutti.editSpeciesFrequencies.field.totalWeight")}; - _help: {"tutti.editSpeciesFrequencies.field.totalWeight.help"}; +#rafaleModeButton { + text: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale"; + toolTipText: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale.mnemonic"; + value: "rafaleMode"; + selected: {model.isRafaleMode()}; + buttonGroup: "frequenciesMode"; + _help: {"tutti.editSpeciesFrequencies.field.mode.rafale.help"}; } -#lengthStepCaracteristicLabel { - text: "tutti.editSpeciesFrequencies.field.lengthStepCaracteristic"; - toolTipText: "tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.tip"; - labelFor: {lengthStepCaracteristicComboBox}; - enabled: {!model.isSimpleCountingMode()}; - _help: {"tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.help"}; +#modeConfigurationPanel { + layout: {modeConfigurationLayout}; + border: { BorderFactory.createTitledBorder(null, null) }; } -#lengthStepCaracteristicComboBox { - property: lengthStepCaracteristic; - selectedItem: {model.getLengthStepCaracteristic()}; - enabled: {!model.isSimpleCountingMode() && model.isCanEditLengthStep()}; - _validatorLabel: {t("tutti.editSpeciesFrequencies.field.lengthStepCaracteristic")}; - _help: {"tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.help"}; +#modeConfigurationLayout { + selected: {String.valueOf(frequenciesMode.getSelectedValue())}; } +//autoGenModePanel + #minStepLabel { text: "tutti.editSpeciesFrequencies.field.minStep"; toolTipText: "tutti.editSpeciesFrequencies.field.minStep.tip"; @@ -142,6 +139,17 @@ ComputableDataEditor { _help: {"tutti.editSpeciesFrequencies.field.maxStep.help"}; } +#generateButton { + action: {generateLengthStepsAction}; + _help: {"tutti.editSpeciesFrequencies.action.generate.help"}; +} + +#generateLengthStepsAction { + enabled: {model.isCanGenerate()}; +} + +//rafaleModePanel + #rafaleStepLabel { text: "tutti.editSpeciesFrequencies.field.rafaleStep"; toolTipText: "tutti.editSpeciesFrequencies.field.rafaleStep.tip"; @@ -155,47 +163,113 @@ ComputableDataEditor { _help: {"tutti.editSpeciesFrequencies.field.rafaleStep.help"}; } -#samplingWarningLabel { - foreground: {Color.RED}; - text: "Prélèvement"; +#lengthStepCaracteristicPanel { + border: { BorderFactory.createTitledBorder(null, null) }; } -#configurationPanel { - border: {new TitledBorder(null, null)}; +#lengthStepCaracteristicLabel { + text: "tutti.editSpeciesFrequencies.field.lengthStepCaracteristic"; + toolTipText: "tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.tip"; + labelFor: {lengthStepCaracteristicComboBox}; + enabled: {!model.isSimpleCountingMode()}; + _help: {"tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.help"}; } -#modeConfigurationLayout { - selected: {String.valueOf(frequenciesMode.getSelectedValue())}; +#lengthStepCaracteristicComboBox { + property: lengthStepCaracteristic; + selectedItem: {model.getLengthStepCaracteristic()}; + enabled: {!model.isSimpleCountingMode() && model.isCanEditLengthStep()}; + _validatorLabel: {t("tutti.editSpeciesFrequencies.field.lengthStepCaracteristic")}; + _help: {"tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.help"}; } -#modeConfigurationPanel { - layout: {modeConfigurationLayout}; - border: {new TitledBorder(null, null)}; +#addLengthStepCaracteristicButton { + action: {addLengthStepCaracteristicAction}; + enabled: {!model.isSimpleCountingMode() && model.isCanEditLengthStep()}; + _help: {"tutti.editSpeciesFrequencies.action.addLengthStepCaracteristic.help"}; } -#simpleCountingModeLabel { - text: "tutti.editSpeciesFrequencies.label.no.configuration"; - horizontalAlignment: {JLabel.CENTER}; - enabled: false; +#stepLabel { + text: "tutti.editSpeciesFrequencies.field.step"; + toolTipText: "tutti.editSpeciesFrequencies.field.step.tip"; + labelFor: {stepField}; + enabled: {!model.isSimpleCountingMode()}; + _help: {"tutti.editSpeciesFrequencies.field.step.help"}; } -#lengthstepSettingsBlock { - visible: {!model.isSimpleCountingMode()}; +#stepField { + property: step; + numberValue: {model.getStep()}; + numberPattern: {DECIMAL1_PATTERN}; + enabled: {!model.isSimpleCountingMode() && model.isCanEditLengthStep()}; + _validatorLabel: {t("tutti.editSpeciesFrequencies.field.step")}; + _help: {"tutti.editSpeciesFrequencies.field.step.help"}; } -#dataFieldLayout { - selected: {model.isSimpleCountingMode() ? "noLengthCaracteristicPmfm" : "lengthCaracteristicPmfm"}; +#samplingWarningLabel { + foreground: {Color.RED}; + text: "Prélèvement"; } #dataFieldPanel { layout: {dataFieldLayout}; } +#dataFieldLayout { + selected: {model.isSimpleCountingMode() ? "noLengthCaracteristicPmfm" : "lengthCaracteristicPmfm"}; +} + #firstSplitPane { oneTouchExpandable: true; resizeWeight: 0.6; } +#lengthstepSettingsBlock { + border: {BorderFactory.createEmptyBorder(5, 10, 5, 10)}; +} + +#totalNumberLabel { + text: "tutti.editSpeciesFrequencies.field.totalNumber"; + toolTipText: "tutti.editSpeciesFrequencies.field.totalNumber.tip"; + labelFor: {totalNumberField}; + enabled: {!model.isSimpleCountingMode()}; + _help: {"tutti.editSpeciesFrequencies.field.totalNumber.help"}; +} + +#totalNumberField { + text: {getStringValue(model.getTotalNumber())}; + enabled: false; + _computed: true; + _help: {"tutti.editSpeciesFrequencies.field.totalNumber.help"}; +} + +#totalWeightLabel { + text: "tutti.editSpeciesFrequencies.field.totalWeight"; + toolTipText: "tutti.editSpeciesFrequencies.field.totalWeight.tip"; + labelFor: {totalWeightField}; + enabled: {model.getTotalWeight() != null}; + _help: {"tutti.editSpeciesFrequencies.field.totalWeight.help"}; + _addWeightUnit: {handler.getConfig().getSpeciesWeightUnit()}; +} + +#totalWeightField { + bean: {model.getTotalComputedOrNotWeight()}; + numberValue: {model.getTotalWeight()}; + _validatorLabel: {t("tutti.editSpeciesFrequencies.field.totalWeight")}; + _help: {"tutti.editSpeciesFrequencies.field.totalWeight.help"}; +} + +#useRTPCheckBox { + text: "tutti.editSpeciesFrequencies.field.useRtp"; + toolTipText: "tutti.editSpeciesFrequencies.field.useRtp.tip"; + _help: {"tutti.editSpeciesFrequencies.field.useRtp.help"}; +} + +#graphAverageWeightButton { + text: "tutti.editSpeciesFrequencies.field.graphAverageWeight"; + _skipAction: true; +} + #secondSplitPane { oneTouchExpandable: true; resizeWeight: 0.1; @@ -220,8 +294,50 @@ ComputableDataEditor { enabled: {model.getLengthStepCaracteristic() != null && model.getStep() > 0f}; } +//obsPanel + +#copyToSizeTablePanel { + border: {BorderFactory.createEmptyBorder(5, 10, 5, 10)}; +} + +#copyToSizeTableLabel { + text: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.label"; +} + +#copyAllButton { + text: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all"; + toolTipText: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.mnemonic"; + value: "all"; + //selected: {model.isSimpleCountingMode()}; + buttonGroup: "copyToSizeTableMode"; + _help: {"tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.help"}; +} + +#copyNothingButton { + text: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing"; + toolTipText: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.mnemonic"; + value: "nothing"; + //selected: {model.isSimpleCountingMode()}; + buttonGroup: "copyToSizeTableMode"; + _help: {"tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.help"}; +} + +#copySizesButton { + text: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size"; + toolTipText: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.mnemonic"; + value: "size"; + //selected: {model.isSimpleCountingMode()}; + buttonGroup: "copyToSizeTableMode"; + _help: {"tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.help"}; +} + +//obsTable + #simpleCountingNumberPanel { - border: { new TitledBorder(null, null) }; + border: { BorderFactory.createTitledBorder(null, null) }; } #simpleCountingNumberLabel { @@ -261,63 +377,14 @@ ComputableDataEditor { #dataInFrequenciesWarning { actionIcon: warning; - border: {new javax.swing.border.EmptyBorder(5, 10, 5, 10)}; + border: {BorderFactory.createEmptyBorder(5, 10, 5, 10)}; text: "tutti.editSpeciesFrequencies.simpleCountingAndFrequencies"; } -#simpleCountingModeButton { - text: "tutti.editSpeciesFrequencies.field.mode.simpleCounting"; - toolTipText: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.tip"; - i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.mnemonic"; - value: "simpleCountingMode"; - selected: {model.isSimpleCountingMode()}; - buttonGroup: "mode"; - _help: {"tutti.editSpeciesFrequencies.field.mode.simpleCounting.help"}; -} - -#frequencyModeButton { - text: "tutti.editSpeciesFrequencies.field.mode.frequencyMode"; - toolTipText: "tutti.editSpeciesFrequencies.field.mode.frequencyMode.tip"; - i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.frequencyMode.mnemonic"; - value: "frequenciesMode"; - selected: {model.isFrequenciesMode()}; - buttonGroup: "mode"; - _help: {"tutti.editSpeciesFrequencies.field.mode.frequencyMode.help"}; -} - -#autoGenModeButton { - text: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen"; - toolTipText: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip"; - i18nMnemonic: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.mnemonic"; - value: "autoGenMode"; - selected: {model.isAutoGenMode()}; - buttonGroup: "frequenciesMode"; - _help: {"tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.help"}; -} - -#rafaleModeButton { - text: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale"; - toolTipText: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale.tip"; - i18nMnemonic: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale.mnemonic"; - value: "rafaleMode"; - selected: {model.isRafaleMode()}; - buttonGroup: "frequenciesMode"; - _help: {"tutti.editSpeciesFrequencies.field.mode.rafale.help"}; -} - -#generateLengthStepsAction { - enabled: {model.isCanGenerate()}; -} - -#generateButton { - action: {generateLengthStepsAction}; - _help: {"tutti.editSpeciesFrequencies.action.generate.help"}; -} - -#addLengthStepCaracteristicButton { - action: {addLengthStepCaracteristicAction}; - enabled: {!model.isSimpleCountingMode() && model.isCanEditLengthStep()}; - _help: {"tutti.editSpeciesFrequencies.action.addLengthStepCaracteristic.help"}; +#simpleCountingModeLabel { + text: "tutti.editSpeciesFrequencies.label.no.configuration"; + horizontalAlignment: {JLabel.CENTER}; + enabled: false; } #cancelButton { 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 b5f8ed3..8ffbc39 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 @@ -1446,12 +1446,23 @@ tutti.editSpeciesFrequencies.askBeforeSave.message= tutti.editSpeciesFrequencies.askBeforeSave.title= tutti.editSpeciesFrequencies.error.itchyometer.bad.record= tutti.editSpeciesFrequencies.error.length.doublon= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.mnemonic= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.tip= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.label= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.mnemonic= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.tip= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.mnemonic= +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.tip= tutti.editSpeciesFrequencies.field.frequencyMode.autoGen= tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.mnemonic= tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip= tutti.editSpeciesFrequencies.field.frequencyMode.rafale= tutti.editSpeciesFrequencies.field.frequencyMode.rafale.mnemonic= tutti.editSpeciesFrequencies.field.frequencyMode.rafale.tip= +tutti.editSpeciesFrequencies.field.graphAverageWeight= tutti.editSpeciesFrequencies.field.lengthStepCaracteristic= tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.tip= tutti.editSpeciesFrequencies.field.maxStep= @@ -1485,6 +1496,8 @@ tutti.editSpeciesFrequencies.field.totalNumber= tutti.editSpeciesFrequencies.field.totalNumber.tip= tutti.editSpeciesFrequencies.field.totalWeight= tutti.editSpeciesFrequencies.field.totalWeight.tip= +tutti.editSpeciesFrequencies.field.useRtp= +tutti.editSpeciesFrequencies.field.useRtp.tip= tutti.editSpeciesFrequencies.ichtyometerConnected= tutti.editSpeciesFrequencies.label.no.configuration= tutti.editSpeciesFrequencies.logTable.header.date= 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 183512f..4837a22 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 @@ -563,7 +563,7 @@ tutti.editBenthosFrequencies.field.mode.autoGen.tip=Mode où toutes les classes tutti.editBenthosFrequencies.field.mode.rafale=Mode "rafale" tutti.editBenthosFrequencies.field.mode.rafale.mnemonic=l tutti.editBenthosFrequencies.field.mode.rafale.tip=Mode où on ne saisit uniquement la classe de taille (les nombres seront alors incrémentés...) -tutti.editBenthosFrequencies.field.mode.simpleCounting=Mode simple dénombrement +tutti.editBenthosFrequencies.field.mode.simpleCounting=Dénombrement tutti.editBenthosFrequencies.field.mode.simpleCounting.mnemonic=b tutti.editBenthosFrequencies.field.mode.simpleCounting.tip=Mode par défaut si la classe de taille n'est pas renseignée dans le protocole tutti.editBenthosFrequencies.field.rafaleStep=Classe de taille à incrémenter @@ -1367,12 +1367,23 @@ tutti.editSpeciesFrequencies.askBeforeSave.message=La saisie comporte des classe tutti.editSpeciesFrequencies.askBeforeSave.title=Confirmer l'enregistrement des mensurations tutti.editSpeciesFrequencies.error.itchyometer.bad.record=La mesure provenant de l'ichtyomètre n'est pas valide (la donnée est peut-être corrompue) \:<br/><ul><li>Enregistrement \: <strong>%s</strong></li><li>CRC \: <strong>%s</strong></li><li>CRC calculé \: <strong>%s</strong></li></ul> tutti.editSpeciesFrequencies.error.length.doublon=La classe de taille <strong>%s</strong> est utilisée plusieurs fois (deuxième occurrence trouvée à la ligne <strong>%s</strong>), ce qui n'est pas autorisé.<hr/>Veuillez corriger cela pour pouvoir enregistrer les mensurations. +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all=Tout +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.mnemonic=T +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.tip=Tout recopier (tailles et poids) +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.label=Recopier \: +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing=Rien +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.mnemonic=R +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.tip=Ne rien recopier +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size=Seulement les tailles +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.mnemonic=T +tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.tip=Ne recopier que les tailles, pas les poids tutti.editSpeciesFrequencies.field.frequencyMode.autoGen=Génération des classes tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.mnemonic=G tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip=\=Mode où toutes les classes de taille sont générées tutti.editSpeciesFrequencies.field.frequencyMode.rafale=Mode "rafale" tutti.editSpeciesFrequencies.field.frequencyMode.rafale.mnemonic=l tutti.editSpeciesFrequencies.field.frequencyMode.rafale.tip=Mode où on ne saisit uniquement la classe de taille (les nombres seront alors incrémentés...) +tutti.editSpeciesFrequencies.field.graphAverageWeight=Graphe Poids moyens tutti.editSpeciesFrequencies.field.lengthStepCaracteristic=Type de mesure tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.tip=Méthode de mensuration des individus tutti.editSpeciesFrequencies.field.maxStep=Classe max @@ -1398,6 +1409,8 @@ tutti.editSpeciesFrequencies.field.totalNumber=Nombre total tutti.editSpeciesFrequencies.field.totalNumber.tip=Nombre total d'individus des lignes valides tutti.editSpeciesFrequencies.field.totalWeight=Poids total tutti.editSpeciesFrequencies.field.totalWeight.tip=Poids total des lignes valides +tutti.editSpeciesFrequencies.field.useRtp=Utiliser les RTP +tutti.editSpeciesFrequencies.field.useRtp.tip=Utiliser les RTP tutti.editSpeciesFrequencies.label.no.configuration=< Pas de configuration > tutti.editSpeciesFrequencies.logTable.header.label=Logs tutti.editSpeciesFrequencies.logTable.removeRow.confirm.message=Êtes-vous sûr de vouloir supprimer la mesure %s ? -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit fac69d8b8c95934bdb33bdc117b1018b7fb61fc9 Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 22 10:32:05 2016 +0100 - use jaxx 2.29-SNAPSHOT - correction du mode de config à l'ouverture de l'écran - ajout de useRTP dans le modele refs #6926 --- pom.xml | 3 ++- .../species/frequency/SpeciesFrequencyUIHandler.java | 8 ++++++-- .../species/frequency/SpeciesFrequencyUIModel.java | 19 +++++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 9f65899..d7011b2 100644 --- a/pom.xml +++ b/pom.xml @@ -126,7 +126,8 @@ <nuitonI18nVersion>3.3</nuitonI18nVersion> <nuitonValidatorVersion>3.0</nuitonValidatorVersion> <eugenePluginVersion>2.14</eugenePluginVersion> - <jaxxVersion>2.28.2</jaxxVersion> + <!--<jaxxVersion>2.28.2</jaxxVersion>--> + <jaxxVersion>2.29-SNAPSHOT</jaxxVersion> <swingXVersion>1.6.4</swingXVersion> <slf4jVersion>1.7.13</slf4jVersion> <!-- Can't use now adagio previous to 3.9.1 after this version --> 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 f5da11e..8175a8b 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 @@ -613,7 +613,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci log.debug("Will edit batch row: " + speciesBatch + " with " + rows.size() + " frequency"); } - FrequencyConfigurationMode mode = FrequencyConfigurationMode.AUTO_GEN; + FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; + FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; if (lengthStepCaracteristic == null) { String speciesLengthStepPmfmId = taxonCache.getLengthStepPmfmId(speciesBatch.getSpecies()); if (speciesLengthStepPmfmId == null) { @@ -625,10 +626,13 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci mode = FrequencyConfigurationMode.SIMPLE_COUNTING; model.setSimpleCount(number); } - // make sure configuration mode will be rebind + // make sure configuration mode will be rebound model.setConfigurationMode(null); model.setConfigurationMode(mode); + model.setFrequenciesConfigurationMode(null); + model.setFrequenciesConfigurationMode(frequenciesMode); + // connect model to validator ui.getValidator().setBean(model); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index eae208e..1fc9987 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -87,6 +87,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_TOTAL_COMPUTED_WEIGHT = "totalComputedWeight"; + public static final String PROPERTY_USE_RTP = "useRTP"; + public static final String PROPERTY_EMPTY_ROWS = "emptyRows"; public static final String PROPERTY_NEXT_EDITABLE_ROW_INDEX = "nextEditableRowIndex"; @@ -157,6 +159,13 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa protected ComputableData<Float> totalComputedOrNotWeight = new ComputableData<Float>(); /** + * Use the RTPs of the protocol to compute the total weight + * + * @since 4.5 + */ + protected boolean useRTP; + + /** * Number in case of simple counting mode * * @since 1.0 @@ -480,6 +489,16 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa && Weights.isEqualWeight(totalWeight, computedWeight); } + public boolean isUseRTP() { + return useRTP; + } + + public void setUseRTP(boolean useRTP) { + Object oldValue = isUseRTP(); + this.useRTP = useRTP; + firePropertyChange(PROPERTY_USE_RTP, oldValue, useRTP); + } + public Set<SpeciesFrequencyRowModel> getEmptyRows() { return emptyRows; } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit 998f89331ed84717af00e5aa5349df7cd933f2e4 Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 22 14:25:37 2016 +0100 ajout du model de colonnes de la table des observations (refs #6926) --- .../frequency/SpeciesFrequencyUIHandler.java | 386 ++++++++++++++++----- .../species/frequency/SpeciesFrequencyUIModel.java | 22 +- 2 files changed, 319 insertions(+), 89 deletions(-) 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 8175a8b..05715ba 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 @@ -23,20 +23,26 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; */ import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderEvent; import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderListener; import fr.ifremer.tutti.ichtyometer.feed.record.FeedReaderMeasureRecord; import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; 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.persistence.entities.referential.TaxonCache; import fr.ifremer.tutti.persistence.entities.referential.TaxonCaches; +import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyCellComponent.FrequencyCellEditor; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.ApplySpeciesFrequencyRafaleAction; @@ -45,7 +51,13 @@ import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiNumberTickUnitSource; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor; +import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer; +import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapCellComponent; +import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor; +import fr.ifremer.tutti.ui.swing.util.comment.CommentCellRenderer; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import fr.ifremer.tutti.ui.swing.util.table.CaracteristicColumnIdentifier; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections4.CollectionUtils; @@ -61,14 +73,22 @@ import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberTickUnitSource; import org.jfree.chart.axis.ValueAxis; +import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.ApplicationBusinessException; +import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; import javax.swing.JComponent; +import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSplitPane; +import javax.swing.JTable; import javax.swing.JTextField; +import javax.swing.SwingConstants; import javax.swing.SwingUtilities; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumnModel; import java.awt.BorderLayout; +import java.awt.Component; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; @@ -77,6 +97,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -222,7 +243,12 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci this.weightUnit = getConfig().getSpeciesWeightUnit(); SampleCategoryModel sampleCategoryModel = getDataContext().getSampleCategoryModel(); - SpeciesFrequencyUIModel model = new SpeciesFrequencyUIModel(weightUnit, sampleCategoryModel); + + // get the default caracteristics + List<Caracteristic> defaultCaracteristic = + getDataContext().getDefaultIndividualObservationCaracteristics(); + + SpeciesFrequencyUIModel model = new SpeciesFrequencyUIModel(weightUnit, sampleCategoryModel, defaultCaracteristic); this.ui.setContextValue(model); @@ -368,99 +394,16 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // init histogram - chart = ChartFactory.createXYBarChart(null, - t("tutti.editSpeciesFrequencies.table.header.lengthStep"), - false, - t("tutti.editSpeciesFrequencies.table.header.number"), - model.dataset); - chart.clearSubtitles(); - - ValueAxis rangeAxis = chart.getXYPlot().getRangeAxis(); - rangeAxis.setAutoRange(true); - rangeAxis.setStandardTickUnits(new NumberTickUnitSource(true)); - - ValueAxis domainAxis = chart.getXYPlot().getDomainAxis(); - domainAxis.setAutoRange(true); - domainAxis.setStandardTickUnits(new TuttiNumberTickUnitSource(true)); - domainAxis.setMinorTickMarksVisible(true); - - chart.getXYPlot().getRenderer().setSeriesPaint(0, getConfig().getColorComputedWeights()); - - final ChartPanel chartPanel = new ChartPanel(chart); - chartPanel.setDomainZoomable(false); - chartPanel.setMouseZoomable(false); - chartPanel.setPopupMenu(null); - - JPanel histogramPanel = ui.getHistogramPanel(); - histogramPanel.add(chartPanel, BorderLayout.CENTER); + initHistogram(ui, model); // init data table - JXTable table = getTable(); - - // create table column model - DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); - - { // LengthStep - - addFloatColumnToModel(columnModel, - SpeciesFrequencyTableModel.LENGTH_STEP, - TuttiUI.DECIMAL1_PATTERN, - table); - } - - { // Number - - addIntegerColumnToModel(columnModel, - SpeciesFrequencyTableModel.NUMBER, - TuttiUI.INT_6_DIGITS_PATTERN, - table); - } - - { // Weight - - addFloatColumnToModel(columnModel, - SpeciesFrequencyTableModel.WEIGHT, - weightUnit, - table); - } - - // create table model - SpeciesFrequencyTableModel tableModel = new SpeciesFrequencyTableModel(weightUnit, columnModel, model); - - table.setModel(tableModel); - table.setColumnModel(columnModel); - - initTable(table); - - installTableKeyListener(columnModel, table); + initDataTable(model); // init log table - JXTable logTable = ui.getLogsTable(); - - // create log table column model - DefaultTableColumnModelExt logColumnModel = new DefaultTableColumnModelExt(); - - { // Date - addColumnToModel(logColumnModel, - SpeciesFrequencyLogCellComponent.newEditor(ui), - SpeciesFrequencyLogCellComponent.newRender(), - SpeciesFrequencyLogsTableModel.LABEL); - } - - // create log table model - SpeciesFrequencyLogsTableModel logTableModel = new SpeciesFrequencyLogsTableModel(logColumnModel); - logTableModel.setRows(new ArrayList<SpeciesFrequencyLogRowModel>()); + initLogTable(ui); - logTable.setModel(logTableModel); - logTable.setColumnModel(logColumnModel); - - // by default do not authorize to change column orders - logTable.getTableHeader().setReorderingAllowed(false); - Highlighter evenHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - HighlightPredicate.ODD, - getConfig().getColorAlternateRow()); - logTable.addHighlighter(evenHighlighter); + initObsTable(); listenValidatorValid(ui.getValidator(), model); @@ -652,6 +595,273 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci //-- Internal methods --// //------------------------------------------------------------------------// + + protected void initDataTable(SpeciesFrequencyUIModel model) { + JXTable table = getTable(); + + // create table column model + DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); + + { // LengthStep + + addFloatColumnToModel(columnModel, + SpeciesFrequencyTableModel.LENGTH_STEP, + TuttiUI.DECIMAL1_PATTERN, + table); + } + + { // Number + + addIntegerColumnToModel(columnModel, + SpeciesFrequencyTableModel.NUMBER, + TuttiUI.INT_6_DIGITS_PATTERN, + table); + } + + { // Weight + + addFloatColumnToModel(columnModel, + SpeciesFrequencyTableModel.WEIGHT, + weightUnit, + table); + } + + // create table model + SpeciesFrequencyTableModel tableModel = new SpeciesFrequencyTableModel(weightUnit, columnModel, model); + + table.setModel(tableModel); + table.setColumnModel(columnModel); + + initTable(table); + + installTableKeyListener(columnModel, table); + } + + protected void initHistogram(SpeciesFrequencyUI ui, SpeciesFrequencyUIModel model) { + chart = ChartFactory.createXYBarChart(null, + t("tutti.editSpeciesFrequencies.table.header.lengthStep"), + false, + t("tutti.editSpeciesFrequencies.table.header.number"), + model.dataset); + chart.clearSubtitles(); + + ValueAxis rangeAxis = chart.getXYPlot().getRangeAxis(); + rangeAxis.setAutoRange(true); + rangeAxis.setStandardTickUnits(new NumberTickUnitSource(true)); + + ValueAxis domainAxis = chart.getXYPlot().getDomainAxis(); + domainAxis.setAutoRange(true); + domainAxis.setStandardTickUnits(new TuttiNumberTickUnitSource(true)); + domainAxis.setMinorTickMarksVisible(true); + + chart.getXYPlot().getRenderer().setSeriesPaint(0, getConfig().getColorComputedWeights()); + + final ChartPanel chartPanel = new ChartPanel(chart); + chartPanel.setDomainZoomable(false); + chartPanel.setMouseZoomable(false); + chartPanel.setPopupMenu(null); + + JPanel histogramPanel = ui.getHistogramPanel(); + histogramPanel.add(chartPanel, BorderLayout.CENTER); + } + + protected void initLogTable(SpeciesFrequencyUI ui) { + JXTable logTable = ui.getLogsTable(); + + // create log table column model + DefaultTableColumnModelExt logColumnModel = new DefaultTableColumnModelExt(); + + { // Date + addColumnToModel(logColumnModel, + SpeciesFrequencyLogCellComponent.newEditor(ui), + SpeciesFrequencyLogCellComponent.newRender(), + SpeciesFrequencyLogsTableModel.LABEL); + } + + // create log table model + SpeciesFrequencyLogsTableModel logTableModel = new SpeciesFrequencyLogsTableModel(logColumnModel); + logTableModel.setRows(new ArrayList<SpeciesFrequencyLogRowModel>()); + + logTable.setModel(logTableModel); + logTable.setColumnModel(logColumnModel); + + // by default do not authorize to change column orders + logTable.getTableHeader().setReorderingAllowed(false); + Highlighter evenHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + HighlightPredicate.ODD, + getConfig().getColorAlternateRow()); + logTable.addHighlighter(evenHighlighter); + } + + protected void initObsTable() { + + JXTable obsTable = ui.getObsTable(); + + // can show / hide some columns in model + obsTable.setColumnControlVisible(true); + + // create obsTable column model + DefaultTableColumnModelExt columnModel = + new DefaultTableColumnModelExt(); + Decorator<Caracteristic> caracteristicDecorator = + getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_PARAMETER_ONLY_WITH_UNIT); + Decorator<Caracteristic> caracteristicTipDecorator = + getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_WITH_UNIT); + + Decorator<CaracteristicQualitativeValue> caracteristicQualitativeDecorator = + getDecorator(CaracteristicQualitativeValue.class, null); + +// { +// // Id column +// +// addIdColumnToModel(columnModel, IndividualObservationBatchTableModel.ID, obsTable); +// +// } + + { // Species column + + Decorator<Species> speciesDecorator = getDecorator( + Species.class, DecoratorService.FROM_PROTOCOL); + addComboDataColumnToModel(columnModel, + IndividualObservationBatchTableModel.SPECIES, + speciesDecorator, getDataContext().getReferentSpeciesWithSurveyCode()); + } + + { // Weight column + + addFloatColumnToModel(columnModel, + IndividualObservationBatchTableModel.WEIGHT, + weightUnit, + obsTable); + } + + { // Size column + + addFloatColumnToModel(columnModel, + IndividualObservationBatchTableModel.SIZE, + TuttiUI.DECIMAL3_PATTERN, + obsTable); + } + + { // Length step caracteristic column + + addComboDataColumnToModel(columnModel, + IndividualObservationBatchTableModel.LENGTH_STEP_CARACTERISTIC, + getDecorator(Caracteristic.class, null), + getDataContext().getLengthStepCaracteristics()); + + } + + List<Caracteristic> defaultCaracteristic = getModel().getDefaultCaracteristic(); + + + for (Caracteristic caracteristic : defaultCaracteristic) { + String header = caracteristicDecorator.toString(caracteristic); + String headerTip = caracteristicTipDecorator.toString(caracteristic); + + CaracteristicColumnIdentifier id = CaracteristicColumnIdentifier.newCaracteristicId( + caracteristic, + IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS, + header, + headerTip + ); + + switch (caracteristic.getCaracteristicType()) { + + case NUMBER: + + addFloatColumnToModel(columnModel, + id, + TuttiUI.DECIMAL3_PATTERN, + obsTable); + + break; + case QUALITATIVE: + List<CaracteristicQualitativeValue> values = + caracteristic.getQualitativeValue(); + addComboDataColumnToModel( + columnModel, + id, + caracteristicQualitativeDecorator, + values); + break; + case TEXT: + + addColumnToModel(columnModel, id); + + break; + } + } + + { // Other caracteristics column + + Set<Caracteristic> caracteristicsToSkip = Collections.unmodifiableSet( + Sets.newHashSet(getModel().getDefaultCaracteristic())); + + addColumnToModel(columnModel, + CaracteristicMapCellComponent.newEditor(ui, caracteristicsToSkip), + CaracteristicMapCellComponent.newRender(getContext()), + IndividualObservationBatchTableModel.OTHER_CARACTERISTICS); + + } + + { // Comment column + + addColumnToModel(columnModel, + CommentCellEditor.newEditor(ui), + CommentCellRenderer.newRender(), + IndividualObservationBatchTableModel.COMMENT); + } + + { // File column + + addColumnToModel(columnModel, + AttachmentCellEditor.newEditor(ui), + AttachmentCellRenderer.newRender(getDecorator(Attachment.class, null)), + IndividualObservationBatchTableModel.ATTACHMENT); + } + + // create obsTable model + IndividualObservationBatchTableModel tableModel = + new IndividualObservationBatchTableModel(weightUnit, + columnModel); + + obsTable.setModel(tableModel); + obsTable.setColumnModel(columnModel); + +// initBatchTable(obsTable, columnModel, tableModel); + } + +// protected void addIdColumnToModel(TableColumnModel model, +// ColumnIdentifier identifier, +// JTable table) { +// +// final TableCellRenderer defaultRenderer = table.getDefaultRenderer(Number.class); +// final Decorator<String> idDecorator = getDecorator(String.class, DecoratorService.SPACE_EVERY_3_DIGIT); +// +// TableCellRenderer idTableCellRenderer = new TableCellRenderer() { +// @Override +// public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { +// +// String text = null; +// if (value != null) { +// text = idDecorator.toString(value); +// } +// +// Component result = defaultRenderer.getTableCellRendererComponent(table, text, isSelected, hasFocus, row, column); +// if (result instanceof JLabel) { +// JLabel jLabel = (JLabel) result; +// jLabel.setHorizontalTextPosition(SwingConstants.RIGHT); +// +// } +// return result; +// } +// }; +// +// addColumnToModel(model, null, idTableCellRenderer, identifier); +// +// } + protected void consumeFeedRecord(FeedReaderMeasureRecord record) { if (record.isValid()) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 1fc9987..064340d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -22,6 +22,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; * #L% */ +import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; @@ -37,6 +38,7 @@ import org.apache.commons.logging.LogFactory; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; +import java.util.List; import java.util.Map; import java.util.Set; @@ -217,7 +219,17 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa */ protected final XYSeriesCollection dataset; - public SpeciesFrequencyUIModel(WeightUnit weightUnit, SampleCategoryModel sampleCategoryModel) { + /** + * Default caracteristics coming from protocol. + * + * @since 4.5 + */ + protected final List<Caracteristic> defaultCaracteristic; + + + public SpeciesFrequencyUIModel(WeightUnit weightUnit, + SampleCategoryModel sampleCategoryModel, + List<Caracteristic> defaultCaracteristic) { super(SpeciesBatchRowModel.class, null, null); this.weightUnit = weightUnit; this.sampleCategoryModel = sampleCategoryModel; @@ -229,6 +241,10 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa dataset = new XYSeriesCollection(series); dataset.setIntervalPositionFactor(0); dataset.setIntervalWidth(0); + + this.defaultCaracteristic = defaultCaracteristic == null ? + Lists.<Caracteristic>newArrayList() : + Lists.newArrayList(defaultCaracteristic); } public void reloadRows() { @@ -655,4 +671,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public void setDataSetIntervalWidth(float step) { dataset.setIntervalWidth(step); } + + public List<Caracteristic> getDefaultCaracteristic() { + return defaultCaracteristic; + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit 9ad8c03d92824d83ecbe0eaf706fbe81ad13653c Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 22 14:30:13 2016 +0100 organize imports --- .../catches/species/frequency/SpeciesFrequencyUIHandler.java | 7 ------- 1 file changed, 7 deletions(-) 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 05715ba..a0ab515 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 @@ -75,20 +75,13 @@ import org.jfree.chart.axis.NumberTickUnitSource; import org.jfree.chart.axis.ValueAxis; import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.ApplicationBusinessException; -import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; import javax.swing.JComponent; -import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSplitPane; -import javax.swing.JTable; import javax.swing.JTextField; -import javax.swing.SwingConstants; import javax.swing.SwingUtilities; -import javax.swing.table.TableCellRenderer; -import javax.swing.table.TableColumnModel; import java.awt.BorderLayout; -import java.awt.Component; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit 47f37eacb5e5dab3ac86b7447567aa74e80d7a5a Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 23 09:31:57 2016 +0100 activtation ou desactivation de cellules de la tables des mensurations en fonction du mode de copie (refs #6926) --- .../frequency/CopyIndividualObservationMode.java | 10 +++++++++ .../frequency/SpeciesFrequencyTableModel.java | 26 ++++++++++++++++++++++ .../species/frequency/SpeciesFrequencyUI.jaxx | 9 +++++--- .../frequency/SpeciesFrequencyUIHandler.java | 9 -------- .../species/frequency/SpeciesFrequencyUIModel.java | 20 ++++++++++++++++- 5 files changed, 61 insertions(+), 13 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/CopyIndividualObservationMode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/CopyIndividualObservationMode.java new file mode 100644 index 0000000..a73cd97 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/CopyIndividualObservationMode.java @@ -0,0 +1,10 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public enum CopyIndividualObservationMode { + + ALL, NOTHING, SIZE +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java index 0658008..6e3dbb0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java @@ -120,6 +120,32 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp } @Override + protected boolean isCellEditable(int rowIndex, int columnIndex, ColumnIdentifier<SpeciesFrequencyRowModel> propertyName) { + boolean result; + + CopyIndividualObservationMode copyIndividualObservationMode = uiModel.getCopyIndividualObservationMode(); + if (copyIndividualObservationMode == null) { + result = super.isCellEditable(rowIndex, columnIndex, propertyName); + + } else { + switch (copyIndividualObservationMode) { + case ALL: + result = false; + break; + case NOTHING: + result = true; + break; + case SIZE: + result = WEIGHT.equals(propertyName); + break; + default: + result = super.isCellEditable(rowIndex, columnIndex, propertyName); + } + } + return result; + } + + @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex, diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx index 486dbd2..75a0913 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx @@ -252,9 +252,12 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { verticalAlignment='{SwingConstants.CENTER}' constraints="BorderLayout.NORTH"> <JLabel id='copyToSizeTableLabel'/> - <JRadioButton id='copyAllButton'/> - <JRadioButton id='copyNothingButton'/> - <JRadioButton id='copySizesButton'/> + <JRadioButton id='copyAllButton' + onActionPerformed='model.setCopyIndividualObservationMode(CopyIndividualObservationMode.ALL)'/> + <JRadioButton id='copyNothingButton' + onActionPerformed='model.setCopyIndividualObservationMode(CopyIndividualObservationMode.NOTHING)'/> + <JRadioButton id='copySizesButton' + onActionPerformed='model.setCopyIndividualObservationMode(CopyIndividualObservationMode.SIZE)'/> </HBox> <JScrollPane id='obsPanel' constraints="BorderLayout.CENTER"> <JXTable id='obsTable'/> 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 a0ab515..1cb1707 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 @@ -711,15 +711,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // // } - { // Species column - - Decorator<Species> speciesDecorator = getDecorator( - Species.class, DecoratorService.FROM_PROTOCOL); - addComboDataColumnToModel(columnModel, - IndividualObservationBatchTableModel.SPECIES, - speciesDecorator, getDataContext().getReferentSpeciesWithSurveyCode()); - } - { // Weight column addFloatColumnToModel(columnModel, diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 064340d..4a15261 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -97,6 +97,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_CAN_EDIT_LENGTH_STEP = "canEditLengthStep"; + public static final String PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE = "copyIndividualObservationMode"; + /** * Fill mode. * @@ -212,6 +214,13 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa */ protected boolean canEditLengthStep = true; + + /** + * What to copy from the individual observations to the data table + * @since 4.5 + */ + protected CopyIndividualObservationMode copyIndividualObservationMode; + /** * To store graph series. * @@ -226,7 +235,6 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa */ protected final List<Caracteristic> defaultCaracteristic; - public SpeciesFrequencyUIModel(WeightUnit weightUnit, SampleCategoryModel sampleCategoryModel, List<Caracteristic> defaultCaracteristic) { @@ -515,6 +523,16 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa firePropertyChange(PROPERTY_USE_RTP, oldValue, useRTP); } + public CopyIndividualObservationMode getCopyIndividualObservationMode() { + return copyIndividualObservationMode; + } + + public void setCopyIndividualObservationMode(CopyIndividualObservationMode copyIndividualObservationMode) { + Object oldValue = getCopyIndividualObservationMode(); + this.copyIndividualObservationMode = copyIndividualObservationMode; + firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, oldValue, copyIndividualObservationMode); + } + public Set<SpeciesFrequencyRowModel> getEmptyRows() { return emptyRows; } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit c7698c5ff48c63f5b41fbaec3eade4035ce4fb5b Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 11:35:02 2016 +0100 - suppression de l'onglet observations individuelles dans la capture - ajout des lignes dans la table d'obs individuelles dans les mensurations (refs #8019) --- .../operation/FishingOperationsUIHandler.java | 4 +- .../content/operation/catches/EditCatchesUI.jaxx | 28 - .../content/operation/catches/EditCatchesUI.jcss | 12 - .../operation/catches/EditCatchesUIHandler.java | 46 +- .../operation/catches/EditCatchesUIModel.java | 11 +- .../create/CreateBenthosBatchUIHandler.java | 2 +- .../benthos/split/SplitBenthosBatchUIHandler.java | 2 +- .../CopyIndividualObservationMode.java | 2 +- .../IndividualObservationBatchTableModel.java | 2 +- .../IndividualObservationBatchUI.jaxx | 97 --- .../IndividualObservationBatchUI.jcss | 106 --- .../IndividualObservationBatchUIHandler.java | 759 --------------------- .../IndividualObservationBatchUIModel.java | 141 ---- ...ExportMultiPostIndividualObservationAction.java | 79 --- ...ImportMultiPostIndividualObservationAction.java | 81 --- ...enCreateIndividualObservationBatchUIAction.java | 62 -- .../RemoveAllIndividualObservationBatchAction.java | 156 ----- .../RemoveIndividualObservationBatchAction.java | 118 ---- ...SpeciesForIndividualObservationBatchAction.java | 103 --- .../create/CreateIndividualObservationBatchUI.jaxx | 135 ---- .../create/CreateIndividualObservationBatchUI.jcss | 137 ---- .../CreateIndividualObservationBatchUIHandler.java | 438 ------------ .../CreateIndividualObservationBatchUIModel.java | 290 -------- ...teIndividualObservationBatchAndCloseAction.java | 64 -- ...ndividualObservationBatchAndContinueAction.java | 73 -- ...eateIndividualObservationBatchCancelAction.java | 59 -- .../create/CreateSpeciesBatchUIHandler.java | 2 +- .../frequency/SpeciesFrequencyTableModel.java | 1 + .../species/frequency/SpeciesFrequencyUI.jaxx | 1 + .../species/frequency/SpeciesFrequencyUI.jcss | 8 +- .../frequency/SpeciesFrequencyUIHandler.java | 7 +- .../species/frequency/SpeciesFrequencyUIModel.java | 1 + .../species/split/SplitSpeciesBatchUIHandler.java | 2 +- .../actions/EditFishingOperationAction.java | 3 - .../EditFishingOperationInValidationUIAction.java | 2 - .../util/table/AbstractTuttiTableUIHandler.java | 20 +- 36 files changed, 37 insertions(+), 3017 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java index cb068e3..a575048 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java @@ -78,8 +78,7 @@ public class FishingOperationsUIHandler extends AbstractTuttiTabContainerUIHandl EditCatchesUIModel catchesUIModel = new EditCatchesUIModel( getConfig().getSpeciesWeightUnit(), getConfig().getBenthosWeightUnit(), - getConfig().getMarineLitterWeightUnit(), - getConfig().getIndividualObservationWeightUnit()); + getConfig().getMarineLitterWeightUnit()); // load existing cruise Cruise cruise = getDataContext().getCruise(); @@ -179,7 +178,6 @@ public class FishingOperationsUIHandler extends AbstractTuttiTabContainerUIHandl ecUI.getBenthosTabFishingOperationReminderLabel().setTitle(fishingOperationText); ecUI.getMarineLitterTabFishingOperationReminderLabel().setTitle(fishingOperationText); ecUI.getAccidentalTabFishingOperationReminderLabel().setTitle(fishingOperationText); - ecUI.getIndividualObservationTabFishingOperationReminderLabel().setTitle(fishingOperationText); } }); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx index 56216ac..6a8ff08 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx @@ -35,8 +35,6 @@ fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.create.CreateBenthosBatchUI fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.split.SplitBenthosBatchUI fr.ifremer.tutti.ui.swing.content.operation.catches.marinelitter.MarineLitterBatchUI - fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUI - fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.CreateIndividualObservationBatchUI fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI fr.ifremer.tutti.ui.swing.content.operation.catches.species.create.CreateSpeciesBatchUI @@ -96,9 +94,6 @@ public EditCatchesUI(FishingOperationsUI parentUI) { <CardLayout2Ext id='accidentalTabPanelLayout' constructorParams='this, "accidentalTabPanel"'/> - <CardLayout2Ext id='individualObservationTabPanelLayout' - constructorParams='this, "individualObservationTabPanel"'/> - <TuttiHelpBroker id='broker' constructorParams='"tutti.editCatchBatch.help"'/> <JToolBar id='catchesCaracteristicsTabToolBar'> @@ -191,29 +186,6 @@ public EditCatchesUI(FishingOperationsUI parentUI) { </JXTitledPanel> </JPanel> </tab> - <tab id='individualObservationTab'> - <JPanel id='individualObservationTabPanel'> - <JXTitledPanel - id='individualObservationTabFishingOperationReminderLabel' - constraints='EditCatchesUIHandler.MAIN_CARD'> - <IndividualObservationBatchUI id='individualObservationTabContent' - constructorParams='this'/> - </JXTitledPanel> - <JXTitledPanel id='individualObservationTabCreateBatchReminderLabel' - constraints='EditCatchesUIHandler.CREATE_BATCH_CARD'> - <CreateIndividualObservationBatchUI - id='individualObservationTabCreateBatch' - constructorParams='this'/> - </JXTitledPanel> - <JXTitledPanel - id='individualObservationCaracteristicMapEditorReminderLabel' - constraints='EditCatchesUIHandler.EDIT_CARACTERISTICS_CARD'> - <CaracteristicMapEditorUI - id='individualObservationCaracteristicMapEditor' - constructorParams='individualObservationTabContent'/> - </JXTitledPanel> - </JPanel> - </tab> <tab id='accidentalTab'> <JPanel id='accidentalTabPanel'> <JXTitledPanel id='accidentalTabFishingOperationReminderLabel' diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jcss index 524d58c..5551975 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jcss @@ -80,10 +80,6 @@ ComputableDataEditor { rightDecoration: {marineLitterTabContent.getMarineLitterBatchTabToolBar()}; } -#individualObservationTabFishingOperationReminderLabel { - rightDecoration: {individualObservationTabContent.getIndividualObservationBatchTabToolBar()}; -} - #accidentalTabFishingOperationReminderLabel { rightDecoration: {accidentalTabContent.getAccidentalBatchTabToolBar()}; } @@ -108,14 +104,6 @@ ComputableDataEditor { border: {BorderFactory.createTitledBorder(t("tutti.editCatchBatch.legend.accidental"))}; } -#individualObservationTabPanel { - layout:{individualObservationTabPanelLayout}; -} - -#individualObservationTable { - border: {BorderFactory.createTitledBorder(t("tutti.editCatchBatch.legend.individualObservation"))}; -} - #exportFishingOperationReportButton { actionIcon: export; text: "tutti.editCatchBatch.action.exportFishingOperationReport"; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java index 5242a0b..d37b1a2 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java @@ -191,8 +191,7 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi setCustomTab(1, ui.getSpeciesTabContent().getModel()); setCustomTab(2, ui.getBenthosTabContent().getModel()); setCustomTab(3, ui.getMarineLitterTabContent().getModel()); - setCustomTab(4, ui.getIndividualObservationTabContent().getModel()); - setCustomTab(5, ui.getAccidentalTabContent().getModel()); + setCustomTab(4, ui.getAccidentalTabContent().getModel()); getTabPanel().setSelectedIndex(1); // when internal tab change, close any attachments popup @@ -217,7 +216,6 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi ui.getSpeciesTabContent().getSpeciesBatchAttachmentsButton().onCloseUI(); ui.getBenthosTabContent().getBenthosBatchAttachmentsButton().onCloseUI(); ui.getMarineLitterTabContent().getMarineLitterBatchAttachmentsButton().onCloseUI(); - ui.getIndividualObservationTabContent().getIndividualObservationBatchAttachmentsButton().onCloseUI(); ui.getAccidentalTabContent().getAccidentalBatchAttachmentsButton().onCloseUI(); } @@ -252,7 +250,6 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi closeUI(ui.getBenthosTabFrequencyEditor()); closeUI(ui.getMarineLitterTabContent()); closeUI(ui.getAccidentalTabContent()); - closeUI(ui.getIndividualObservationTabContent()); } @Override @@ -689,47 +686,6 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi } } - public void setIndividualObservationSelectedCard(String card) { - setIndividualObservationSelectedCard(card, null); - } - - public void setIndividualObservationSelectedCard(String card, Species species) { - JPanel panel = ui.getIndividualObservationTabPanel(); - CardLayout2Ext layout = (CardLayout2Ext) panel.getLayout(); - if (!card.equals(layout.getSelected())) { - layout.setSelected(card); - - JPanel actionPanel = getUI().getCreateFishingOperationActions(); - if (MAIN_CARD.equals(card)) { - registerValidators(); - actionPanel.setVisible(true); - - } else { - actionPanel.setVisible(false); - TuttiUI tuttiUi = null; - JXTitledPanel titlePanel = null; - String title = ""; - - if (CREATE_BATCH_CARD.equals(card)) { - tuttiUi = ui.getIndividualObservationTabCreateBatch(); - titlePanel = ui.getIndividualObservationTabCreateBatchReminderLabel(); - title = n("tutti.createIndividualObservationBatch.title"); - - } else if (EDIT_CARACTERISTICS_CARD.equals(card)) { - titlePanel = ui.getIndividualObservationCaracteristicMapEditorReminderLabel(); - title = n("tutti.editCaracteristics.title"); - } - - if (tuttiUi != null) { - registerValidators(tuttiUi.getHandler().getValidator()); - } - if (titlePanel != null) { - titlePanel.setTitle(ui.getIndividualObservationTabFishingOperationReminderLabel().getTitle() + " - " + t(title, decorate(species))); - } - } - } - } - public void setAccidentalSelectedCard(String card) { setAccidentalSelectedCard(card, null); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java index 09bbef0..df5c727 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java @@ -158,17 +158,9 @@ public class EditCatchesUIModel extends AbstractTuttiBeanUIModel<CatchBatch, Edi */ protected final WeightUnit marineLitterWeightUnit; - /** - * Indivudual observation weight unit. - * - * @since 2.5 - */ - protected final WeightUnit individualObservationWeightUnit; - public EditCatchesUIModel(WeightUnit speciesWeightUnit, WeightUnit benthosWeightUnit, - WeightUnit marineLitterWeightUnit, - WeightUnit individualObservationWeightUnit) { + WeightUnit marineLitterWeightUnit) { super(fromBeanBinder, toBeanBinder); //FIXME See if this can be configurable or guess from other weightUnits if (WeightUnit.G == speciesWeightUnit && @@ -180,7 +172,6 @@ public class EditCatchesUIModel extends AbstractTuttiBeanUIModel<CatchBatch, Edi this.speciesWeightUnit = speciesWeightUnit; this.benthosWeightUnit = benthosWeightUnit; this.marineLitterWeightUnit = marineLitterWeightUnit; - this.individualObservationWeightUnit = individualObservationWeightUnit; speciesTotalSortedComputedOrNotWeight.addPropagateListener( PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT, this); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java index 4d63da0..9c09685 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIHandler.java @@ -495,7 +495,7 @@ public class CreateBenthosBatchUIHandler extends AbstractTuttiTableUIHandler<Spl // remove all listener on tables we could add before uninstallTableSaveOnRowChangedSelectionListener(); - uninstallTableKeyListener(); + uninstallTableKeyListener(getTable()); if (log.isDebugEnabled()) { log.debug("Install new table model " + tableModel); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIHandler.java index 0f958b7..21ad094 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/split/SplitBenthosBatchUIHandler.java @@ -452,7 +452,7 @@ public class SplitBenthosBatchUIHandler extends AbstractTuttiTableUIHandler<Spli // remove all listener on tables we could add before uninstallTableSaveOnRowChangedSelectionListener(); - uninstallTableKeyListener(); + uninstallTableKeyListener(getTable()); if (log.isDebugEnabled()) { log.debug("Install new table model " + tableModel); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/CopyIndividualObservationMode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/CopyIndividualObservationMode.java similarity index 60% rename from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/CopyIndividualObservationMode.java rename to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/CopyIndividualObservationMode.java index a73cd97..402a42c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/CopyIndividualObservationMode.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/CopyIndividualObservationMode.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; +package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation; /** * @author Kevin Morin (Code Lutin) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java index 74cb4c6..f22197b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java @@ -86,7 +86,7 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab public IndividualObservationBatchTableModel(WeightUnit weightUnit, TableColumnModelExt columnModel) { - super(columnModel, false, false); + super(columnModel, true, true); this.weightUnit = weightUnit; setNoneEditableCols(ID); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx deleted file mode 100644 index b4fb771..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx +++ /dev/null @@ -1,97 +0,0 @@ -<!-- - #%L - Tutti :: UI - %% - Copyright (C) 2012 - 2014 Ifremer - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> - -<JPanel id='editIndividualObservationBatchTopPanel' - layout='{new BorderLayout()}' - decorator='help' - implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<IndividualObservationBatchUIModel, IndividualObservationBatchUIHandler>'> - - <import> - fr.ifremer.tutti.ui.swing.TuttiHelpBroker - fr.ifremer.tutti.ui.swing.TuttiUIContext - fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel - fr.ifremer.tutti.ui.swing.util.TuttiUI - fr.ifremer.tutti.ui.swing.util.TuttiUIUtil - fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment - - org.nuiton.jaxx.widgets.number.NumberEditor - - org.jdesktop.swingx.JXTable - - javax.swing.ListSelectionModel - - java.awt.Color - java.awt.Dimension - - static org.nuiton.i18n.I18n.t - </import> - - <script><![CDATA[ - -public IndividualObservationBatchUI(TuttiUI<?,?> parentUI) { - TuttiUIUtil.setParentUI(this, parentUI); -} - ]]></script> - - <IndividualObservationBatchUIModel id='model' - initializer='getContextValue(IndividualObservationBatchUIModel.class)'/> - - <BeanValidator id='validator' bean='model' - uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> - </BeanValidator> - - <TuttiHelpBroker id='broker' - constructorParams='"tutti.editIndividualObservationBatch.help"'/> - - <JToolBar id='individualObservationBatchTabToolBar'> - <JMenuBar id='menu'> - <JMenu id='menuAction'> - <JMenuItem id='importMultiPostButton'/> - <JMenuItem id='exportMultiPostButton'/> - </JMenu> - </JMenuBar> - <ButtonAttachment id='individualObservationBatchAttachmentsButton' - constructorParams='handler.getContext(), getContextValue(EditCatchesUIModel.class)'/> - </JToolBar> - - <JPopupMenu id='tablePopup'> - <JMenuItem id='removeIndividualObservationBatchMenu'/> - <JMenuItem id='removeAllIndividualObservationBatchMenu'/> - </JPopupMenu> - - <JPanel id='tableToolbar' - constraints='BorderLayout.NORTH' - layout='{new BorderLayout()}' - styleClass="buttonPanel"> - <JPanel layout='{new GridLayout(1,0)}' - constraints='BorderLayout.WEST'> - <JButton id='createIndividualObservationBatchButton'/> - </JPanel> - </JPanel> - - <JScrollPane id='tableScrollPane' constraints='BorderLayout.CENTER'> - <JXTable id='table' - onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)' - onKeyPressed='handler.openRowMenu(event, tablePopup)'/> - </JScrollPane> - -</JPanel> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jcss deleted file mode 100644 index 67a3afb..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jcss +++ /dev/null @@ -1,106 +0,0 @@ -/* - * #%L - * Tutti :: UI - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -#editIndividualObservationBatchTopPanel { - _help: {"tutti.editIndividualObservationBatch.help"}; -} - -#individualObservationBatchTabToolBar { - floatable: false; - opaque: true; - borderPainted: false; -} - -#menu { - border:{null}; - background:{javax.swing.UIManager.getColor("MenuBar.background")}; -} - -#menuAction { - opaque: true; - text: "tutti.toolbar.menu.action"; - toolTipText: "tutti.toolbar.menu.action.tip"; - i18nMnemonic: "tutti.toolbar.menu.action.mnemonic"; -} - -#individualObservationBatchAttachmentsButton { - toolTipText: "tutti.editIndividualObservationBatch.action.attachments.tip"; - focusPainted: false; -} - -#tablePopup { - label: "tutti.editIndividualObservationBatch.title.batchActions"; -} - -#table { - selectionMode: {ListSelectionModel.SINGLE_SELECTION}; - /*selectionBackground: {null};*/ - selectionForeground: {Color.BLACK}; - sortable: false; -} - -#importMultiPostButton { - actionIcon: import; - text: "tutti.editIndividualObservationBatch.action.importMultiPost"; - toolTipText: "tutti.editIndividualObservationBatch.action.importMultiPost.tip"; - i18nMnemonic: "tutti.editIndividualObservationBatch.action.importMultiPost.mnemonic"; - _applicationAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions.ImportMultiPostIndividualObservationAction.class}; - _help: {"tutti.editIndividualObservationBatch.action.importMultiPost.help"}; -} - -#exportMultiPostButton { - actionIcon: export; - text: "tutti.editIndividualObservationBatch.action.exportMultiPost"; - toolTipText: "tutti.editIndividualObservationBatch.action.exportMultiPost.tip"; - i18nMnemonic: "tutti.editIndividualObservationBatch.action.exportMultiPost.mnemonic"; - _applicationAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions.ExportMultiPostIndividualObservationAction.class}; - _help: {"tutti.editIndividualObservationBatch.action.exportMultiPost.help"}; -} - -#createIndividualObservationBatchButton { - actionIcon: batch-create; - text: "tutti.editIndividualObservationBatch.action.createBatch"; - toolTipText: "tutti.editIndividualObservationBatch.action.createBatch.tip"; - i18nMnemonic: "tutti.editIndividualObservationBatch.action.createBatch.mnemonic"; - _simpleAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions.OpenCreateIndividualObservationBatchUIAction.class}; - _help: {"tutti.editIndividualObservationBatch.action.createBatch.help"}; -} - -#removeIndividualObservationBatchMenu { - actionIcon: batch-delete; - text: "tutti.editIndividualObservationBatch.action.removeBatch"; - toolTipText: "tutti.editIndividualObservationBatch.action.removeBatch.tip"; - i18nMnemonic: "tutti.editIndividualObservationBatch.action.removeBatch.mnemonic"; - _applicationAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions.RemoveIndividualObservationBatchAction.class}; - enabled: {model.isRemoveBatchEnabled()}; - _help: {"tutti.editIndividualObservationBatch.action.removeBatch.help"}; -} - -#removeAllIndividualObservationBatchMenu { - actionIcon: batch-delete; - text: "tutti.editIndividualObservationBatch.action.removeAllBatch"; - toolTipText: "tutti.editIndividualObservationBatch.action.removeAllBatch.tip"; - i18nMnemonic: "tutti.editIndividualObservationBatch.action.removeAllBatch.mnemonic"; - _applicationAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions.RemoveAllIndividualObservationBatchAction.class}; - enabled: {model.isRemoveBatchEnabled()}; - _help: {"tutti.editIndividualObservationBatch.action.removeAllBatch.help"}; -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java deleted file mode 100644 index 777ad42..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java +++ /dev/null @@ -1,759 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation; - -/* - * #%L - * Tutti :: UI - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; -import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.Attachment; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; -import fr.ifremer.tutti.persistence.entities.data.SampleCategory; -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.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.type.WeightUnit; -import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractTuttiBatchTableUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.CreateIndividualObservationBatchUIModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; -import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; -import fr.ifremer.tutti.ui.swing.util.TuttiUI; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor; -import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer; -import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapCellComponent; -import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapColumnUIHandler; -import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapEditorUI; -import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor; -import fr.ifremer.tutti.ui.swing.util.comment.CommentCellRenderer; -import fr.ifremer.tutti.ui.swing.util.table.CaracteristicColumnIdentifier; -import fr.ifremer.tutti.util.Numbers; -import jaxx.runtime.validator.swing.SwingValidator; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jdesktop.swingx.JXTable; -import org.jdesktop.swingx.table.DefaultTableColumnModelExt; -import org.nuiton.decorator.Decorator; -import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; -import org.nuiton.validator.NuitonValidatorResult; - -import javax.swing.JComponent; -import javax.swing.JOptionPane; -import java.io.Serializable; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static org.nuiton.i18n.I18n.t; - -/** - * @author Kevin Morin - kmorin@codelutin.com - * @since 1.4 - */ -public class IndividualObservationBatchUIHandler - extends AbstractTuttiBatchTableUIHandler<IndividualObservationBatchRowModel, IndividualObservationBatchUIModel, IndividualObservationBatchTableModel, IndividualObservationBatchUI> - implements CaracteristicMapColumnUIHandler { - - private static final Log log = - LogFactory.getLog(IndividualObservationBatchUIHandler.class); - - /** - * Weight unit. - * - * @since 2.5 - */ - protected WeightUnit weightUnit; - - protected WeightUnit speciesWeightUnit; - - public Integer PMFM_ID_SORTED_UNSORTED; - - public IndividualObservationBatchUIHandler() { - super(IndividualObservationBatchRowModel.PROPERTY_SPECIES, - IndividualObservationBatchRowModel.PROPERTY_WEIGHT, - IndividualObservationBatchRowModel.PROPERTY_SIZE, - IndividualObservationBatchRowModel.PROPERTY_LENGTH_STEP_CARACTERISTIC, - IndividualObservationBatchRowModel.PROPERTY_CARACTERISTICS, - IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS, - IndividualObservationBatchRowModel.PROPERTY_COMMENT, - IndividualObservationBatchRowModel.PROPERTY_ATTACHMENT); - } - - //------------------------------------------------------------------------// - //-- AbstractTuttiBatchTableUIHandler methods --// - //------------------------------------------------------------------------// - - @Override - protected ColumnIdentifier<IndividualObservationBatchRowModel> getCommentIdentifier() { - return IndividualObservationBatchTableModel.COMMENT; - } - - @Override - protected ColumnIdentifier<IndividualObservationBatchRowModel> getAttachementIdentifier() { - return IndividualObservationBatchTableModel.ATTACHMENT; - } - - @Override - public void selectFishingOperation(FishingOperation bean) { - - boolean empty = bean == null; - - IndividualObservationBatchUIModel model = getModel(); - - List<IndividualObservationBatchRowModel> rows; - - if (empty) { - rows = null; - } else { - - if (log.isDebugEnabled()) { - log.debug("Get individualObservation batch for fishingOperation: " + - bean.getId()); - } - rows = Lists.newArrayList(); - - if (!TuttiEntities.isNew(bean)) { - PersistenceService persistenceService = getPersistenceService(); - List<IndividualObservationBatch> batches = - persistenceService.getAllIndividualObservationBatch(bean.getId()); - - for (IndividualObservationBatch aBatch : batches) { - - // set the surveycode - if (getDataContext().isProtocolFilled()) { - // get the surveycode from the species list of the model - List<Species> speciesList = getDataContext().getReferentSpeciesWithSurveyCode(); - int i = speciesList.indexOf(aBatch.getSpecies()); - if (i > -1) { - aBatch.setSpecies(speciesList.get(i)); - } - } - - IndividualObservationBatchRowModel entry = - new IndividualObservationBatchRowModel( - weightUnit, - aBatch, - getModel().getDefaultCaracteristic()); - - List<Attachment> attachments = - persistenceService.getAllAttachments(entry.getObjectType(), - entry.getObjectId()); - - entry.addAllAttachment(attachments); - rows.add(entry); - } - } - } - model.setRows(rows); - } - - //------------------------------------------------------------------------// - //-- AbstractTuttiTableUIHandler methods --// - //------------------------------------------------------------------------// - - @Override - public IndividualObservationBatchTableModel getTableModel() { - return (IndividualObservationBatchTableModel) getTable().getModel(); - } - - @Override - public JXTable getTable() { - return ui.getTable(); - } - - @Override - protected boolean isRowValid(IndividualObservationBatchRowModel row) { - IndividualObservationBatch batch = row.toEntity(); - NuitonValidatorResult validator = getValidationService().validateEditIndividualObservationBatch(batch); - boolean result = !validator.hasErrorMessagess(); - return result; - } - - @Override - protected void saveSelectedRowIfRequired(TuttiBeanMonitor<IndividualObservationBatchRowModel> rowMonitor, - IndividualObservationBatchRowModel row) { - - if (row != null && row.isValid() && rowMonitor.wasModified()) { - - // monitored bean was modified, save it - if (log.isDebugEnabled()) { - log.debug("Row " + row + " was modified, will save it"); - } - - String title = buildReminderLabelTitle(row.getSpecies(), - null, - "Sauvegarde de Données individuelles : ", - "Ligne :" + (getTableModel().getRowIndex(row) + 1)); - - showInformationMessage(title); - - rowMonitor.setBean(null); - saveRow(row); - rowMonitor.setBean(row); - - // clear modified flag on the monitor - rowMonitor.clearModified(); - } - } - - //------------------------------------------------------------------------// - //-- AbstractTuttiUIHandler methods --// - //------------------------------------------------------------------------// - - @Override - public SwingValidator<IndividualObservationBatchUIModel> getValidator() { - return ui.getValidator(); - } - - @Override - public void beforeInit(IndividualObservationBatchUI ui) { - - super.beforeInit(ui); - if (log.isDebugEnabled()) { - log.debug("beforeInit: " + ui); - } - - weightUnit = getConfig().getIndividualObservationWeightUnit(); - speciesWeightUnit = getConfig().getSpeciesWeightUnit(); - - PMFM_ID_SORTED_UNSORTED = - getPersistenceService().getSortedUnsortedCaracteristic().getIdAsInt(); - - // get the default caracteristics - List<Caracteristic> defaultCaracteristic = - getDataContext().getDefaultIndividualObservationCaracteristics(); - - // create model - EditCatchesUIModel catchesUIModel = - ui.getContextValue(EditCatchesUIModel.class); - IndividualObservationBatchUIModel model = - new IndividualObservationBatchUIModel(catchesUIModel, - defaultCaracteristic); - ui.setContextValue(model); - } - - @Override - public void afterInit(IndividualObservationBatchUI ui) { - - if (log.isDebugEnabled()) { - log.debug("afterInit: " + ui); - } - - initUI(ui); - - JXTable table = getTable(); - - // can show / hide some columns in model - table.setColumnControlVisible(true); - - // create table column model - DefaultTableColumnModelExt columnModel = - new DefaultTableColumnModelExt(); - Decorator<Caracteristic> caracteristicDecorator = - getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_PARAMETER_ONLY_WITH_UNIT); - Decorator<Caracteristic> caracteristicTipDecorator = - getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_WITH_UNIT); - - Decorator<CaracteristicQualitativeValue> caracteristicQualitativeDecorator = - getDecorator(CaracteristicQualitativeValue.class, null); - - { - // Id column - - addIdColumnToModel(columnModel, IndividualObservationBatchTableModel.ID, table); - - } - - { // Species column - - Decorator<Species> speciesDecorator = getDecorator( - Species.class, DecoratorService.FROM_PROTOCOL); - addComboDataColumnToModel(columnModel, - IndividualObservationBatchTableModel.SPECIES, - speciesDecorator, getDataContext().getReferentSpeciesWithSurveyCode()); - } - - { // Weight column - - addFloatColumnToModel(columnModel, - IndividualObservationBatchTableModel.WEIGHT, - weightUnit, - table); - } - - { // Size column - - addFloatColumnToModel(columnModel, - IndividualObservationBatchTableModel.SIZE, - TuttiUI.DECIMAL3_PATTERN, - table); - } - - { // Length step caracteristic column - - addComboDataColumnToModel(columnModel, - IndividualObservationBatchTableModel.LENGTH_STEP_CARACTERISTIC, - getDecorator(Caracteristic.class, null), - getDataContext().getLengthStepCaracteristics()); - - } - - List<Caracteristic> defaultCaracteristic = - getModel().getDefaultCaracteristic(); - - - for (Caracteristic caracteristic : defaultCaracteristic) { - String header = caracteristicDecorator.toString(caracteristic); - String headerTip = caracteristicTipDecorator.toString(caracteristic); - - CaracteristicColumnIdentifier id = CaracteristicColumnIdentifier.newCaracteristicId( - caracteristic, - IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS, - header, - headerTip - ); - - switch (caracteristic.getCaracteristicType()) { - - case NUMBER: - - addFloatColumnToModel(columnModel, - id, - TuttiUI.DECIMAL3_PATTERN, - table); - - break; - case QUALITATIVE: - List<CaracteristicQualitativeValue> values = - caracteristic.getQualitativeValue(); - addComboDataColumnToModel( - columnModel, - id, - caracteristicQualitativeDecorator, - values); - break; - case TEXT: - - addColumnToModel(columnModel, id); - - break; - } - } - - { // Other caracteristics column - - Set<Caracteristic> caracteristicsToSkip = Collections.unmodifiableSet( - Sets.newHashSet(getModel().getDefaultCaracteristic())); - - addColumnToModel(columnModel, - CaracteristicMapCellComponent.newEditor(ui, caracteristicsToSkip), - CaracteristicMapCellComponent.newRender(getContext()), - IndividualObservationBatchTableModel.OTHER_CARACTERISTICS); - - } - - { // Comment column - - addColumnToModel(columnModel, - CommentCellEditor.newEditor(ui), - CommentCellRenderer.newRender(), - IndividualObservationBatchTableModel.COMMENT); - } - - { // File column - - addColumnToModel(columnModel, - AttachmentCellEditor.newEditor(ui), - AttachmentCellRenderer.newRender(getDecorator(Attachment.class, null)), - IndividualObservationBatchTableModel.ATTACHMENT); - } - - // create table model - IndividualObservationBatchTableModel tableModel = - new IndividualObservationBatchTableModel(weightUnit, - columnModel); - - table.setModel(tableModel); - table.setColumnModel(columnModel); - - initBatchTable(table, columnModel, tableModel); - } - - @Override - protected void beforeOpenPopup(int rowIndex, int columnIndex) { - super.beforeOpenPopup(rowIndex, columnIndex); - - boolean enableRemove = false; - - if (rowIndex != -1) { - - // there is a selected row - enableRemove = true; - } - IndividualObservationBatchUIModel model = getModel(); - model.setRemoveBatchEnabled(enableRemove); - } - - @Override - protected JComponent getComponentToFocus() { - return getUI().getTable(); - } - - @Override - public void onCloseUI() { - if (log.isDebugEnabled()) { - log.debug("closing: " + ui); - } - ui.getIndividualObservationBatchAttachmentsButton().onCloseUI(); - } - - @Override - public CaracteristicMapEditorUI getCaracteristicMapEditor() { - EditCatchesUI parent = getParentContainer(EditCatchesUI.class); - return parent.getIndividualObservationCaracteristicMapEditor(); - } - - @Override - public void showCaracteristicMapEditor(Species species) { - EditCatchesUI parent = getParentContainer(EditCatchesUI.class); - parent.getHandler().setIndividualObservationSelectedCard(EditCatchesUIHandler.EDIT_CARACTERISTICS_CARD, species); - } - - @Override - public void hideCaracteristicMapEditor() { - EditCatchesUI parent = getParentContainer(EditCatchesUI.class); - parent.getHandler().setIndividualObservationSelectedCard(EditCatchesUIHandler.MAIN_CARD); - } - - //------------------------------------------------------------------------// - //-- Public methods --// - //------------------------------------------------------------------------// - - public void addBatch(CreateIndividualObservationBatchUIModel model) { - if (model.isValid()) { - - IndividualObservationBatchTableModel tableModel = getTableModel(); - - if (model.isCreateFromBatch()) { - - Species species = model.getSpecies(); - - String speciesStr = decorate(species); - - // check if there is some rows to create - - if (!model.isSpeciesFromBatchWithCount()) { - - String htmlMessage = String.format("<html>%s</html>", - t("tutti.createIndividualObservationBatch.warn.nocount", speciesStr)); - JOptionPane.showMessageDialog(getContext().getMainUI(), - htmlMessage, - t("tutti.createIndividualObservationBatch.warn.nocount.title"), - JOptionPane.WARNING_MESSAGE); - return; - } - - // check if there is already some indivudal data for this species - - Set<Species> speciesUsed = getModel().getSpeciesUsed(); - if (speciesUsed.contains(species)) { - - String htmlMessage = String.format( - CONFIRMATION_FORMAT, - t("tutti.createIndividualObservationBatch.confirm.alreadyUsedSpecies.message", speciesStr), - t("tutti.createIndividualObservationBatch.confirm.alreadyUsedSpecies.help")); - int response = JOptionPane.showConfirmDialog( - getTopestUI(), - htmlMessage, - t("tutti.createIndividualObservationBatch.confirm.alreadyUsedSpecies.title"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.WARNING_MESSAGE); - - - boolean create = response == JOptionPane.OK_OPTION; - - if (!create) { - return; - } - } - EditCatchesUI parent = getParentContainer(EditCatchesUI.class); - - SpeciesBatchUIModel speciesBatchUIModel = parent.getSpeciesTabContent().getModel(); - - // get species rows to use (all leafs for the given species) - - List<SpeciesBatchRowModel> leafs = - speciesBatchUIModel.getLeafs(species); - - List<IndividualObservationBatchRowModel> rowsToCreate = Lists.newArrayList(); - - CaracteristicMap defaultCaracteristics = new CaracteristicMap(); - defaultCaracteristics.putAll(model.getCaracteristics()); - - List<Caracteristic> defaultCaracteristic = - Lists.newArrayList(model.getDefaultCaracteristic()); - defaultCaracteristic.addAll(defaultCaracteristics.keySet()); - - for (SpeciesBatchRowModel leaf : leafs) { - - CaracteristicMap batchCaracteristics = new CaracteristicMap(); - - for (SampleCategory<?> sampleCategory : leaf) { - if (PMFM_ID_SORTED_UNSORTED.equals(sampleCategory.getCategoryId())) { - // do not use vrac / hors vrac caracteristic ? - continue; - } - if (sampleCategory.getCategoryValue() == null) { - // not using this category - continue; - } - if (defaultCaracteristic.contains(sampleCategory.getCategoryDef().getCaracteristic())) { - - // use default caracteristics - defaultCaracteristics.put(sampleCategory.getCategoryDef().getCaracteristic(), - sampleCategory.getCategoryValue()); - } else { - - // use other caracteristics - batchCaracteristics.put(sampleCategory.getCategoryDef().getCaracteristic(), - sampleCategory.getCategoryValue()); - } - - } - - List<SpeciesFrequencyRowModel> frequencies = leaf.getFrequency(); - - if (CollectionUtils.isEmpty(frequencies)) { - - // no frequency, create a simple row - - int nbRow = Numbers.getValueOrComputedValue(leaf.getNumber(), 0); - - for (int i = 0; i < nbRow; i++) { - IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); - newRow.setSpecies(species); - newRow.getCaracteristics().putAll(batchCaracteristics); - -// //FIXME Keep this ? -// newRow.getDefaultCaracteristics().putAll(defaultCaracteristics); -// //FIXME Keep this? -// newRow.setWeight(model.getWeight()); -// //FIXME Keep this? -// newRow.setSize(model.getSize()); -// //FIXME Keep this? -// newRow.setLengthStepCaracteristic(model.getLengthStepCaracteristic()); - - rowsToCreate.add(newRow); - - } - - if (nbRow == 1) { - - // apply also weight found - IndividualObservationBatchRowModel lastRow = - rowsToCreate.get(rowsToCreate.size() - 1); - Float weight = Numbers.getValueOrComputedValue( - leaf.getWeight(), - leaf.getFinestCategory().getCategoryWeight()); - if (weight != null) { - - // convert weight units - weight = speciesWeightUnit.toEntity(weight); - weight = weightUnit.fromEntity(weight); - } - lastRow.setWeight(weight); - } - - } else { - - boolean withOneFrequency = frequencies.size() == 1; - - for (SpeciesFrequencyRowModel frequency : frequencies) { - - // create a row for each frequency - - int nbRow = Numbers.getValueOrComputedValue( - frequency.getNumber(), 0); - - Float weight = null; - if (nbRow == 1) { - - // apply also weight found - weight = frequency.getWeight(); - if (weight == null) { - - if (withOneFrequency) { - - // special case : only one frequency - // with one value, can use the batch weight - - weight = Numbers.getValueOrComputedValue( - leaf.getWeight(), - leaf.getFinestCategory().getCategoryWeight()); - } - } - - if (weight != null) { - - // convert weight units - weight = speciesWeightUnit.toEntity(weight); - weight = weightUnit.fromEntity(weight); - } - - - } - - for (int i = 0; i < nbRow; i++) { - IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); - newRow.setSpecies(species); - newRow.setWeight(weight); - newRow.setSize(frequency.getLengthStep()); - newRow.setLengthStepCaracteristic(frequency.getLengthStepCaracteristic()); - - newRow.getCaracteristics().putAll(batchCaracteristics); - newRow.getDefaultCaracteristics().putAll(defaultCaracteristics); - - rowsToCreate.add(newRow); - } - } - } - } - - int nbRowsToCreate = rowsToCreate.size(); - - boolean create; - - int maxIndividualObservationRowsToCreate = - getConfig().getMaxIndividualObservationRowsToCreate(); - - if (maxIndividualObservationRowsToCreate < nbRowsToCreate) { - - // ask confirmation - - String htmlMessage = String.format( - CONFIRMATION_FORMAT, - t("tutti.createIndividualObservationBatch.confirm.message", speciesStr, nbRowsToCreate), - t("tutti.createIndividualObservationBatch.confirm.help")); - int response = JOptionPane.showConfirmDialog( - getTopestUI(), - htmlMessage, - t("tutti.createIndividualObservationBatch.confirm.title"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.WARNING_MESSAGE); - - - create = response == JOptionPane.OK_OPTION; - } else { - - create = true; - } - - if (create) { - - if (log.isInfoEnabled()) { - log.info("Will create " + rowsToCreate.size() + " individual observation batches"); - } - - for (IndividualObservationBatchRowModel newRow : rowsToCreate) { - - recomputeRowValidState(newRow); - - saveRow(newRow); - - tableModel.addNewRow(newRow); - } - - TuttiUIUtil.selectFirstCellOnLastRow(getTable()); - } - - } else { - - IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); - newRow.setSpecies(model.getSpecies()); - newRow.setWeight(model.getWeight()); - newRow.setSize(model.getSize()); - newRow.setLengthStepCaracteristic(model.getLengthStepCaracteristic()); - newRow.getDefaultCaracteristics().putAll(model.getCaracteristics()); - - recomputeRowValidState(newRow); - - saveRow(newRow); - - tableModel.addNewRow(newRow); - TuttiUIUtil.selectFirstCellOnLastRow(getTable()); - } - } - - } - - //------------------------------------------------------------------------// - //-- Internal methods --// - //------------------------------------------------------------------------// - - protected void saveRow(IndividualObservationBatchRowModel row) { - - IndividualObservationBatch entityToSave = row.toEntity(); - - CaracteristicMap caracteristics = new CaracteristicMap(); - entityToSave.setCaracteristics(caracteristics); - - // push back not null extra caracteristics - for (Map.Entry<Caracteristic, Serializable> entry : row.getCaracteristics().entrySet()) { - Serializable value = entry.getValue(); - if (value != null) { - caracteristics.put(entry.getKey(), value); - } - } - - // push back not null default caracteristics - for (Map.Entry<Caracteristic, Serializable> entry : row.getDefaultCaracteristics().entrySet()) { - Serializable value = entry.getValue(); - if (value != null) { - caracteristics.put(entry.getKey(), value); - } - } - - FishingOperation fishingOperation = getModel().getFishingOperation(); - entityToSave.setFishingOperation(fishingOperation); - - if (TuttiEntities.isNew(entityToSave)) { - - entityToSave = getPersistenceService().createIndividualObservationBatch(entityToSave); - row.setId(entityToSave.getId()); - } else { - getPersistenceService().saveIndividualObservationBatch(entityToSave); - } - - fireBatchSaved(row); - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java deleted file mode 100644 index 22ca4c6..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java +++ /dev/null @@ -1,141 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation; - -/* - * #%L - * Tutti :: UI - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractTuttiBatchUIModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; -import org.nuiton.jaxx.application.swing.tab.TabContentModel; -import org.apache.commons.collections4.CollectionUtils; - -import java.util.List; -import java.util.Set; - -import static org.nuiton.i18n.I18n.n; - -/** - * @author Kevin Morin - kmorin@codelutin.com - * @since 1.4 - */ -public class IndividualObservationBatchUIModel extends AbstractTuttiBatchUIModel<IndividualObservationBatchRowModel, IndividualObservationBatchUIModel> - implements TabContentModel { - - private static final long serialVersionUID = 1L; - - public static final String PROPERTY_REMOVE_BATCH_ENABLED = "removeBatchEnabled"; - - /** Can user remove a selected batch? */ - protected boolean removeBatchEnabled; - - /** - * Default caracteristics coming from protocol. - * - * @since 2.5 - */ - protected final List<Caracteristic> defaultCaracteristic; - - public IndividualObservationBatchUIModel(EditCatchesUIModel catchesUIModel, - List<Caracteristic> defaultCaracteristic) { - super(catchesUIModel); - this.defaultCaracteristic = defaultCaracteristic == null ? - Lists.<Caracteristic>newArrayList() : - Lists.newArrayList(defaultCaracteristic); - } - - public boolean isRemoveBatchEnabled() { - return removeBatchEnabled; - } - - public void setRemoveBatchEnabled(boolean removeBatchEnabled) { - this.removeBatchEnabled = removeBatchEnabled; - firePropertyChange(PROPERTY_REMOVE_BATCH_ENABLED, null, removeBatchEnabled); - } - - public List<Caracteristic> getDefaultCaracteristic() { - return defaultCaracteristic; - } - - public Species getLastSpeciesUsed() { - Species result = null; - if (!rows.isEmpty()) { - result = rows.get(rows.size() - 1).getSpecies(); - } - return result; - } - - public Caracteristic getLastLengthStepCaracteristicUsed() { - Caracteristic result = null; - if (!rows.isEmpty()) { - result = rows.get(rows.size() - 1).getLengthStepCaracteristic(); - } - return result; - } - - public Set<Species> getSpeciesUsed() { - Set<Species> result = Sets.newHashSet(); - for (IndividualObservationBatchRowModel row : getRows()) { - result.add(row.getSpecies()); - } - return result; - } - - //------------------------------------------------------------------------// - //-- TabContentModel --// - //------------------------------------------------------------------------// - - @Override - public boolean isEmpty() { - boolean result = true; - if (CollectionUtils.isNotEmpty(getRows())) { - - // check if every line is not valid - for (IndividualObservationBatchRowModel row : rows) { - if (row.isValid()) { - - // found a valid row so not empty - result = false; - break; - } - } - } - return result; - } - - @Override - public String getTitle() { - return n("tutti.label.tab.individualObservations"); - } - - @Override - public String getIcon() { - return null; - } - - @Override - public boolean isCloseable() { - return false; - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/ExportMultiPostIndividualObservationAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/ExportMultiPostIndividualObservationAction.java deleted file mode 100644 index 157bed5..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/ExportMultiPostIndividualObservationAction.java +++ /dev/null @@ -1,79 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions; - -/* - * #%L - * Tutti :: UI - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.service.catches.multipost.MultiPostExportService; -import fr.ifremer.tutti.ui.swing.content.operation.catches.actions.ExportMultiPostActionSupport; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIModel; - -import java.io.File; - -import static org.nuiton.i18n.I18n.t; - -/** - * @author Kevin Morin - kmorin@codelutin.com - * @since 2.2 - */ -public class ExportMultiPostIndividualObservationAction - extends ExportMultiPostActionSupport<IndividualObservationBatchUIModel, IndividualObservationBatchUI, IndividualObservationBatchUIHandler> { - - public ExportMultiPostIndividualObservationAction(IndividualObservationBatchUIHandler handler) { - super(handler); - } - - @Override - protected String getFileExtension() { - return "tuttiIndividualObservation"; - } - - @Override - protected String getFileExtensionDescription() { - return t("tutti.common.file.tuttiIndividualObservation"); - } - - @Override - protected String getFileChooserTitle() { - return t("tutti.editIndividualObservationBatch.action.exportMultiPost.destinationFile.title"); - } - - @Override - protected String getFileChooserButton() { - return t("tutti.editIndividualObservationBatch.action.exportMultiPost.destinationFile.button"); - } - - @Override - protected String getSuccessMessage(File file) { - return t("tutti.editIndividualObservationBatch.action.exportMultiPost.success", file); - } - - @Override - protected void doExport(MultiPostExportService multiPostImportExportService, File file, FishingOperation fishingOperation) { - - multiPostImportExportService.exportIndividualObservation(file, fishingOperation); - - } - -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/ImportMultiPostIndividualObservationAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/ImportMultiPostIndividualObservationAction.java deleted file mode 100644 index 5dc393f..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/ImportMultiPostIndividualObservationAction.java +++ /dev/null @@ -1,81 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions; - -/* - * #%L - * Tutti :: UI - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.service.catches.multipost.MultiPostImportService; -import fr.ifremer.tutti.ui.swing.content.operation.catches.actions.ImportMultiPostActionSupport; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIModel; - -import java.io.File; -import java.util.Map; - -import static org.nuiton.i18n.I18n.t; - -/** - * @author Kevin Morin - kmorin@codelutin.com - * @since 2.2 - */ -public class ImportMultiPostIndividualObservationAction - extends ImportMultiPostActionSupport<IndividualObservationBatchUIModel, IndividualObservationBatchUI, IndividualObservationBatchUIHandler> { - - public ImportMultiPostIndividualObservationAction(IndividualObservationBatchUIHandler handler) { - super(handler); - } - - @Override - protected String getFileExtension() { - return "tuttiIndividualObservation"; - } - - @Override - protected String getFileExtensionDescription() { - return t("tutti.common.file.tuttiIndividualObservation"); - } - - @Override - protected String getFileChooserTitle() { - return t("tutti.editIndividualObservationBatch.action.importMultiPost.sourceFile.title"); - } - - @Override - protected String getFileChooserButton() { - return t("tutti.editIndividualObservationBatch.action.importMultiPost.sourceFile.button"); - } - - @Override - protected String getSuccessMessage(File file) { - return t("tutti.editIndividualObservationBatch.action.importMultiPost.success", file); - } - - @Override - protected Map<String, Object> importBatches(MultiPostImportService multiPostImportExportService, File file, FishingOperation operation) { - - multiPostImportExportService.importIndividualObservation(file, operation); - return null; - - } - -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/OpenCreateIndividualObservationBatchUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/OpenCreateIndividualObservationBatchUIAction.java deleted file mode 100644 index 94ed130..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/OpenCreateIndividualObservationBatchUIAction.java +++ /dev/null @@ -1,62 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions; - -/* - * #%L - * Tutti :: UI - * $Id:$ - * $HeadURL:$ - * %% - * Copyright (C) 2012 - 2015 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.CreateIndividualObservationBatchUI; -import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Created on 3/7/15. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.15 - */ -public class OpenCreateIndividualObservationBatchUIAction extends SimpleActionSupport<IndividualObservationBatchUI> { - - /** Logger. */ - private static final Log log = LogFactory.getLog(OpenCreateIndividualObservationBatchUIAction.class); - - private static final long serialVersionUID = 1L; - - public OpenCreateIndividualObservationBatchUIAction(IndividualObservationBatchUI ui) { - super(ui); - } - - @Override - protected void onActionPerformed(IndividualObservationBatchUI ui) { - - EditCatchesUI parent = ui.getParentContainer(EditCatchesUI.class); - CreateIndividualObservationBatchUI createBatchEditor = parent.getIndividualObservationTabCreateBatch(); - - createBatchEditor.getHandler().openUI(ui.getModel()); - parent.getHandler().setIndividualObservationSelectedCard(EditCatchesUIHandler.CREATE_BATCH_CARD); - - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/RemoveAllIndividualObservationBatchAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/RemoveAllIndividualObservationBatchAction.java deleted file mode 100644 index 362ac97..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/RemoveAllIndividualObservationBatchAction.java +++ /dev/null @@ -1,156 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions; - -/* - * #%L - * Tutti :: UI - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.TuttiPersistence; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIModel; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jdesktop.swingx.JXTable; - -import javax.swing.JOptionPane; -import java.util.List; - -import static org.nuiton.i18n.I18n.t; - -/** - * Created on 10/3/13. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 2.7 - */ -public class RemoveAllIndividualObservationBatchAction - extends LongActionSupport<IndividualObservationBatchUIModel, IndividualObservationBatchUI, IndividualObservationBatchUIHandler> { - - private static final Log log = - LogFactory.getLog(RemoveAllIndividualObservationBatchAction.class); - - public RemoveAllIndividualObservationBatchAction(IndividualObservationBatchUIHandler handler) { - super(handler, false); - } - - protected Species species; - - protected List<Integer> rowIndexToRemove; - - @Override - public boolean prepareAction() throws Exception { - boolean result = super.prepareAction(); - - rowIndexToRemove = null; - species = null; - - int rowIndex = -1; - - if (result) { - JXTable table = handler.getTable(); - - rowIndex = table.getSelectedRow(); - - Preconditions.checkState(rowIndex != -1, - "Cant remove batch if none is selected"); - } - - if (result) { - - IndividualObservationBatchTableModel tableModel = handler.getTableModel(); - - IndividualObservationBatchRowModel entry = tableModel.getEntry(rowIndex); - - species = entry.getSpecies(); - - rowIndexToRemove = Lists.newArrayList(); - - for (IndividualObservationBatchRowModel rowModel : tableModel.getRows()) { - if (species.equals(rowModel.getSpecies())) { - rowIndexToRemove.add(0, tableModel.getRowIndex(rowModel)); - } - } - - int answer = JOptionPane.showConfirmDialog(getContext().getActionUI(), - t("tutti.editIndividualObservationBatch.action.removeAllBatch.confirm.message", rowIndexToRemove.size(), decorate(species)), - t("tutti.editIndividualObservationBatch.action.removeAllBatch.confirm.title"), - JOptionPane.YES_NO_OPTION); - result = answer == JOptionPane.YES_OPTION; - } - - return result; - } - - @Override - public void doAction() throws Exception { - - Preconditions.checkNotNull(rowIndexToRemove); - Preconditions.checkNotNull(species); - - IndividualObservationBatchTableModel tableModel = handler.getTableModel(); - - for (Integer rowIndex : rowIndexToRemove) { - IndividualObservationBatchRowModel selectedBatch = tableModel.getEntry(rowIndex); - - boolean persisted = !TuttiEntities.isNew(selectedBatch); - - if (persisted) { - - // remove it from db - - String id = selectedBatch.getId(); - - if (log.isInfoEnabled()) { - log.info("Remove individual observation with id: " + id); - } - - TuttiPersistence persistenceService = - getContext().getPersistenceService(); - - persistenceService.deleteIndividualObservationBatch(id); - } - } - - } - - @Override - public void postSuccessAction() { - super.postSuccessAction(); - - JXTable table = handler.getTable(); - - IndividualObservationBatchTableModel tableModel = handler.getTableModel(); - - for (Integer rowIndex : rowIndexToRemove) { - tableModel.removeRow(rowIndex); - } - - TuttiUIUtil.selectFirstCellOnFirstRowAndStopEditing(table); - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/RemoveIndividualObservationBatchAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/RemoveIndividualObservationBatchAction.java deleted file mode 100644 index 5ede469..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/RemoveIndividualObservationBatchAction.java +++ /dev/null @@ -1,118 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions; - -/* - * #%L - * Tutti :: UI - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import fr.ifremer.tutti.persistence.TuttiPersistence; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIModel; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jdesktop.swingx.JXTable; - -import javax.swing.JOptionPane; - -import static org.nuiton.i18n.I18n.t; - -/** - * @author Kevin Morin - kmorin@codelutin.com - * @since 1.4 - */ -public class RemoveIndividualObservationBatchAction - extends LongActionSupport<IndividualObservationBatchUIModel, IndividualObservationBatchUI, IndividualObservationBatchUIHandler> { - - private static final Log log = - LogFactory.getLog(RemoveIndividualObservationBatchAction.class); - - public RemoveIndividualObservationBatchAction(IndividualObservationBatchUIHandler handler) { - super(handler, false); - } - - int rowIndex; - - @Override - public boolean prepareAction() throws Exception { - boolean result = super.prepareAction(); - - if (result) { - int answer = JOptionPane.showConfirmDialog(getContext().getActionUI(), - t("tutti.editIndividualObservationBatch.action.removeBatch.confirm.message"), - t("tutti.editIndividualObservationBatch.action.removeBatch.confirm.title"), - JOptionPane.YES_NO_OPTION); - result = answer == JOptionPane.YES_OPTION; - } - - return result; - } - - @Override - public void doAction() throws Exception { - - JXTable table = handler.getTable(); - - rowIndex = table.getSelectedRow(); - - Preconditions.checkState(rowIndex != -1, - "Cant remove batch if none is selected"); - - IndividualObservationBatchTableModel tableModel = handler.getTableModel(); - IndividualObservationBatchRowModel selectedBatch = tableModel.getEntry(rowIndex); - - boolean persisted = !TuttiEntities.isNew(selectedBatch); - - if (persisted) { - - // remove it from db - - String id = selectedBatch.getId(); - - if (log.isInfoEnabled()) { - log.info("Remove individual observation with id: " + id); - } - - TuttiPersistence persistenceService = - getContext().getPersistenceService(); - - persistenceService.deleteIndividualObservationBatch(id); - } - } - - @Override - public void postSuccessAction() { - super.postSuccessAction(); - - JXTable table = handler.getTable(); - - IndividualObservationBatchTableModel tableModel = handler.getTableModel(); - - tableModel.removeRow(rowIndex); - - TuttiUIUtil.selectFirstCellOnFirstRowAndStopEditing(table); - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/SelectSpeciesForIndividualObservationBatchAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/SelectSpeciesForIndividualObservationBatchAction.java deleted file mode 100644 index 8913ba9..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/SelectSpeciesForIndividualObservationBatchAction.java +++ /dev/null @@ -1,103 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions; - -/* - * #%L - * Tutti :: UI - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.persistence.entities.referential.Speciess; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.CreateIndividualObservationBatchUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.CreateIndividualObservationBatchUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.CreateIndividualObservationBatchUIModel; - -import java.util.List; -import java.util.Map; - -import static org.nuiton.i18n.I18n.t; - -/** - * Enable to select a species to the species selected in the protocol. - * - * @author Kevin Morin - kmorin@codelutin.com - * @since 2.0 - */ -public class SelectSpeciesForIndividualObservationBatchAction extends LongActionSupport<CreateIndividualObservationBatchUIModel, - CreateIndividualObservationBatchUI, - CreateIndividualObservationBatchUIHandler> { - - protected List<Species> allSpecies; - - protected List<Species> referentSpecies; - - protected Species selectedSpecies; - - public SelectSpeciesForIndividualObservationBatchAction(CreateIndividualObservationBatchUIHandler handler) { - super(handler, false); - - allSpecies = getDataContext().getSpecies(); - referentSpecies = getDataContext().getReferentSpecies(); - } - - @Override - public boolean prepareAction() throws Exception { - boolean canContinue = super.prepareAction(); - if (canContinue) { - - CreateIndividualObservationBatchUIModel model = getModel(); - - List<Species> species = Lists.newArrayList(allSpecies); - species.removeAll(model.getAvailableSpecies()); - - selectedSpecies = openAddSpeciesDialog(t("tutti.selectSpecies.title"), species); - canContinue = selectedSpecies != null; - } - return canContinue; - } - - @Override - public void doAction() throws Exception { - - CreateIndividualObservationBatchUIModel model = getModel(); - - List<Species> availableSpecies = Lists.newArrayList(model.getAvailableSpecies()); - - if (!selectedSpecies.isReferenceTaxon()) { - String decoratedSynonym = decorate(selectedSpecies, DecoratorService.FROM_PROTOCOL); - List<Species> referents = referentSpecies; - Map<String, Species> referentsById = Speciess.splitReferenceSpeciesByReferenceTaxonId(referents); - String taxonId = String.valueOf(selectedSpecies.getReferenceTaxonId()); - selectedSpecies = referentsById.get(taxonId); - String decoratedReferent = decorate(selectedSpecies, DecoratorService.FROM_PROTOCOL); - sendMessage(t("tutti.flash.info.species.replaced", decoratedSynonym, decoratedReferent)); - } - - if (!availableSpecies.contains(selectedSpecies)) { - availableSpecies.add(selectedSpecies); - } - model.setAvailableSpecies(availableSpecies); - model.setSpecies(selectedSpecies); - - } - -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx deleted file mode 100644 index 2f6281b..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx +++ /dev/null @@ -1,135 +0,0 @@ -<!-- - #%L - Tutti :: UI - %% - Copyright (C) 2012 - 2014 Ifremer - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> -<JPanel id='createIndividualObservationBatchTopPanel' - layout='{new BorderLayout()}' - decorator='help' - implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<CreateIndividualObservationBatchUIModel, CreateIndividualObservationBatchUIHandler>'> - <import> - - fr.ifremer.tutti.persistence.entities.referential.Species - fr.ifremer.tutti.persistence.entities.referential.Caracteristic - - fr.ifremer.tutti.ui.swing.TuttiHelpBroker - fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI - fr.ifremer.tutti.ui.swing.util.TuttiUI - fr.ifremer.tutti.ui.swing.util.TuttiUIUtil - - jaxx.runtime.swing.editor.bean.BeanFilterableComboBox - org.nuiton.jaxx.widgets.number.NumberEditor - - static org.nuiton.i18n.I18n.t - </import> - - <script><![CDATA[ - -public CreateIndividualObservationBatchUI(EditCatchesUI parentUI) { - TuttiUIUtil.setParentUI(this, parentUI); -} - ]]></script> - - <CreateIndividualObservationBatchUIModel id='model' - initializer='getContextValue(CreateIndividualObservationBatchUIModel.class)'/> - - <BeanValidator id='validator' bean='model' - uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> - <field name='species' - component='individualObservationSpeciesComboBox'/> - <field name='weight' - component='individualObservationWeightField'/> - <field name='size' - component='individualObservationSizeField'/> - <field name='lengthStepCaracteristic' - component='individualObservationLengthStepCaracteristicComboBox'/> - </BeanValidator> - - <TuttiHelpBroker id='broker' - constructorParams='"tutti.createIndividualObservationBatch.help"'/> - - <Table id='configurationPanel' constraints='BorderLayout.NORTH' fill='both'> - - <!-- IndividualObservation species --> - <row> - <cell anchor='west'> - <JLabel id='individualObservationSpeciesLabel'/> - </cell> - <cell weightx='1.0'> - <BeanFilterableComboBox id='individualObservationSpeciesComboBox' - constructorParams='this' - genericType='Species'/> - </cell> - <cell> - <JButton id='addSpeciesButton'/> - </cell> - </row> - - <!-- Create from batch ? --> - <row> - <cell anchor='west' columns="3"> - <JCheckBox id='individualObservationCreateFromBatch' - onItemStateChanged='handler.setBoolean(event, "createFromBatch")'/> - </cell> - </row> - - <!-- IndividualObservation weight --> - <row> - <cell anchor='west'> - <JLabel id='individualObservationWeightLabel'/> - </cell> - <cell weightx='1.0' columns='2'> - <NumberEditor id='individualObservationWeightField' - constructorParams='this'/> - </cell> - </row> - - <!-- IndividualObservation size --> - <row> - <cell anchor='west'> - <JLabel id='individualObservationSizeLabel'/> - </cell> - <cell weightx='1.0' columns='2'> - <NumberEditor id='individualObservationSizeField' - constructorParams='this'/> - </cell> - </row> - - <!-- IndividualObservation LengthStepCaracteristic --> - <row> - <cell anchor='west'> - <JLabel id='individualObservationLengthStepCaracteristicLabel'/> - </cell> - <cell weightx='1.0' columns='2'> - <BeanFilterableComboBox - id='individualObservationLengthStepCaracteristicComboBox' - constructorParams='this' - genericType='Caracteristic'/> - </cell> - </row> - - </Table> - - <!-- Form Actions --> - <JPanel layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH' styleClass="buttonPanel"> - <JButton id='cancelButton'/> - <JButton id='saveAndContinueButton'/> - <JButton id='saveAndCloseButton'/> - </JPanel> -</JPanel> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jcss deleted file mode 100644 index 1e9bb58..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jcss +++ /dev/null @@ -1,137 +0,0 @@ -/* - * #%L - * Tutti :: UI - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ -BeanFilterableComboBox { - showReset: true; - bean: {model}; -} - -NumberEditor { - autoPopup: {handler.getConfig().isAutoPopupNumberEditor()}; - showPopupButton: {handler.getConfig().isShowNumberEditorButton()}; - bean: {model}; - numberType: {Float.class}; - showReset: true; -} - -#createIndividualObservationBatchTopPanel { - _help: {"tutti.createIndividualObservationBatch.help"}; -} - -#individualObservationSpeciesLabel { - text: "tutti.createIndividualObservationBatch.field.individualObservationSpecies"; - toolTipText: "tutti.createIndividualObservationBatch.field.individualObservationSpecies.tip"; - labelFor: {individualObservationSpeciesComboBox}; - _help: {"tutti.createIndividualObservationBatch.field.individualObservationSpecies.help"}; -} - -#individualObservationSpeciesComboBox { - property: species; - selectedItem: {model.getSpecies()}; - data: {model.getAvailableSpecies()}; - _help: {"tutti.createIndividualObservationBatch.field.individualObservationSpecies.help"}; -} - -#individualObservationCreateFromBatch { - text: "tutti.createIndividualObservationBatch.field.createFromBatch"; - selected: {model.isCreateFromBatch()}; - enabled: {model.isSpeciesFromBatch()}; - toolTipText: "tutti.createIndividualObservationBatch.field.createFromBatch.tip"; - _help: {"tutti.createIndividualObservationBatch.field.createFromBatch.help"}; -} - -#individualObservationWeightLabel { - text: "tutti.createIndividualObservationBatch.field.individualObservationWeight"; - toolTipText: "tutti.createIndividualObservationBatch.field.individualObservationWeight.tip"; - labelFor: {individualObservationWeightField}; - _help: {"tutti.createIndividualObservationBatch.field.individualObservationWeight.help"}; - _addWeightUnit: {handler.getConfig().getIndividualObservationWeightUnit()}; -} - -#individualObservationWeightField { - property: weight; - numberValue: {model.getWeight()}; - _help: {"tutti.createIndividualObservationBatch.field.individualObservationWeight.help"}; -} - -#individualObservationSizeLabel { - text: "tutti.createIndividualObservationBatch.field.individualObservationSize"; - toolTipText: "tutti.createIndividualObservationBatch.field.individualObservationSize.tip"; - labelFor: {individualObservationSizeField}; - _help: {"tutti.createIndividualObservationBatch.field.individualObservationSize.help"}; -} - -#individualObservationSizeField { - property: size; - numberValue: {model.getSize()}; - _help: {"tutti.createIndividualObservationBatch.field.individualObservationSize.help"}; -} - -#individualObservationLengthStepCaracteristicLabel { - text: "tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic"; - toolTipText: "tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic.tip"; - labelFor: {individualObservationLengthStepCaracteristicComboBox}; - _help: {"tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic.help"}; -} - -#individualObservationLengthStepCaracteristicComboBox { - property: lengthStepCaracteristic; - selectedItem: {model.getLengthStepCaracteristic()}; - _help: {"tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic.help"}; -} - -#addSpeciesButton { - text: "tutti.createIndividualObservationBatch.action.addSpecies"; - toolTipText: "tutti.createIndividualObservationBatch.action.addSpecies.tip"; - i18nMnemonic: "tutti.createIndividualObservationBatch.action.addSpecies.mnemonic"; - focusable: false; - _applicationAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.actions.SelectSpeciesForIndividualObservationBatchAction.class}; - _help: {"tutti.createIndividualObservationBatch.action.addSpecies.help"}; -} - -#saveAndContinueButton { - actionIcon: save; - text: "tutti.createIndividualObservationBatch.action.saveAndContinue"; - toolTipText: "tutti.createIndividualObservationBatch.action.saveAndContinue.tip"; - i18nMnemonic: "tutti.createIndividualObservationBatch.action.saveAndContinue.mnemonic"; - enabled: {model.isValid()}; - _simpleAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.actions.CreateIndividualObservationBatchAndContinueAction.class}; - _help: {"tutti.createIndividualObservationBatch.action.saveAndContinue.help"}; -} - -#saveAndCloseButton { - actionIcon: save; - text: "tutti.createIndividualObservationBatch.action.saveAndClose"; - toolTipText: "tutti.createIndividualObservationBatch.action.saveAndClose.tip"; - i18nMnemonic: "tutti.createIndividualObservationBatch.action.saveAndClose.mnemonic"; - enabled: {model.isValid()}; - _simpleAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.actions.CreateIndividualObservationBatchAndCloseAction.class}; - _help: {"tutti.createIndividualObservationBatch.action.saveAndClose.help"}; -} - -#cancelButton { - actionIcon: cancel; - text: "tutti.createIndividualObservationBatch.action.cancel"; - toolTipText: "tutti.createIndividualObservationBatch.action.cancel.tip"; - i18nMnemonic: "tutti.createIndividualObservationBatch.action.cancel.mnemonic"; - _simpleAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.actions.CreateIndividualObservationBatchCancelAction.class}; - _help: {"tutti.createIndividualObservationBatch.action.cancel.help"}; -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java deleted file mode 100644 index 1716cc8..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java +++ /dev/null @@ -1,438 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create; - -/* - * #%L - * Tutti :: UI - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; -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.persistence.entities.referential.TaxonCache; -import fr.ifremer.tutti.persistence.entities.referential.TaxonCaches; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIModel; -import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; -import fr.ifremer.tutti.ui.swing.util.TuttiUI; -import jaxx.runtime.SwingUtil; -import jaxx.runtime.swing.Table; -import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; -import jaxx.runtime.validator.swing.SwingValidator; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.decorator.Decorator; -import org.nuiton.jaxx.application.bean.JavaBeanObjectUtil; -import org.nuiton.jaxx.widgets.number.NumberEditor; - -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JTextField; -import java.awt.GridBagConstraints; -import java.awt.Insets; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * @author Kevin Morin - kmorin@codelutin.com - * @since 1.4 - */ -public class CreateIndividualObservationBatchUIHandler extends AbstractTuttiUIHandler<CreateIndividualObservationBatchUIModel, CreateIndividualObservationBatchUI> { - - private static final Log log = - LogFactory.getLog(CreateIndividualObservationBatchUIHandler.class); - - //------------------------------------------------------------------------// - //-- AbstractTuttiUIHandler methods --// - //------------------------------------------------------------------------// - - @Override - public void beforeInit(CreateIndividualObservationBatchUI ui) { - - super.beforeInit(ui); - - // get the default caracteristics - List<Caracteristic> defaultCaracteristic = - getDataContext().getDefaultIndividualObservationCaracteristics(); - - CreateIndividualObservationBatchUIModel model = - new CreateIndividualObservationBatchUIModel(defaultCaracteristic); - ui.setContextValue(model); - listModelIsModify(model); - } - - - @Override - public void afterInit(CreateIndividualObservationBatchUI ui) { - - initUI(ui); - - initBeanFilterableComboBox(ui.getIndividualObservationSpeciesComboBox(), - Lists.newArrayList(getDataContext().getReferentSpeciesWithSurveyCode()), - null, - DecoratorService.FROM_PROTOCOL); - - List<Caracteristic> lengthStepCaracteristics = getDataContext().getLengthStepCaracteristics(); - initBeanFilterableComboBox(ui.getIndividualObservationLengthStepCaracteristicComboBox(), - Lists.newArrayList(lengthStepCaracteristics), - null); - - final Set<JComponent> editorComponents = Sets.newHashSet(); - - editorComponents.add(ui.getIndividualObservationWeightField()); - editorComponents.add(ui.getIndividualObservationSizeField()); - editorComponents.add(ui.getIndividualObservationLengthStepCaracteristicComboBox()); - - if (getDataContext().isProtocolFilled()) { - - final Map<String, Caracteristic> lengthStepCaracteristicMap = TuttiEntities.splitById(lengthStepCaracteristics); - - final TaxonCache taxonCache = TaxonCaches.createSpeciesCacheWithoutVernacularCode(getPersistenceService(), getDataContext().getProtocol()); - - getModel().addPropertyChangeListener(IndividualObservationBatch.PROPERTY_SPECIES, - new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - Species species = (Species) evt.getNewValue(); - if (species != null) { - - String lengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); - if (lengthStepPmfmId != null) { - Caracteristic lengthStepCaracteristic = lengthStepCaracteristicMap.get(lengthStepPmfmId); - getModel().setLengthStepCaracteristic(lengthStepCaracteristic); - } - } - } - }); - - // add default caracteristic editors - List<Caracteristic> caracteristics = - getDataContext().getDefaultIndividualObservationCaracteristics(); - - Table configurationPanel = ui.getConfigurationPanel(); - - Decorator<Caracteristic> caracteristicDecorator = - getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_PARAMETER_ONLY_WITH_UNIT); - - Decorator<Caracteristic> caracteristicTipDecorator = - getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_WITH_UNIT); - - int index = 6; - for (Caracteristic caracteristic : caracteristics) { - - final CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor editorModel = - getModel().newCaracteristicEditor(caracteristic); - - JComponent editor = null; - - switch (caracteristic.getCaracteristicType()) { - - case NUMBER: { - final NumberEditor numberEditor = new NumberEditor(ui); - - String name = caracteristic.getId() + "CaracteristicField"; - numberEditor.setName(name); - numberEditor.setProperty(CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor.PROPERTY_PROPERTY); - numberEditor.setShowReset(true); - numberEditor.setBean(editorModel); - numberEditor.setAutoPopup(getConfig().isAutoPopupNumberEditor()); - numberEditor.setShowPopupButton(getConfig().isShowNumberEditorButton()); - numberEditor.setNumberType(Float.class); - numberEditor.setNumberPattern(TuttiUI.DECIMAL3_PATTERN); - - editorModel.addPropertyChangeListener(CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor.PROPERTY_PROPERTY, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - numberEditor.setNumberValue((Number) evt.getNewValue()); - } - }); - - editor = numberEditor; - ui.get$objectMap().put(name, editor); - - initNumberEditor(numberEditor); - } - break; - case QUALITATIVE: - - { - final BeanFilterableComboBox<CaracteristicQualitativeValue> qualitativeValuesEditor = new BeanFilterableComboBox<CaracteristicQualitativeValue>(ui); - - String name = caracteristic.getId() + "CaracteristicComboBox"; - qualitativeValuesEditor.setName(name); - qualitativeValuesEditor.setI18nPrefix("tutti.property."); - qualitativeValuesEditor.setProperty(CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor.PROPERTY_PROPERTY); - qualitativeValuesEditor.setShowReset(true); - qualitativeValuesEditor.setBeanType(CaracteristicQualitativeValue.class); - - qualitativeValuesEditor.setBean(editorModel); - - editorModel.addPropertyChangeListener(CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor.PROPERTY_PROPERTY, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - qualitativeValuesEditor.setSelectedItem(evt.getNewValue()); - } - }); - - editor = qualitativeValuesEditor; - ui.get$objectMap().put(name, editor); - - initBeanFilterableComboBox(qualitativeValuesEditor, - Lists.newArrayList(caracteristic.getQualitativeValue()), - null); - } - - break; - case TEXT: - final JTextField textField = new JTextField(); - String name = caracteristic.getId() + "TextField"; - editorModel.addPropertyChangeListener(CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor.PROPERTY_PROPERTY, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - textField.setText((String) evt.getNewValue()); - } - }); - textField.addKeyListener(new KeyAdapter() { - - @Override - public void keyReleased(KeyEvent e) { - String value = textField.getText(); - JavaBeanObjectUtil.setProperty(editorModel, CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor.PROPERTY_PROPERTY, value); - } - }); - editor = textField; - ui.get$objectMap().put(name, editor); - initTextField(textField); - break; - } - - editorComponents.add(editor); - JLabel jLabel = new JLabel(); - jLabel.setText(caracteristicDecorator.toString(caracteristic)); - jLabel.setToolTipText(caracteristicTipDecorator.toString(caracteristic)); - jLabel.setLabelFor(editor); - jLabel.putClientProperty("help", "tutti.createIndividualObservationBatch.field.defaultCaracteristic.help"); - ui.registerHelpId(ui.getBroker(), jLabel, "tutti.createIndividualObservationBatch.field.defaultCaracteristic.help"); - - configurationPanel.add(jLabel, new GridBagConstraints(0, index, 1, 1, 0.0, 0.0, 17, 1, new Insets(3, 3, 3, 3), 0, 0)); - configurationPanel.add(SwingUtil.boxComponentWithJxLayer(editor), new GridBagConstraints(1, index, 2, 1, 1.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0)); - index++; - } - } - - getModel().addPropertyChangeListener(IndividualObservationBatch.PROPERTY_SPECIES, - new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - - CreateIndividualObservationBatchUIModel source = (CreateIndividualObservationBatchUIModel) evt.getSource(); - - Species species = (Species) evt.getNewValue(); - - source.setValueIsAdjusting(true); - - try { - if (species == null || - !source.isSpeciesFromBatch()) { - - // reset create from batch flag - source.setCreateFromBatch(false); - } - - // compute editors enable property - boolean enabled = species != null && - (!source.isCreateFromBatch() || - !source.isSpeciesFromBatch()); -// boolean enabled = species != null && -// (!source.isCreateFromBatch() || -// !source.isSpeciesFromBatch() || -// source.isSpeciesFromBatchWithOneCount()); - if (log.isInfoEnabled()) { - log.info("can edit? " + enabled + " (species changed: " + species + ")"); - } - for (JComponent editorComponent : editorComponents) { - editorComponent.setEnabled(enabled); - } - } finally { - source.setValueIsAdjusting(false); - } - } - }); - - getModel().addPropertyChangeListener(CreateIndividualObservationBatchUIModel.PROPERTY_CREATE_FROM_BATCH, - new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - - CreateIndividualObservationBatchUIModel source = (CreateIndividualObservationBatchUIModel) evt.getSource(); - Boolean newValue = (Boolean) evt.getNewValue(); - newValue = newValue != null && newValue; - - // compute editors enable property - boolean enabled = !newValue || !source.isSpeciesFromBatch(); -// boolean enabled = !newValue || -// !source.isSpeciesFromBatch() || -// source.isSpeciesFromBatchWithOneCount(); - if (log.isInfoEnabled()) { - log.info("can edit? " + enabled + " (createFromBatch changed: " + newValue + ")"); - } - for (JComponent editorComponent : editorComponents) { - editorComponent.setEnabled(enabled); - } - } - }); - - listenValidatorValid(getValidator(), getModel()); - } - - @Override - protected JComponent getComponentToFocus() { - return getUI().getIndividualObservationSpeciesComboBox(); - } - - @Override - public void onCloseUI() { - - if (log.isDebugEnabled()) { - log.debug("closing: " + ui); - } - - // evict model from validator - getValidator().setBean(null); - - // when canceling always invalid model - getModel().setValid(false); - - EditCatchesUI parent = getParentContainer(EditCatchesUI.class); - parent.getHandler().setIndividualObservationSelectedCard(EditCatchesUIHandler.MAIN_CARD); - } - - @Override - public SwingValidator<CreateIndividualObservationBatchUIModel> getValidator() { - return ui.getValidator(); - } - - //------------------------------------------------------------------------// - //-- Public methods --// - //------------------------------------------------------------------------// - - public void openUI(IndividualObservationBatchUIModel batchModel) { - - CreateIndividualObservationBatchUIModel model = getModel(); - - // connect model to validator - getValidator().setBean(model); - - model.reset(); - - // compute list of available species - - List<Species> speciesListWithSurveyCode = - getDataContext().getReferentSpeciesWithSurveyCode(); - - Map<Species, Integer> batchesSpeciesList; - - List<Species> speciesList; - - EditCatchesUI parent = getParentContainer(EditCatchesUI.class); - SpeciesBatchUIModel speciesBatchUIModel = parent.getSpeciesTabContent().getModel(); - - boolean withSpeciesBatch = - CollectionUtils.isNotEmpty(speciesBatchUIModel.getRows()); - if (withSpeciesBatch) { - - // use species from species batch - batchesSpeciesList = speciesBatchUIModel.getSpeciesCount(); - - Set<Species> speciesSet = Sets.newHashSet(batchesSpeciesList.keySet()); - - // plus readd the species filled here (individualObservations) - List<IndividualObservationBatchRowModel> rows = batchModel.getRows(); - - if (CollectionUtils.isNotEmpty(rows)) { - for (IndividualObservationBatchRowModel row : rows) { - Species species = row.getSpecies(); - speciesSet.add(species); - } - } - speciesList = Lists.newArrayList(speciesSet); - if (log.isInfoEnabled()) { - log.info("Use speciesBatch + individualObservation species : " + speciesList.size()); - } - } else { - - batchesSpeciesList = Maps.newHashMap(); - - if (getDataContext().isProtocolFilled()) { - - // using protocol species - speciesList = Lists.newArrayList(speciesListWithSurveyCode); - - // readd the species filled here (individualObservations) - List<IndividualObservationBatchRowModel> rows = batchModel.getRows(); - - if (CollectionUtils.isNotEmpty(rows)) { - for (IndividualObservationBatchRowModel row : rows) { - - Species species = row.getSpecies(); - if (!speciesList.contains(species)) { - speciesList.add(species); - } - } - } - - if (log.isInfoEnabled()) { - log.info("Use protocol + individualObservation species : " + speciesList.size()); - } - } else { - - // no species batch, no protocol use all possible species - speciesList = speciesListWithSurveyCode; - - if (log.isInfoEnabled()) { - log.info("Use all species : " + speciesList.size()); - } - } - } - - model.setBatchSpecies(batchesSpeciesList); - model.setAvailableSpecies(speciesList); - - // set last species filled here - Species lastSpeciesUsed = batchModel.getLastSpeciesUsed(); - model.setSpecies(lastSpeciesUsed); - model.setLengthStepCaracteristic(batchModel.getLastLengthStepCaracteristicUsed()); - } - -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java deleted file mode 100644 index f3b160b..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java +++ /dev/null @@ -1,290 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create; - -/* - * #%L - * Tutti :: UI - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; -import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatchs; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; -import org.apache.commons.collections4.MapUtils; -import org.apache.commons.lang3.ObjectUtils; -import org.jdesktop.beans.AbstractSerializableBean; - -import java.io.Serializable; -import java.util.List; -import java.util.Map; - -/** - * @author Kevin Morin - kmorin@codelutin.com - * @since 1.4 - */ -public class CreateIndividualObservationBatchUIModel extends AbstractTuttiBeanUIModel<IndividualObservationBatch, CreateIndividualObservationBatchUIModel> { - - private static final long serialVersionUID = 1L; - - public static final String PROPERTY_AVAILABLE_SPECIES = "availableSpecies"; - - public static final String PROPERTY_BATCH_SPECIES = "batchSpecies"; - - public static final String PROPERTY_SPECIES_FROM_BATCH = "speciesFromBatch"; - - public static final String PROPERTY_CREATE_FROM_BATCH = "createFromBatch"; - - public static final String PROPERTY_CARACTERISTICS = "caracteristics"; - - /** - * All available species (sets by protocol). - * - * @since 2.0 - */ - protected List<Species> availableSpecies; - - /** - * All species used in batches with their count. - * - * @since 2.7 - */ - protected Map<Species, Integer> batchSpecies; - - /** - * Does we want to create rows from batch? - * - * @since 2.7 - */ - protected boolean createFromBatch; - - /** - * Flag to stop fires when flag is on. - * - * @since 2.8 - */ - protected boolean valueIsAdjusting; - - /** - * Delegate edit object. - * - * @since 1.3 - */ - protected final IndividualObservationBatch editObject = - IndividualObservationBatchs.newIndividualObservationBatch(); - - /** - * Default caracteristics coming from protocol. - * - * @since 2.5 - */ - protected final List<Caracteristic> defaultCaracteristic; - - /** - * Default caracteristics editors. - * - * @since 2.5 - */ - protected final List<CaracteristicMapPropertyEditor> caracteristicEditors = - Lists.newArrayList(); - - public CreateIndividualObservationBatchUIModel(List<Caracteristic> defaultCaracteristic) { - super(null, null); - this.defaultCaracteristic = defaultCaracteristic; - editObject.setCaracteristics(new CaracteristicMap()); - } - - public boolean isValueIsAdjusting() { - return valueIsAdjusting; - } - - public void setValueIsAdjusting(boolean valueIsAdjusting) { - this.valueIsAdjusting = valueIsAdjusting; - } - - public Species getSpecies() { - return editObject.getSpecies(); - } - - public void setSpecies(Species species) { - Object oldValue = getSpecies(); - Object oldSpeciesFromBatch = isSpeciesFromBatch(); - editObject.setSpecies(species); - firePropertyChanged(IndividualObservationBatch.PROPERTY_SPECIES, oldValue, species); - firePropertyChanged(PROPERTY_SPECIES_FROM_BATCH, oldSpeciesFromBatch, isSpeciesFromBatch()); - } - - public Float getWeight() { - return editObject.getWeight(); - } - - public void setWeight(Float weight) { - Object oldValue = getWeight(); - editObject.setWeight(weight); - firePropertyChanged(IndividualObservationBatch.PROPERTY_WEIGHT, oldValue, weight); - } - - public Float getSize() { - return editObject.getSize(); - } - - public void setSize(Float size) { - Object oldValue = getSize(); - editObject.setSize(size); - firePropertyChanged(IndividualObservationBatch.PROPERTY_SIZE, oldValue, size); - } - - public Caracteristic getLengthStepCaracteristic() { - return editObject.getLengthStepCaracteristic(); - } - - public void setLengthStepCaracteristic(Caracteristic lengthStepCaracteristic) { - Object oldValue = getLengthStepCaracteristic(); - editObject.setLengthStepCaracteristic(lengthStepCaracteristic); - firePropertyChanged(IndividualObservationBatch.PROPERTY_LENGTH_STEP_CARACTERISTIC, oldValue, lengthStepCaracteristic); - } - - public CaracteristicMap getCaracteristics() { - return editObject.getCaracteristics(); - } - - public void setCaracteristics(CaracteristicMap caracteristics) { - - editObject.setCaracteristics(caracteristics); - firePropertyChanged(IndividualObservationBatch.PROPERTY_CARACTERISTICS, null, caracteristics); - } - - public List<Species> getAvailableSpecies() { - return availableSpecies; - } - - public void setAvailableSpecies(List<Species> availableSpecies) { - this.availableSpecies = availableSpecies; - firePropertyChanged(PROPERTY_AVAILABLE_SPECIES, null, availableSpecies); - } - - public Map<Species, Integer> getBatchSpecies() { - return batchSpecies; - } - - public boolean isSpeciesFromBatch() { - return MapUtils.isNotEmpty(batchSpecies) && - getSpecies() != null && - batchSpecies.containsKey(getSpecies()); - } - - public boolean isSpeciesFromBatchWithCount() { - return isSpeciesFromBatch() && batchSpecies.get(getSpecies()) > 0; - } - - public void setBatchSpecies(Map<Species, Integer> batchSpecies) { - this.batchSpecies = batchSpecies; - firePropertyChanged(PROPERTY_BATCH_SPECIES, null, batchSpecies); - firePropertyChanged(PROPERTY_SPECIES_FROM_BATCH, null, isSpeciesFromBatch()); - setCreateFromBatch(isCreateFromBatch()); - } - - public boolean isCreateFromBatch() { - return createFromBatch; - } - - public void setCreateFromBatch(boolean createFromBatch) { - Object oldValue = isCreateFromBatch(); - this.createFromBatch = createFromBatch; - firePropertyChanged(PROPERTY_CREATE_FROM_BATCH, oldValue, createFromBatch); - } - - public List<Caracteristic> getDefaultCaracteristic() { - return defaultCaracteristic; - } - - @Override - protected IndividualObservationBatch newEntity() { - return IndividualObservationBatchs.newIndividualObservationBatch(); - } - - public void reset() { - setAvailableSpecies(Lists.<Species>newArrayList()); - setBatchSpecies(Maps.<Species, Integer>newHashMap()); - setCreateFromBatch(false); - setSpecies(null); - setWeight(null); - setSize(null); - setLengthStepCaracteristic(null); - for (CaracteristicMapPropertyEditor editor : caracteristicEditors) { - editor.setProperty(null); - } - getCaracteristics().clear(); - } - - public CaracteristicMapPropertyEditor newCaracteristicEditor(Caracteristic caracteristic) { - CaracteristicMapPropertyEditor editor = new CaracteristicMapPropertyEditor(caracteristic); - caracteristicEditors.add(editor); - return editor; - } - - /** - * Model to edit a caracteristic and flush it in the caracteristc map of - * the global model. - * - * Acts as a bean for the given caracteristic. - * - * @since 2.5 - */ - public class CaracteristicMapPropertyEditor extends AbstractSerializableBean { - - private static final long serialVersionUID = 1L; - - public static final String PROPERTY_PROPERTY = "property"; - - private final Caracteristic caracteristic; - - protected Serializable property; - - public Serializable getProperty() { - return property; - } - - public void setProperty(Serializable property) { - Object oldValue = getProperty(); - this.property = property; - getCaracteristics().put(caracteristic, property); - if (ObjectUtils.notEqual(oldValue, property)) { - firePropertyChanged(PROPERTY_PROPERTY, oldValue, property); - CreateIndividualObservationBatchUIModel.this.firePropertyChanged(PROPERTY_CARACTERISTICS, null, getCaracteristics()); - } - } - - public CaracteristicMapPropertyEditor(Caracteristic caracteristic) { - this.caracteristic = caracteristic; - } - } - - @Override - public void firePropertyChanged(String propertyName, - Object oldValue, - Object newValue) { - if (!valueIsAdjusting) { - firePropertyChange(propertyName, oldValue, newValue); - } - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchAndCloseAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchAndCloseAction.java deleted file mode 100644 index d4aabf0..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchAndCloseAction.java +++ /dev/null @@ -1,64 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.actions; - -/* - * #%L - * Tutti :: UI - * $Id:$ - * $HeadURL:$ - * %% - * Copyright (C) 2012 - 2015 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.CreateIndividualObservationBatchUI; -import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Created on 3/7/15. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.15 - */ -public class CreateIndividualObservationBatchAndCloseAction extends SimpleActionSupport<CreateIndividualObservationBatchUI> { - - /** Logger. */ - private static final Log log = LogFactory.getLog(CreateIndividualObservationBatchAndCloseAction.class); - - private static final long serialVersionUID = 1L; - - public CreateIndividualObservationBatchAndCloseAction(CreateIndividualObservationBatchUI ui) { - super(ui); - } - - @Override - protected void onActionPerformed(CreateIndividualObservationBatchUI ui) { - - if (log.isDebugEnabled()) { - log.debug("Save And Close UI " + ui); - } - - EditCatchesUI parent = ui.getParentContainer(EditCatchesUI.class); - parent.getIndividualObservationTabContent().getHandler().addBatch(ui.getModel()); - - // close dialog - ui.getHandler().onCloseUI(); - - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchAndContinueAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchAndContinueAction.java deleted file mode 100644 index 5a05426..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchAndContinueAction.java +++ /dev/null @@ -1,73 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.actions; - -/* - * #%L - * Tutti :: UI - * $Id:$ - * $HeadURL:$ - * %% - * Copyright (C) 2012 - 2015 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.CreateIndividualObservationBatchUI; -import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Created on 3/7/15. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.15 - */ -public class CreateIndividualObservationBatchAndContinueAction extends SimpleActionSupport<CreateIndividualObservationBatchUI> { - - /** Logger. */ - private static final Log log = LogFactory.getLog(CreateIndividualObservationBatchAndContinueAction.class); - - private static final long serialVersionUID = 1L; - - public CreateIndividualObservationBatchAndContinueAction(CreateIndividualObservationBatchUI ui) { - super(ui); - } - - @Override - protected void onActionPerformed(CreateIndividualObservationBatchUI ui) { - - if (log.isDebugEnabled()) { - log.debug("Save And Close UI " + ui); - } - - if (log.isDebugEnabled()) { - log.debug("Save And Continue UI " + ui); - } - - EditCatchesUI parent = ui.getParentContainer(EditCatchesUI.class); - IndividualObservationBatchUI individualObservationTabContent = parent.getIndividualObservationTabContent(); - individualObservationTabContent.getHandler().addBatch(ui.getModel()); - - // re-open dialog - ui.getHandler().openUI(individualObservationTabContent.getModel()); - - // set focus to weight field - ui.getIndividualObservationWeightField().grabFocus(); - - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchCancelAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchCancelAction.java deleted file mode 100644 index 0a36c62..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchCancelAction.java +++ /dev/null @@ -1,59 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.actions; - -/* - * #%L - * Tutti :: UI - * $Id:$ - * $HeadURL:$ - * %% - * Copyright (C) 2012 - 2015 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.CreateIndividualObservationBatchUI; -import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Created on 3/7/15. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.15 - */ -public class CreateIndividualObservationBatchCancelAction extends SimpleActionSupport<CreateIndividualObservationBatchUI> { - - /** Logger. */ - private static final Log log = LogFactory.getLog(CreateIndividualObservationBatchCancelAction.class); - - private static final long serialVersionUID = 1L; - - public CreateIndividualObservationBatchCancelAction(CreateIndividualObservationBatchUI ui) { - super(ui); - } - - @Override - protected void onActionPerformed(CreateIndividualObservationBatchUI ui) { - - if (log.isDebugEnabled()) { - log.debug("Save And Close UI " + ui); - } - - ui.getHandler().onCloseUI(); - - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java index 7781ff3..8e968c5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIHandler.java @@ -493,7 +493,7 @@ public class CreateSpeciesBatchUIHandler extends AbstractTuttiTableUIHandler<Spl // remove all listener on tables we could add before uninstallTableSaveOnRowChangedSelectionListener(); - uninstallTableKeyListener(); + uninstallTableKeyListener(getTable()); if (log.isDebugEnabled()) { log.debug("Install new table model " + tableModel); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java index 6e3dbb0..8eea8ef 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java @@ -23,6 +23,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; */ import fr.ifremer.tutti.type.WeightUnit; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.CopyIndividualObservationMode; import org.jdesktop.swingx.table.TableColumnModelExt; import org.jfree.data.xy.XYSeries; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx index 75a0913..10edbbf 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx @@ -27,6 +27,7 @@ fr.ifremer.tutti.ui.swing.TuttiHelpBroker fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode + fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.CopyIndividualObservationMode fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.AddSpeciesFrequencyLengthStepCaracteristicAction fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.CancelEditSpeciesFrequencyAction fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.GenerateSpeciesFrequencyLengthStepsAction 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 2e8efc8..b7d9a39 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 @@ -334,7 +334,13 @@ ComputableDataEditor { _help: {"tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.help"}; } -//obsTable +#obsTable { + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionBackground: {null}; + selectionForeground: {Color.BLACK}; + sortable: false; + enabled: true; +} #simpleCountingNumberPanel { border: { BorderFactory.createTitledBorder(null, null) }; 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 1cb1707..51ef527 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 @@ -813,7 +813,12 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci obsTable.setModel(tableModel); obsTable.setColumnModel(columnModel); -// initBatchTable(obsTable, columnModel, tableModel); + initTable(obsTable); + + installTableKeyListener(columnModel, obsTable); + + tableModel.setRows(new ArrayList<>()); + } // protected void addIdColumnToModel(TableColumnModel model, diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 4a15261..3a1d5da 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -28,6 +28,7 @@ import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.CopyIndividualObservationMode; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.util.computable.ComputableData; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java index 71a4c99..ed266da 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSpeciesBatchUIHandler.java @@ -455,7 +455,7 @@ public class SplitSpeciesBatchUIHandler extends AbstractTuttiTableUIHandler<Spli // remove all listener on tables we could add before uninstallTableSaveOnRowChangedSelectionListener(); - uninstallTableKeyListener(); + uninstallTableKeyListener(getTable()); if (log.isDebugEnabled()) { log.debug("Install new table model " + tableModel); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/EditFishingOperationAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/EditFishingOperationAction.java index 0d9fb66..d8fa26b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/EditFishingOperationAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/EditFishingOperationAction.java @@ -786,9 +786,6 @@ public class EditFishingOperationAction extends LongActionSupport<FishingOperati progressionModel.increments("Chargement des captures accidentelles"); ui.getAccidentalTabContent().getHandler().selectFishingOperation(operationToLoad); - progressionModel.increments("Chargement des données individuelles"); - ui.getIndividualObservationTabContent().getHandler().selectFishingOperation(operationToLoad); - } else { // remove catch diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java index 11d4130..b6b3da9 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java @@ -209,7 +209,6 @@ public class EditFishingOperationInValidationUIAction extends LongActionSupport< catchesTabContent.getBenthosTabContent().getHandler().removeBatchSavedListener(batchSavedListener); catchesTabContent.getAccidentalTabContent().getHandler().removeBatchSavedListener(batchSavedListener); catchesTabContent.getMarineLitterTabContent().getHandler().removeBatchSavedListener(batchSavedListener); - catchesTabContent.getIndividualObservationTabContent().getHandler().removeBatchSavedListener(batchSavedListener); } @Override @@ -232,7 +231,6 @@ public class EditFishingOperationInValidationUIAction extends LongActionSupport< catchesTabContent.getBenthosTabContent().getHandler().addBatchSavedListener(batchSavedListener); catchesTabContent.getAccidentalTabContent().getHandler().addBatchSavedListener(batchSavedListener); catchesTabContent.getMarineLitterTabContent().getHandler().addBatchSavedListener(batchSavedListener); - catchesTabContent.getIndividualObservationTabContent().getHandler().addBatchSavedListener(batchSavedListener); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java index c51b03f..41e8c8d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java @@ -55,7 +55,9 @@ import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Enumeration; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -284,7 +286,7 @@ public abstract class AbstractTuttiTableUIHandler<R extends AbstractTuttiBeanUIM private ListSelectionListener tableSelectionListener; - private KeyAdapter keyAdapter; + private Map<JTable, KeyAdapter> keyAdapters = new HashMap<>(); protected void installTableSaveOnRowChangedSelectionListener() { @@ -372,11 +374,11 @@ public abstract class AbstractTuttiTableUIHandler<R extends AbstractTuttiBeanUIM final JTable table) { Preconditions.checkState( - keyAdapter == null, + keyAdapters.get(table) == null, "There is already a tableSelectionListener registred, " + "remove it before invoking this method."); - final AbstractApplicationTableModel<R> model = getTableModel(); + final AbstractApplicationTableModel model = (AbstractApplicationTableModel) table.getModel(); final MoveToNextEditableCellAction nextCellAction = MoveToNextEditableCellAction.newAction(model, table); final MoveToPreviousEditableCellAction previousCellAction = @@ -387,7 +389,7 @@ public abstract class AbstractTuttiTableUIHandler<R extends AbstractTuttiBeanUIM final MoveToPreviousEditableRowAction previousRowAction = MoveToPreviousEditableRowAction.newAction(model, table); - keyAdapter = new KeyAdapter() { + KeyAdapter keyAdapter = new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { @@ -428,6 +430,7 @@ public abstract class AbstractTuttiTableUIHandler<R extends AbstractTuttiBeanUIM } } }; + keyAdapters.put(table, keyAdapter); if (log.isDebugEnabled()) { log.debug("Intall " + keyAdapter); @@ -455,17 +458,18 @@ public abstract class AbstractTuttiTableUIHandler<R extends AbstractTuttiBeanUIM } } - protected void uninstallTableKeyListener() { + protected void uninstallTableKeyListener(JTable table) { + KeyAdapter keyAdapter = keyAdapters.get(table); if (keyAdapter != null) { if (log.isDebugEnabled()) { log.debug("Desintall " + keyAdapter); } - getTable().removeKeyListener(keyAdapter); + table.removeKeyListener(keyAdapter); - TableColumnModel columnModel = getTable().getColumnModel(); + TableColumnModel columnModel = table.getColumnModel(); Enumeration<TableColumn> columns = columnModel.getColumns(); while (columns.hasMoreElements()) { TableColumn tableColumn = columns.nextElement(); @@ -475,7 +479,7 @@ public abstract class AbstractTuttiTableUIHandler<R extends AbstractTuttiBeanUIM editor.getNumberEditor().getTextField().removeKeyListener(keyAdapter); } } - keyAdapter = null; + keyAdapters.remove(table); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit aad67356d2f22799d008d5b189b04a5ea0bc89f0 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 14:24:41 2016 +0100 affichage de l'histogramme dans une popup (refs #8019) --- .../species/frequency/SpeciesFrequencyUIHandler.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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 51ef527..ed119da 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 @@ -77,6 +77,7 @@ import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.ApplicationBusinessException; import javax.swing.JComponent; +import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTextField; @@ -84,6 +85,8 @@ import javax.swing.SwingUtilities; import java.awt.BorderLayout; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; @@ -656,6 +659,23 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci JPanel histogramPanel = ui.getHistogramPanel(); histogramPanel.add(chartPanel, BorderLayout.CENTER); + + chartPanel.addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent e) { + super.mouseClicked(e); + if (e.getClickCount() > 1) { + + ChartPanel chartPanel = new ChartPanel(chart); + JFrame chartPopup = new JFrame(); + chartPopup.add(chartPanel); + chartPopup.pack(); + chartPopup.setVisible(true); + + } + } + }); } protected void initLogTable(SpeciesFrequencyUI ui) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit ee48c200b8962663e81503f3fda6761b6e2faf09 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 17:43:35 2016 +0100 utilisation des rtp pour calculer les poids des lignes de mensuration (refs #8019) --- .../frequency/SpeciesFrequencyRowModel.java | 34 ++++++-- .../frequency/SpeciesFrequencyTableModel.java | 5 +- .../species/frequency/SpeciesFrequencyUI.jcss | 1 + .../frequency/SpeciesFrequencyUIHandler.java | 91 ++++++++++++++++++---- .../species/frequency/SpeciesFrequencyUIModel.java | 46 +++++++++++ 5 files changed, 156 insertions(+), 21 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java index be1e33a..c2e8db0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java @@ -30,6 +30,7 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequencys; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import fr.ifremer.tutti.ui.swing.util.computable.ComputableData; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -51,6 +52,8 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa public static final String PROPERTY_WEIGHT = "weight"; + public static final String PROPERTY_COMPUTED_WEIGHT = "computedOrNotWeight"; + public static final String PROPERTY_LENGHT_STEP_CARACTERISTIC = "lengthStepCaracteristic"; /** @@ -70,10 +73,9 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa /** * Weight of fishes observed. * - * @since 0.2 + * @since 4.5 */ - protected Float weight; - + protected ComputableData<Float> computedOrNotWeight = new ComputableData<>(); /** * Length step caracteristic. * @@ -130,6 +132,8 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa public SpeciesFrequencyRowModel(WeightUnit weightUnit) { super(fromBeanBinder, toBeanBinder); this.weightUnit = weightUnit; + computedOrNotWeight.addPropagateListener(PROPERTY_WEIGHT, this); + computedOrNotWeight.addPropagateListener(PROPERTY_COMPUTED_WEIGHT, this); } //------------------------------------------------------------------------// @@ -188,16 +192,34 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa @Override public Float getWeight() { - return weight; + return computedOrNotWeight.getData(); } @Override public void setWeight(Float weight) { Object oldValue = getWeight(); - this.weight = weight; + computedOrNotWeight.setData(weight); firePropertyChange(PROPERTY_WEIGHT, oldValue, weight); } + public Float getComputedWeight() { + return computedOrNotWeight.getComputedData(); + } + + public void setComputedWeight(Float weight) { + Object oldValue = getComputedWeight(); + computedOrNotWeight.setComputedData(weight); + firePropertyChange(PROPERTY_COMPUTED_WEIGHT, oldValue, weight); + } + + public ComputableData<Float> getComputedOrNotWeight() { + return computedOrNotWeight; + } + + public void setComputedOrNotWeight(ComputableData<Float> computedOrNotWeight) { + this.computedOrNotWeight = computedOrNotWeight; + } + @Override public Caracteristic getLengthStepCaracteristic() { return lengthStepCaracteristic; @@ -235,7 +257,7 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa } public boolean isEmpty() { - return lengthStep == null && (weight == null || number == null); + return lengthStep == null && (computedOrNotWeight.getData() == null || number == null); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java index 8eea8ef..99a8445 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java @@ -56,7 +56,7 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp n("tutti.editSpeciesFrequencies.table.header.number")); public static final ColumnIdentifier<SpeciesFrequencyRowModel> WEIGHT = ColumnIdentifier.newId( - SpeciesFrequencyRowModel.PROPERTY_WEIGHT, + SpeciesFrequencyRowModel.PROPERTY_COMPUTED_WEIGHT, n("tutti.editSpeciesFrequencies.table.header.weight"), n("tutti.editSpeciesFrequencies.table.header.weight")); @@ -308,6 +308,9 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp uiModel.recomputeRowValidState(row); uiModel.updateEmptyRow(row); + // recompute the weight with the rtp + uiModel.computeRowWeightWithRtp(row); + // Can recompute total number and weight only after valid flag change uiModel.recomputeTotalNumberAndWeight(); 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 b7d9a39..9bb4ad2 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 @@ -262,6 +262,7 @@ ComputableDataEditor { #useRTPCheckBox { text: "tutti.editSpeciesFrequencies.field.useRtp"; toolTipText: "tutti.editSpeciesFrequencies.field.useRtp.tip"; + enabled: { getModel().getRtp() != null }; _help: {"tutti.editSpeciesFrequencies.field.useRtp.help"}; } 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 ed119da..cb64e63 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 @@ -24,12 +24,16 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderEvent; import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderListener; import fr.ifremer.tutti.ichtyometer.feed.record.FeedReaderMeasureRecord; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.protocol.Rtp; +import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; @@ -56,6 +60,7 @@ import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer; import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapCellComponent; import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor; import fr.ifremer.tutti.ui.swing.util.comment.CommentCellRenderer; +import fr.ifremer.tutti.ui.swing.util.computable.ComputableDataTableCell; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; import fr.ifremer.tutti.ui.swing.util.table.CaracteristicColumnIdentifier; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; @@ -82,7 +87,9 @@ import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.SwingUtilities; +import javax.swing.table.TableCellRenderer; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; @@ -93,6 +100,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -114,6 +122,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci private JFreeChart chart; + protected Caracteristic sexCaracteristic; + /** * Weight unit. * @@ -236,7 +246,9 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci public void beforeInit(SpeciesFrequencyUI ui) { super.beforeInit(ui); + this.weightUnit = getConfig().getSpeciesWeightUnit(); + sexCaracteristic = getPersistenceService().getSexCaracteristic(); SampleCategoryModel sampleCategoryModel = getDataContext().getSampleCategoryModel(); @@ -384,6 +396,11 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } }); + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_USE_RTP, evt -> { + getModel().getRows().forEach(row -> getModel().computeRowWeightWithRtp(row)); + getTableModel().fireTableDataChanged(); + }); + // set the pattern to the weight in simple counting mode according to the weight unit ui.getSimpleCountingWeightField().setNumberPattern(weightUnit.getNumberEditorPattern()); @@ -442,6 +459,9 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci public void editBatch(FrequencyCellEditor editor) { + FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; + FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; + SpeciesBatchRowModel speciesBatch = editor.getEditRow(); SpeciesFrequencyUIModel model = getModel(); @@ -452,6 +472,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.setSimpleCount(null); model.setMinStep(null); model.setMaxStep(null); + model.setRtp(null); frequencyEditor = editor; @@ -462,8 +483,46 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci if (speciesBatch != null) { + Species species = speciesBatch.getSpecies(); + model.setTotalWeight(speciesBatch.getWeight()); + // set rtps + + TuttiProtocol protocol = getDataContext().getProtocol(); + if (protocol != null) { + + Integer referenceTaxonId = species.getReferenceTaxonId(); + Optional<SpeciesProtocol> optSpeciesProtocol = + protocol.getSpecies().stream() + .filter(sp -> sp.getSpeciesReferenceTaxonId().equals(referenceTaxonId)) + .findFirst(); + + if (optSpeciesProtocol.isPresent()) { + SpeciesProtocol speciesProtocol = optSpeciesProtocol.get(); + Rtp rtp; + QualitativeValueId sex = + (QualitativeValueId) speciesBatch.getSampleCategoryValue(sexCaracteristic.getIdAsInt()); + if (sex != null) { + + switch (sex) { + case SEX_MALE: + rtp = speciesProtocol.getRtpMale(); + break; + case SEX_FEMALE: + rtp = speciesProtocol.getRtpFemale(); + break; + default: + rtp = speciesProtocol.getRtpUndefined(); + } + + } else { + rtp = speciesProtocol.getRtpUndefined(); + } + model.setRtp(rtp); + } + } + List<SpeciesFrequencyRowModel> frequency = speciesBatch.getFrequency(); // try to load existing frequency @@ -520,8 +579,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci if (lengthStepCaracteristic == null) { - Species species = speciesBatch.getSpecies(); - String lengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); if (lengthStepPmfmId != null) { @@ -546,20 +603,19 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci listenItchtyometer(); } + + if (lengthStepCaracteristic == null) { + String speciesLengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); + if (speciesLengthStepPmfmId == null) { + mode = FrequencyConfigurationMode.SIMPLE_COUNTING; + } + } } if (log.isDebugEnabled()) { log.debug("Will edit batch row: " + speciesBatch + " with " + rows.size() + " frequency"); } - FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; - FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; - if (lengthStepCaracteristic == null) { - String speciesLengthStepPmfmId = taxonCache.getLengthStepPmfmId(speciesBatch.getSpecies()); - if (speciesLengthStepPmfmId == null) { - mode = FrequencyConfigurationMode.SIMPLE_COUNTING; - } - } Integer number = speciesBatch.getNumber(); if (number != null && rows.isEmpty()) { mode = FrequencyConfigurationMode.SIMPLE_COUNTING; @@ -616,10 +672,17 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci { // Weight - addFloatColumnToModel(columnModel, - SpeciesFrequencyTableModel.WEIGHT, - weightUnit, - table); + Color computedDataColor = getConfig().getColorComputedWeights(); + // create table column model + TableCellRenderer defaultRenderer = table.getDefaultRenderer(Object.class); + + addColumnToModel(columnModel, + ComputableDataTableCell.newEditor( + Float.class, weightUnit, computedDataColor), + ComputableDataTableCell.newRender( + defaultRenderer, weightUnit, computedDataColor), + SpeciesFrequencyTableModel.WEIGHT, + weightUnit); } // create table model diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 3a1d5da..d8ad4af 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.protocol.Rtp; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode; @@ -92,6 +93,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_USE_RTP = "useRTP"; + public static final String PROPERTY_RTP = "rtp"; + public static final String PROPERTY_EMPTY_ROWS = "emptyRows"; public static final String PROPERTY_NEXT_EDITABLE_ROW_INDEX = "nextEditableRowIndex"; @@ -164,6 +167,13 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa protected ComputableData<Float> totalComputedOrNotWeight = new ComputableData<Float>(); /** + * Rtp of the species batch + * + * @since 4.5 + */ + protected Rtp rtp; + + /** * Use the RTPs of the protocol to compute the total weight * * @since 4.5 @@ -514,6 +524,16 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa && Weights.isEqualWeight(totalWeight, computedWeight); } + public Rtp getRtp() { + return rtp; + } + + public void setRtp(Rtp rtp) { + Object oldValue = getRtp(); + this.rtp = rtp; + firePropertyChange(PROPERTY_RTP, oldValue, rtp); + } + public boolean isUseRTP() { return useRTP; } @@ -651,6 +671,32 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa } + public void computeRowWeightWithRtp(SpeciesFrequencyRowModel row) { + + Integer number = row.getNumber(); + if (number != null && isUseRTP()) { + + //Formule Poids (gramme) = a Taille (cm) ^ b + Rtp rtp = getRtp(); + + Float lengthStep = row.getLengthStep(); + if ("cm".equals(getLengthStepCaracteristicUnit())) { + // measurement in cm asked + lengthStep = lengthStep / 10; + } + + float weight = (float)(number * rtp.getA() * Math.pow(lengthStep, rtp.getB())); + if (weightUnit == WeightUnit.KG) { + weight = weight / 1000; + } + row.setComputedWeight(weight); + + } else { + row.setComputedWeight(null); + } + + } + public int numberOfRows(float lengthStep) { return cache.numberOfRows(lengthStep); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit 948d32d0b05d2c75c3a1cb470f9a8dc511a2f829 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 18:31:22 2016 +0100 vérification que le poids saisi est proche du poids calculé avec la RTP (refs #8019) --- .../java/fr/ifremer/tutti/TuttiConfiguration.java | 8 ++++ .../fr/ifremer/tutti/TuttiConfigurationOption.java | 18 ++++++++- .../i18n/tutti-persistence_en_GB.properties | 2 + .../i18n/tutti-persistence_fr_FR.properties | 2 + .../swing/content/config/TuttiConfigUIHandler.java | 6 +++ .../frequency/SpeciesFrequencyRowModel.java | 1 + .../frequency/SpeciesFrequencyUIHandler.java | 46 ++++++++++++++++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 2 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 + 9 files changed, 86 insertions(+), 1 deletion(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java index 8c0c8e2..c0377c8 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java @@ -581,6 +581,10 @@ public class TuttiConfiguration extends ApplicationConfiguration { return applicationConfig.getOptionAsFloat(TuttiConfigurationOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE.getKey()); } + public Float getDifferenceRateBetweenWeightAndRtpWeight() { + return applicationConfig.getOptionAsFloat(TuttiConfigurationOption.RTP_WEIGHTS_DIFFERENCE_RATE.getKey()); + } + public boolean getPupitriImportMissingBatches() { return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.PUPITRI_IMPORT_MISSING_BATCHES.getKey()); } @@ -649,6 +653,10 @@ public class TuttiConfiguration extends ApplicationConfiguration { return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_SELECTED_ROW.getKey()); } + public Color getColorWarningRow() { + return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_WARNING_ROW.getKey()); + } + public Color getColorCatch() { return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_CATCH.getKey()); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java index a676686..3560e9a 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java @@ -264,7 +264,7 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { "tutti.genericFormat.import.maximumRowsInErrorPerFile", n("tutti.config.option.genericFormat.import.maximumRowsInErrorPerFile.description"), "100", - int.class, + Integer.class, false), IMPORT_DB_SKIP_BACKUP( @@ -408,6 +408,14 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { false ), + RTP_WEIGHTS_DIFFERENCE_RATE( + "tutti.db.weights.rate.difference.rtp", + n("tutti.config.option.weights.rate.difference.rtp.description"), + "20.0", + Float.class, + false + ), + PROGRAM_ID( "tutti.programId", n("tutti.config.option.programId.description"), @@ -496,6 +504,14 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { false ), + COLOR_WARNING_ROW( + "tutti.ui.color.warningRow", + n("tutti.config.option.ui.color.warningRow.description"), + new Color(245, 218, 88).toString(), + Color.class, + false + ), + COLOR_CATCH( "tutti.ui.color.catch", n("tutti.config.option.ui.color.catch.description"), diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties index 115e3f1..19a4bf5 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties @@ -81,6 +81,7 @@ tutti.config.option.ui.color.rowToConfirm.description= tutti.config.option.ui.color.selectedRow.description= tutti.config.option.ui.color.species.description= tutti.config.option.ui.color.speciesOrBenthosUnsortedComputedWeightInWarning.description= +tutti.config.option.ui.color.warningRow.description= tutti.config.option.ui.config.file.description= tutti.config.option.ui.coordinateEditorType.description= tutti.config.option.ui.dateFormat.description= @@ -95,6 +96,7 @@ tutti.config.option.weight.unit.benthos.description= tutti.config.option.weight.unit.individualObservation.description= tutti.config.option.weight.unit.marineLitter.description= tutti.config.option.weight.unit.species.description= +tutti.config.option.weights.rate.difference.rtp.description= tutti.config.option.weights.rate.difference.totalAndSorted.description= tutti.config.parse.error= tutti.config.save.error= diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties index e40ee0e..4f77f48 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties @@ -74,6 +74,7 @@ tutti.config.option.ui.color.rowToConfirm.description=Ligne à confirmer tutti.config.option.ui.color.selectedRow.description=Couleur de fond d'une ligne sélectionnée dans un tableau tutti.config.option.ui.color.species.description=Couleur pour représenter les espèces dans l'écran de résumé des captures tutti.config.option.ui.color.speciesOrBenthosUnsortedComputedWeightInWarning.description=Couleur pour représenter les espèces (ou benthos) observées en erreur dans l'écran de résumé des captures +tutti.config.option.ui.color.warningRow.description=Couleur de fond d'une ligne qui est en warning tutti.config.option.ui.config.file.description=Chemin du fichier de configuration des interfaces graphiques tutti.config.option.ui.coordinateEditorType.description=Type de l'éditeur de coordonnées tutti.config.option.ui.dateFormat.description=Format de dates @@ -88,6 +89,7 @@ tutti.config.option.weight.unit.benthos.description=Unité de poids à utiliser tutti.config.option.weight.unit.individualObservation.description=Unité de poids à utiliser dans la saisies des données individuelles tutti.config.option.weight.unit.marineLitter.description=Unité de poids à utiliser dans la saisies des macro-déchêts tutti.config.option.weight.unit.species.description=Unité de poids à utiliser dans la saisies des espèces +tutti.config.option.weights.rate.difference.rtp.description=Pourcentage de différence entre le poids saisi et le poids calculé par la relation taille/poids tutti.config.option.weights.rate.difference.totalAndSorted.description=Pourcentage de différence entre les Poids totaux VRAC triés et les poids totaux VRAC en dessous duquel on demande confirmation sur la saisie tutti.config.parse.error=Erreur de parsing du fichier de configuration tutti.config.save.error=Erreur lors de la sauvegarde de la configuration dans le fichier %s diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java index 28d20d4..52b391f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java @@ -131,6 +131,9 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .addOption(TuttiConfigurationOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE) .setOptionShortLabel(t("tutti.config.option.weights.rate.difference.totalAndSorted.shortLabel")) + .addOption(TuttiConfigurationOption.RTP_WEIGHTS_DIFFERENCE_RATE) + .setOptionShortLabel(t("tutti.config.option.weights.rate.difference.rtp.shortLabel")) + .addOption(TuttiConfigurationOption.MAX_INDIVIDUAL_OBSERVATION_ROW_TO_CREATE) .setOptionShortLabel(t("tutti.config.option.ui.individualObservationRowsToCreate.shortLabel")) @@ -194,6 +197,9 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .addOption(TuttiConfigurationOption.COLOR_ROW_TO_CONFIRM) .setOptionShortLabel(t("tutti.config.option.ui.color.rowToConfirm.shortLabel")) + .addOption(TuttiConfigurationOption.COLOR_WARNING_ROW) + .setOptionShortLabel(t("tutti.config.option.ui.color.rowInWarning.shortLabel")) + .addOption(TuttiConfigurationOption.COLOR_COMPUTED_WEIGHTS) .setOptionShortLabel(t("tutti.config.option.ui.color.computedWeights.shortLabel")) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java index c2e8db0..3686510 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java @@ -76,6 +76,7 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa * @since 4.5 */ protected ComputableData<Float> computedOrNotWeight = new ComputableData<>(); + /** * Length step caracteristic. * 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 cb64e63..bbe40c6 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 @@ -69,6 +69,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.decorator.ComponentAdapter; import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.decorator.Highlighter; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; @@ -90,6 +91,7 @@ import javax.swing.SwingUtilities; import javax.swing.table.TableCellRenderer; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Component; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; @@ -696,6 +698,50 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci installTableKeyListener(columnModel, table); } + @Override + protected void addHighlighters(final JXTable table) { + + super.addHighlighters(table); + + HighlightPredicate notSelectedPredicate = new HighlightPredicate.NotHighlightPredicate(HighlightPredicate.IS_SELECTED); + HighlightPredicate weightTooDifferentFromRtpPredicate = (Component renderer, ComponentAdapter adapter) -> { + + boolean result = false; + if (table.getModel() instanceof SpeciesFrequencyTableModel && getModel().isUseRTP()) { + + SpeciesFrequencyTableModel tableModel = (SpeciesFrequencyTableModel) table.getModel(); + int viewRow = adapter.row; + int modelRow = adapter.convertRowIndexToModel(viewRow); + SpeciesFrequencyRowModel row = tableModel.getEntry(modelRow); + + Float weight = row.getWeight(); + Float rate = getConfig().getDifferenceRateBetweenWeightAndRtpWeight(); + result = weight != null && Math.abs(weight - row.getComputedWeight()) >= weight * rate / 100; + } + + return result; + }; + + // paint in a special color rows with weight in warning (not selected) + Highlighter weightTooDifferentFromRtpHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + HighlightPredicate.EDITABLE, + notSelectedPredicate, + weightTooDifferentFromRtpPredicate), + getConfig().getColorWarningRow()); + table.addHighlighter(weightTooDifferentFromRtpHighlighter); + + // paint in a special color rows with weight in warning (selected) + Highlighter weightTooDifferentFromRtpSelectedHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + HighlightPredicate.EDITABLE, + HighlightPredicate.IS_SELECTED, + weightTooDifferentFromRtpPredicate), + getConfig().getColorWarningRow().darker()); + table.addHighlighter(weightTooDifferentFromRtpSelectedHighlighter); + + } + protected void initHistogram(SpeciesFrequencyUI ui, SpeciesFrequencyUIModel model) { chart = ChartFactory.createXYBarChart(null, t("tutti.editSpeciesFrequencies.table.header.lengthStep"), 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 8ffbc39..0557c95 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 @@ -173,6 +173,7 @@ tutti.config.option.ui.color.computedWeights.shortLabel= tutti.config.option.ui.color.hightlightInfo.background.shortLabel= tutti.config.option.ui.color.hightlightInfo.foreground.shortLabel= tutti.config.option.ui.color.marineLitter.shortLabel= +tutti.config.option.ui.color.rowInWarning.shortLabel= tutti.config.option.ui.color.rowInvalid.shortLabel= tutti.config.option.ui.color.rowReadOnly.shortLabel= tutti.config.option.ui.color.rowToConfirm.shortLabel= @@ -203,6 +204,7 @@ tutti.config.option.weight.unit.benthos.shortLabel= tutti.config.option.weight.unit.individualObservation.shortLabel= tutti.config.option.weight.unit.marineLitter.shortLabel= tutti.config.option.weight.unit.species.shortLabel= +tutti.config.option.weights.rate.difference.rtp.shortLabel= tutti.config.option.weights.rate.difference.totalAndSorted.shortLabel= tutti.config.title= tutti.context.helpPage.notFound= 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 4837a22..e78bb7e 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 @@ -147,6 +147,7 @@ tutti.config.option.ui.color.computedWeights.shortLabel=Couleur de valeur calcul tutti.config.option.ui.color.hightlightInfo.background.shortLabel=Couleur du fond des libellés mis en avant (Écran Capture > Création d'un lot) tutti.config.option.ui.color.hightlightInfo.foreground.shortLabel=Couleur du texte des libellés mis en avant (Écran Capture > Création d'un lot) tutti.config.option.ui.color.marineLitter.shortLabel=Couleur des libellés de macro-déchets (Écran Capture > Résumé) +tutti.config.option.ui.color.rowInWarning.shortLabel=Couleur de lignes avec un warning tutti.config.option.ui.color.rowInvalid.shortLabel=Couleur d'une ligne invalide tutti.config.option.ui.color.rowReadOnly.shortLabel=Couleur d'une cellule en lecture seule tutti.config.option.ui.color.rowToConfirm.shortLabel=Couleur d'une espèce à confirmer @@ -177,6 +178,7 @@ tutti.config.option.weight.unit.benthos.shortLabel=Unité Benthos tutti.config.option.weight.unit.individualObservation.shortLabel=Unité données individuelles tutti.config.option.weight.unit.marineLitter.shortLabel=Unité Macro-déchêts tutti.config.option.weight.unit.species.shortLabel=Unité Espèces +tutti.config.option.weights.rate.difference.rtp.shortLabel=Pourcentage de différence entre le poids saisi et le poids calculé par la RTP tutti.config.option.weights.rate.difference.totalAndSorted.shortLabel=Pourcentage de différence entre les Poids totaux VRAC triés et les poids totaux VRAC tutti.config.title=Configuration tutti.context.helpPage.notFound=La page d'aide %s n'a pas été trouvée -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit c15557b50da0a2e1aa3c2556e1f9b198fea8c672 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 18:53:22 2016 +0100 une seule popup pour l'histogramme pour pouvoir la fermer quand on quitte (refs #8019) --- .../catches/species/frequency/SpeciesFrequencyUIHandler.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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 bbe40c6..f401cfa 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 @@ -124,6 +124,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci private JFreeChart chart; + protected final JFrame histogramPopup = new JFrame(); + protected Caracteristic sexCaracteristic; /** @@ -440,6 +442,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci log.debug("closing: " + ui); } + histogramPopup.dispose(); + frequencyEditor = null; // evict model from validator @@ -776,11 +780,11 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci super.mouseClicked(e); if (e.getClickCount() > 1) { + histogramPopup.getContentPane().removeAll(); ChartPanel chartPanel = new ChartPanel(chart); - JFrame chartPopup = new JFrame(); - chartPopup.add(chartPanel); - chartPopup.pack(); - chartPopup.setVisible(true); + histogramPopup.getContentPane().add(chartPanel); + histogramPopup.pack(); + histogramPopup.setVisible(true); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit 95f1e478713c4499d7ba70d0213d4d91428ed2ce Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 10:02:50 2016 +0100 titre de la popup de l'histogramme (refs #8019) --- .../operation/catches/EditCatchesUIHandler.java | 10 ++++-- .../frequency/SpeciesFrequencyUIHandler.java | 4 ++- .../ui/swing/util/AbstractTuttiUIHandler.java | 42 +++++++++++++++++++--- 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java index d37b1a2..5ecf01d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java @@ -456,13 +456,19 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi SpeciesFrequencyUI frequencyEditor = ui.getSpeciesTabFrequencyEditor(); - frequencyEditor.getHandler().editBatch(editor); + SpeciesBatchRowModel editRow = editor.getEditRow(); + + String frequenciesTitle = buildReminderLabelTitle(editRow.getSpecies(), + editRow, + ui.getSpeciesTabFishingOperationReminderLabel().getTitle(), + t("tutti.editSpeciesFrequencies.title"), + false); + frequencyEditor.getHandler().editBatch(editor, frequenciesTitle); // open frequency editor setSpeciesSelectedCard(EditCatchesUIHandler.EDIT_FREQUENCY_CARD); // update title - SpeciesBatchRowModel editRow = editor.getEditRow(); String title = buildReminderLabelTitle(editRow.getSpecies(), editRow, ui.getSpeciesTabFishingOperationReminderLabel().getTitle(), 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 f401cfa..abaeb2d 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 @@ -463,11 +463,13 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } } - public void editBatch(FrequencyCellEditor editor) { + public void editBatch(FrequencyCellEditor editor, String title) { FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; + histogramPopup.setTitle(title); + SpeciesBatchRowModel speciesBatch = editor.getEditRow(); SpeciesFrequencyUIModel model = getModel(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java index 7b8aa6c..f4f5ba1 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java @@ -529,11 +529,21 @@ public abstract class AbstractTuttiUIHandler<M, UI extends TuttiUI<M, ?>> extend Iterable<SampleCategory<?>> categories, String prefix, String suffix) { + return buildReminderLabelTitle(species, categories, prefix, suffix, true); + + } + + public String buildReminderLabelTitle(Species species, + Iterable<SampleCategory<?>> categories, + String prefix, + String suffix, + boolean html) { return buildReminderLabelTitle( decorate(species, DecoratorService.WITH_SURVEY_CODE), categories, prefix, - suffix); + suffix, + html); } @@ -610,9 +620,29 @@ public abstract class AbstractTuttiUIHandler<M, UI extends TuttiUI<M, ?>> extend Iterable<SampleCategory<?>> categories, String prefix, String suffix) { - StringBuilder title = new StringBuilder("<html><body style='color:black;'>" + prefix); + return buildReminderLabelTitle(species, categories, prefix, suffix, true); + } - title.append(" - [<strong>").append(species).append("</strong>]"); + protected String buildReminderLabelTitle(String species, + Iterable<SampleCategory<?>> categories, + String prefix, + String suffix, + boolean html) { + StringBuilder title = new StringBuilder(); + if (html) { + title.append("<html><body style='color:black;'>"); + } + title.append(prefix).append(" - ["); + + if (html) { + title.append("<strong>"); + } + title.append(species); + + if (html) { + title.append("</strong>"); + } + title.append("]"); if (categories != null) { for (SampleCategory<?> sampleCategory : categories) { @@ -623,7 +653,11 @@ public abstract class AbstractTuttiUIHandler<M, UI extends TuttiUI<M, ?>> extend } } - title.append(" - ").append(suffix).append("</body></html>"); + title.append(" - ").append(suffix); + if (html) { + title.append("</body></html>"); + } + return title.toString(); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit ce716ac883cf6b7aedcfcf7a27ff962a0f1c5eb3 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 11:35:29 2016 +0100 graph des poids moyens (refs #8019) --- .../operation/catches/EditCatchesUIHandler.java | 2 +- .../frequency/SpeciesFrequencyRowModel.java | 8 ++ .../frequency/SpeciesFrequencyTableModel.java | 61 ++++++++++--- .../species/frequency/SpeciesFrequencyUI.jaxx | 2 +- .../species/frequency/SpeciesFrequencyUI.jcss | 1 + .../frequency/SpeciesFrequencyUIHandler.java | 99 +++++++++++++++------ .../species/frequency/SpeciesFrequencyUIModel.java | 41 +++++++-- .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 1 + .../src/main/resources/icons/action-chart.png | Bin 0 -> 541 bytes 10 files changed, 165 insertions(+), 51 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java index 5ecf01d..5e54991 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java @@ -461,7 +461,7 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi String frequenciesTitle = buildReminderLabelTitle(editRow.getSpecies(), editRow, ui.getSpeciesTabFishingOperationReminderLabel().getTitle(), - t("tutti.editSpeciesFrequencies.title"), + "", false); frequencyEditor.getHandler().editBatch(editor, frequenciesTitle); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java index 3686510..faffe38 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java @@ -261,4 +261,12 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa return lengthStep == null && (computedOrNotWeight.getData() == null || number == null); } + public Float computeAverageWeight() { + Float averageWeight = null; + Float weight = computedOrNotWeight.getDataOrComputedData(); + if (weight != null && number != null) { + averageWeight = number == 0 ? 0 : weight / number; + } + return averageWeight; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java index 99a8445..e52ea4b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java @@ -77,7 +77,9 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp protected transient PropertyChangeListener onNumberChangedListener; - protected final XYSeries series; + protected final XYSeries frequenciesSeries; + + protected final XYSeries averageWeightsSeries; public SpeciesFrequencyTableModel(WeightUnit weightUnit, TableColumnModelExt columnModel, @@ -86,7 +88,8 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp this.weightUnit = weightUnit; this.uiModel = uiModel; this.modelCache = uiModel.cache; - this.series = uiModel.dataset.getSeries(0); + this.frequenciesSeries = uiModel.frequenciesDataset.getSeries(0); + this.averageWeightsSeries = uiModel.averageWeightsDataset.getSeries(0); setNoneEditableCols(); } @@ -235,18 +238,24 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp @Override public void propertyChange(PropertyChangeEvent evt) { + SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); + + // recompute the weight with the rtp + uiModel.computeRowWeightWithRtp(row); + Float oldValue = (Float) evt.getOldValue(); if (oldValue != null) { modelCache.removeLengthStep(oldValue); - if (series.indexOf(oldValue) >= 0) { - series.remove(oldValue); + if (frequenciesSeries.indexOf(oldValue) >= 0) { + frequenciesSeries.remove(oldValue); + } + if (averageWeightsSeries.indexOf(oldValue) >= 0) { + averageWeightsSeries.remove(oldValue); } } - SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); - Float newValue = (Float) evt.getNewValue(); if (newValue != null) { @@ -254,7 +263,8 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp if (row.getNumber() != null) { - series.addOrUpdate(newValue, row.getNumber()); + frequenciesSeries.addOrUpdate(newValue, row.getNumber()); + averageWeightsSeries.addOrUpdate(newValue, row.computeAverageWeight()); } @@ -283,6 +293,9 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); + // recompute the weight with the rtp + uiModel.computeRowWeightWithRtp(row); + Integer newValue = (Integer) evt.getNewValue(); Float lengthStep = row.getLengthStep(); @@ -292,13 +305,18 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp if (newValue == null) { // remove the value for the lengthStep - if (series.indexOf(lengthStep) >= 0) { - series.remove(lengthStep); + if (frequenciesSeries.indexOf(lengthStep) >= 0) { + frequenciesSeries.remove(lengthStep); + } + + if (averageWeightsSeries.indexOf(lengthStep) >= 0) { + averageWeightsSeries.remove(lengthStep); } } else { - series.addOrUpdate(lengthStep, row.getNumber()); + frequenciesSeries.addOrUpdate(lengthStep, row.getNumber()); + averageWeightsSeries.addOrUpdate(lengthStep, row.computeAverageWeight()); } @@ -308,9 +326,6 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp uiModel.recomputeRowValidState(row); uiModel.updateEmptyRow(row); - // recompute the weight with the rtp - uiModel.computeRowWeightWithRtp(row); - // Can recompute total number and weight only after valid flag change uiModel.recomputeTotalNumberAndWeight(); @@ -329,6 +344,26 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); modelCache.updateRowWithWeight(row); + Float lengthStep = row.getLengthStep(); + + if (lengthStep != null) { + + if (evt.getNewValue() == null) { + + // remove the value for the lengthStep + System.out.println("averageWeightsSeries.indexOf(lengthStep) " + averageWeightsSeries.indexOf(lengthStep)); + if (averageWeightsSeries.indexOf(lengthStep) >= 0) { + averageWeightsSeries.remove(lengthStep); + } + + } else { + + averageWeightsSeries.addOrUpdate(lengthStep, row.computeAverageWeight()); + + } + + } + uiModel.recomputeRowsValidateState(); uiModel.updateEmptyRow(row); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx index 10edbbf..1e66155 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx @@ -235,7 +235,7 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { <ComputableDataEditor id='totalWeightField' genericType="Float" constructorParams='this'/> </cell> <cell> - <JButton id='graphAverageWeightButton'/> + <JButton id='graphAverageWeightButton' onActionPerformed="handler.showAverageWeightsHistogram()"/> </cell> </row> </Table> 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 9bb4ad2..9cfb3f8 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 @@ -267,6 +267,7 @@ ComputableDataEditor { } #graphAverageWeightButton { + actionIcon: chart; text: "tutti.editSpeciesFrequencies.field.graphAverageWeight"; _skipAction: true; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index abaeb2d..39f75c9 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 @@ -122,9 +122,13 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci private Map<String, Caracteristic> lengthStepCaracteristics; - private JFreeChart chart; + private JFreeChart frequenciesChart; - protected final JFrame histogramPopup = new JFrame(); + private JFreeChart averageWeightsChart; + + protected final JFrame frequenciesHistogramPopup = new JFrame(); + + protected final JFrame averageWeightsHistogramPopup = new JFrame(); protected Caracteristic sexCaracteristic; @@ -341,7 +345,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci float step = getStep(newValue); getModel().setStep(step); getModel().setDataSetIntervalWidth(step); - chart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step == 1f)); + frequenciesChart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step == 1f)); if (CollectionUtils.isNotEmpty(getModel().getRows())) { for (SpeciesFrequencyRowModel rowModel : getModel().getRows()) { rowModel.setLengthStepCaracteristic(newValue); @@ -402,6 +406,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_USE_RTP, evt -> { getModel().getRows().forEach(row -> getModel().computeRowWeightWithRtp(row)); + getModel().reloadRows(); getTableModel().fireTableDataChanged(); }); @@ -411,14 +416,16 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // init histogram - initHistogram(ui, model); + initFrequenciesHistogram(); // init data table - initDataTable(model); + initDataTable(); + + initAverageWeightsHistogram(); // init log table - initLogTable(ui); + initLogTable(); initObsTable(); @@ -426,6 +433,10 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } + public void showAverageWeightsHistogram() { + averageWeightsHistogramPopup.setVisible(true); + } + @Override protected JComponent getComponentToFocus() { FrequencyConfigurationMode configurationMode = getModel().getConfigurationMode(); @@ -442,7 +453,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci log.debug("closing: " + ui); } - histogramPopup.dispose(); + frequenciesHistogramPopup.dispose(); + averageWeightsHistogramPopup.dispose(); frequencyEditor = null; @@ -468,7 +480,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; - histogramPopup.setTitle(title); + frequenciesHistogramPopup.setTitle(title + t("tutti.editSpeciesFrequencies.title")); + averageWeightsHistogramPopup.setTitle(title + weightUnit.decorateLabel(t("tutti.editSpeciesFrequencies.field.graphAverageWeight"))); SpeciesBatchRowModel speciesBatch = editor.getEditRow(); @@ -656,7 +669,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci //------------------------------------------------------------------------// - protected void initDataTable(SpeciesFrequencyUIModel model) { + protected void initDataTable() { JXTable table = getTable(); // create table column model @@ -694,7 +707,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } // create table model - SpeciesFrequencyTableModel tableModel = new SpeciesFrequencyTableModel(weightUnit, columnModel, model); + SpeciesFrequencyTableModel tableModel = new SpeciesFrequencyTableModel(weightUnit, columnModel, getModel()); table.setModel(tableModel); table.setColumnModel(columnModel); @@ -748,26 +761,26 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } - protected void initHistogram(SpeciesFrequencyUI ui, SpeciesFrequencyUIModel model) { - chart = ChartFactory.createXYBarChart(null, - t("tutti.editSpeciesFrequencies.table.header.lengthStep"), - false, - t("tutti.editSpeciesFrequencies.table.header.number"), - model.dataset); - chart.clearSubtitles(); + protected void initFrequenciesHistogram() { + frequenciesChart = ChartFactory.createXYBarChart(null, + t("tutti.editSpeciesFrequencies.table.header.lengthStep"), + false, + t("tutti.editSpeciesFrequencies.table.header.number"), + getModel().frequenciesDataset); + frequenciesChart.clearSubtitles(); - ValueAxis rangeAxis = chart.getXYPlot().getRangeAxis(); + ValueAxis rangeAxis = frequenciesChart.getXYPlot().getRangeAxis(); rangeAxis.setAutoRange(true); rangeAxis.setStandardTickUnits(new NumberTickUnitSource(true)); - ValueAxis domainAxis = chart.getXYPlot().getDomainAxis(); + ValueAxis domainAxis = frequenciesChart.getXYPlot().getDomainAxis(); domainAxis.setAutoRange(true); domainAxis.setStandardTickUnits(new TuttiNumberTickUnitSource(true)); domainAxis.setMinorTickMarksVisible(true); - chart.getXYPlot().getRenderer().setSeriesPaint(0, getConfig().getColorComputedWeights()); + frequenciesChart.getXYPlot().getRenderer().setSeriesPaint(0, getConfig().getColorComputedWeights()); - final ChartPanel chartPanel = new ChartPanel(chart); + final ChartPanel chartPanel = new ChartPanel(frequenciesChart); chartPanel.setDomainZoomable(false); chartPanel.setMouseZoomable(false); chartPanel.setPopupMenu(null); @@ -782,18 +795,50 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci super.mouseClicked(e); if (e.getClickCount() > 1) { - histogramPopup.getContentPane().removeAll(); - ChartPanel chartPanel = new ChartPanel(chart); - histogramPopup.getContentPane().add(chartPanel); - histogramPopup.pack(); - histogramPopup.setVisible(true); + frequenciesHistogramPopup.getContentPane().removeAll(); + ChartPanel chartPanel = new ChartPanel(frequenciesChart); + frequenciesHistogramPopup.getContentPane().add(chartPanel); + frequenciesHistogramPopup.pack(); + frequenciesHistogramPopup.setVisible(true); } } }); } - protected void initLogTable(SpeciesFrequencyUI ui) { + protected void initAverageWeightsHistogram() { + averageWeightsChart = ChartFactory.createXYBarChart(null, + t("tutti.editSpeciesFrequencies.table.header.lengthStep"), + false, + weightUnit.decorateLabel(t("tutti.editSpeciesFrequencies.averageWeight.label")), + getModel().averageWeightsDataset); + averageWeightsChart.clearSubtitles(); + + ValueAxis rangeAxis = averageWeightsChart.getXYPlot().getRangeAxis(); + rangeAxis.setAutoRange(true); + rangeAxis.setStandardTickUnits(new NumberTickUnitSource()); + rangeAxis.setMinorTickMarksVisible(true); + + ValueAxis domainAxis = averageWeightsChart.getXYPlot().getDomainAxis(); + domainAxis.setAutoRange(true); + domainAxis.setStandardTickUnits(new TuttiNumberTickUnitSource(true)); + domainAxis.setMinorTickMarksVisible(true); + + averageWeightsChart.getXYPlot().getRenderer().setSeriesPaint(0, getConfig().getColorComputedWeights()); + + final ChartPanel chartPanel = new ChartPanel(averageWeightsChart); + chartPanel.setDomainZoomable(false); + chartPanel.setMouseZoomable(false); + chartPanel.setPopupMenu(null); + + JPanel histogramPanel = ui.getHistogramPanel(); + histogramPanel.add(chartPanel, BorderLayout.CENTER); + + averageWeightsHistogramPopup.getContentPane().add(chartPanel); + averageWeightsHistogramPopup.pack(); + } + + protected void initLogTable() { JXTable logTable = ui.getLogsTable(); // create log table column model diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index d8ad4af..2f73210 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -233,11 +233,18 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa protected CopyIndividualObservationMode copyIndividualObservationMode; /** - * To store graph series. + * To store frequencies graph series. * * @since 3.11 */ - protected final XYSeriesCollection dataset; + protected final XYSeriesCollection frequenciesDataset; + + /** + * To store average weights graph series. + * + * @since 4.5 + */ + protected final XYSeriesCollection averageWeightsDataset; /** * Default caracteristics coming from protocol. @@ -257,9 +264,15 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa XYSeries series = new XYSeries("", true, false); - dataset = new XYSeriesCollection(series); - dataset.setIntervalPositionFactor(0); - dataset.setIntervalWidth(0); + frequenciesDataset = new XYSeriesCollection(series); + frequenciesDataset.setIntervalPositionFactor(0); + frequenciesDataset.setIntervalWidth(0); + + series = new XYSeries("", true, false); + + averageWeightsDataset = new XYSeriesCollection(series); + averageWeightsDataset.setIntervalPositionFactor(0); + averageWeightsDataset.setIntervalWidth(0); this.defaultCaracteristic = defaultCaracteristic == null ? Lists.<Caracteristic>newArrayList() : @@ -270,8 +283,10 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa setEmptyRows(Sets.<SpeciesFrequencyRowModel>newHashSet()); - XYSeries series = dataset.getSeries(0); - series.clear(); + XYSeries frequenciesSeries = frequenciesDataset.getSeries(0); + frequenciesSeries.clear(); + XYSeries averageWeightsSeries = averageWeightsDataset.getSeries(0); + averageWeightsSeries.clear(); cache.loadCache(rows); @@ -284,7 +299,14 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa if (row.isValid()) { Float lengthStep = row.getLengthStep(); - series.addOrUpdate(lengthStep, row.getNumber()); + Integer number = row.getNumber(); + + frequenciesSeries.addOrUpdate(lengthStep, number); + + Float averageWeight = row.computeAverageWeight(); + if (averageWeight != null) { + averageWeightsSeries.addOrUpdate(lengthStep, averageWeight); + } } @@ -734,7 +756,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa } public void setDataSetIntervalWidth(float step) { - dataset.setIntervalWidth(step); + frequenciesDataset.setIntervalWidth(step); + averageWeightsDataset.setIntervalWidth(step); } public List<Caracteristic> getDefaultCaracteristic() { 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 0557c95..d2c511d 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 @@ -1446,6 +1446,7 @@ tutti.editSpeciesFrequencies.addMeasure= tutti.editSpeciesFrequencies.askBeforeSave.help= tutti.editSpeciesFrequencies.askBeforeSave.message= tutti.editSpeciesFrequencies.askBeforeSave.title= +tutti.editSpeciesFrequencies.averageWeight.label= tutti.editSpeciesFrequencies.error.itchyometer.bad.record= tutti.editSpeciesFrequencies.error.length.doublon= tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all= 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 e78bb7e..140eb51 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 @@ -1367,6 +1367,7 @@ tutti.editSpeciesFrequencies.addMeasure=Ajout d'un individu de taille <strong>%1 tutti.editSpeciesFrequencies.askBeforeSave.help=Que voulez-vous faire?<ul><li><strong>Non</strong> pour rester sur cet écran</li><li><strong>Oui</strong> pour enregisrer les mensurations avec poids</li></ul> tutti.editSpeciesFrequencies.askBeforeSave.message=La saisie comporte des classes de taille avec et sans poids associés.<br/><strong>Seules les classes de taille avec poids seront dans ce cas sauvegardées.</strong> tutti.editSpeciesFrequencies.askBeforeSave.title=Confirmer l'enregistrement des mensurations +tutti.editSpeciesFrequencies.averageWeight.label=Poids moyen tutti.editSpeciesFrequencies.error.itchyometer.bad.record=La mesure provenant de l'ichtyomètre n'est pas valide (la donnée est peut-être corrompue) \:<br/><ul><li>Enregistrement \: <strong>%s</strong></li><li>CRC \: <strong>%s</strong></li><li>CRC calculé \: <strong>%s</strong></li></ul> tutti.editSpeciesFrequencies.error.length.doublon=La classe de taille <strong>%s</strong> est utilisée plusieurs fois (deuxième occurrence trouvée à la ligne <strong>%s</strong>), ce qui n'est pas autorisé.<hr/>Veuillez corriger cela pour pouvoir enregistrer les mensurations. tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all=Tout diff --git a/tutti-ui-swing/src/main/resources/icons/action-chart.png b/tutti-ui-swing/src/main/resources/icons/action-chart.png new file mode 100644 index 0000000..9051fbc Binary files /dev/null and b/tutti-ui-swing/src/main/resources/icons/action-chart.png differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit c7901d33fd3c2c87093bff68c9a923fc1d028d10 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 14:20:21 2016 +0100 ajout d'une ligne d'observation individuelle quand on ajoute en rafale (refs #8019) --- .../filtered-resources/tutti-help-fr.properties | 3 +- .../species/frequency/SpeciesFrequencyUI.jaxx | 6 ++++ .../species/frequency/SpeciesFrequencyUI.jcss | 6 ++++ .../frequency/SpeciesFrequencyUIHandler.java | 9 +++-- .../species/frequency/SpeciesFrequencyUIModel.java | 39 ++++++++++++++++++++++ .../actions/ApplySpeciesFrequencyRafaleAction.java | 11 ++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 2 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 ++ 8 files changed, 75 insertions(+), 3 deletions(-) diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index e3e80af..900304c 100644 --- a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties +++ b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties @@ -22,7 +22,7 @@ # #L% ### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Fri Feb 19 14:49:02 CET 2016 +#Fri Feb 26 11:49:12 CET 2016 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -326,6 +326,7 @@ tutti.editSpeciesFrequencies.action.generate.help=editFishingOperation.html\#cap tutti.editSpeciesFrequencies.action.reset.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndClose.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndContinue.help=editFishingOperation.html\#captureEspecesMensurationActions +tutti.editSpeciesFrequencies.field.addIndividualObservationOnRafale.help= tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.help= tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.help= tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.help= diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx index 1e66155..5031b49 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx @@ -157,6 +157,12 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { <NumberEditor id='rafaleStepField' constructorParams='this'/> </cell> </row> + <row> + <cell weightx='1.0'> + <JCheckBox id='addIndividualObservationCheckBox' + onItemStateChanged='handler.setBoolean(event, "addIndividualObservationOnRafale")'/> + </cell> + </row> </Table> </JPanel> </cell> 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 9cfb3f8..689d824 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 @@ -163,6 +163,12 @@ ComputableDataEditor { _help: {"tutti.editSpeciesFrequencies.field.rafaleStep.help"}; } +#addIndividualObservationCheckBox { + text: "tutti.editSpeciesFrequencies.field.addIndividualObservationOnRafale"; + toolTipText: "tutti.editSpeciesFrequencies.field.addIndividualObservationOnRafale.tip"; + _help: {"tutti.editSpeciesFrequencies.field.addIndividualObservationOnRafale.help"}; +} + #lengthStepCaracteristicPanel { border: { BorderFactory.createTitledBorder(null, null) }; } 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 39f75c9..86c936e 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 @@ -410,6 +410,12 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci getTableModel().fireTableDataChanged(); }); + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_INDIVIDUAL_OBSERVATION_ROWS, evt -> { + IndividualObservationBatchTableModel obsTableModel = + (IndividualObservationBatchTableModel) getUI().getObsTable().getModel(); + obsTableModel.setRows((List<IndividualObservationBatchRowModel>) evt.getNewValue()); + }); + // set the pattern to the weight in simple counting mode according to the weight unit ui.getSimpleCountingWeightField().setNumberPattern(weightUnit.getNumberEditorPattern()); @@ -494,6 +500,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.setMinStep(null); model.setMaxStep(null); model.setRtp(null); + model.setIndividualObservationRows(new ArrayList<>()); frequencyEditor = editor; @@ -997,8 +1004,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci installTableKeyListener(columnModel, obsTable); - tableModel.setRows(new ArrayList<>()); - } // protected void addIdColumnToModel(TableColumnModel model, diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 2f73210..b94a76b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -30,6 +30,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.CopyIndividualObservationMode; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.util.computable.ComputableData; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; @@ -95,6 +96,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_RTP = "rtp"; + public static final String PROPERTY_ADD_INDIVIDUAL_OBSERVATION_ON_RAFALE = "addIndividualObservationOnRafale"; + public static final String PROPERTY_EMPTY_ROWS = "emptyRows"; public static final String PROPERTY_NEXT_EDITABLE_ROW_INDEX = "nextEditableRowIndex"; @@ -103,6 +106,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE = "copyIndividualObservationMode"; + public static final String PROPERTY_INDIVIDUAL_OBSERVATION_ROWS = "individualObservationRows"; + /** * Fill mode. * @@ -181,6 +186,13 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa protected boolean useRTP; /** + * Add individual observation rows when a lengthstep is added with the rafale mode + * + * @since 4.5 + */ + protected boolean addIndividualObservationOnRafale; + + /** * Number in case of simple counting mode * * @since 1.0 @@ -253,6 +265,13 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa */ protected final List<Caracteristic> defaultCaracteristic; + /** + * Individual observations + * + * @since 4.5 + */ + protected List<IndividualObservationBatchRowModel> individualObservationRows; + public SpeciesFrequencyUIModel(WeightUnit weightUnit, SampleCategoryModel sampleCategoryModel, List<Caracteristic> defaultCaracteristic) { @@ -566,6 +585,16 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa firePropertyChange(PROPERTY_USE_RTP, oldValue, useRTP); } + public boolean isAddIndividualObservationOnRafale() { + return addIndividualObservationOnRafale; + } + + public void setAddIndividualObservationOnRafale(boolean addIndividualObservationOnRafale) { + Object oldValue = isAddIndividualObservationOnRafale(); + this.addIndividualObservationOnRafale = addIndividualObservationOnRafale; + firePropertyChange(PROPERTY_ADD_INDIVIDUAL_OBSERVATION_ON_RAFALE, oldValue, addIndividualObservationOnRafale); + } + public CopyIndividualObservationMode getCopyIndividualObservationMode() { return copyIndividualObservationMode; } @@ -727,6 +756,16 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa return cache.getRowCache(); } + public List<IndividualObservationBatchRowModel> getIndividualObservationRows() { + return individualObservationRows; + } + + public void setIndividualObservationRows(List<IndividualObservationBatchRowModel> individualObservationRows) { + Object oldValue = getIndividualObservationRows(); + this.individualObservationRows = individualObservationRows; + firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS, oldValue, individualObservationRows); + } + protected final void recomputeRowValidState(SpeciesFrequencyRowModel row) { // recompute row valid state diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java index 48855b0..6fb44fa 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java @@ -25,6 +25,8 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.ac */ import com.google.common.collect.Lists; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyLogRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyLogsTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; @@ -129,6 +131,15 @@ public class ApplySpeciesFrequencyRafaleAction { newRow.setLengthStep(step); logsTableModel.addNewRow(0, newRow); + if (model.isAddIndividualObservationOnRafale()) { + IndividualObservationBatchTableModel obsTableModel = + (IndividualObservationBatchTableModel) ui.getObsTable().getModel(); + + IndividualObservationBatchRowModel newObsRow = obsTableModel.createNewRow(); + newObsRow.setSize(step); + obsTableModel.addNewRow(newObsRow); + } + } } 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 d2c511d..2db9d66 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 @@ -1449,6 +1449,8 @@ tutti.editSpeciesFrequencies.askBeforeSave.title= tutti.editSpeciesFrequencies.averageWeight.label= tutti.editSpeciesFrequencies.error.itchyometer.bad.record= tutti.editSpeciesFrequencies.error.length.doublon= +tutti.editSpeciesFrequencies.field.addIndividualObservationOnRafale= +tutti.editSpeciesFrequencies.field.addIndividualObservationOnRafale.tip= tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all= tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.mnemonic= tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.tip= 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 140eb51..e8b865a 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 @@ -1370,6 +1370,8 @@ tutti.editSpeciesFrequencies.askBeforeSave.title=Confirmer l'enregistrement des tutti.editSpeciesFrequencies.averageWeight.label=Poids moyen tutti.editSpeciesFrequencies.error.itchyometer.bad.record=La mesure provenant de l'ichtyomètre n'est pas valide (la donnée est peut-être corrompue) \:<br/><ul><li>Enregistrement \: <strong>%s</strong></li><li>CRC \: <strong>%s</strong></li><li>CRC calculé \: <strong>%s</strong></li></ul> tutti.editSpeciesFrequencies.error.length.doublon=La classe de taille <strong>%s</strong> est utilisée plusieurs fois (deuxième occurrence trouvée à la ligne <strong>%s</strong>), ce qui n'est pas autorisé.<hr/>Veuillez corriger cela pour pouvoir enregistrer les mensurations. +tutti.editSpeciesFrequencies.field.addIndividualObservationOnRafale=Ajouter aux observations individuelles +tutti.editSpeciesFrequencies.field.addIndividualObservationOnRafale.tip=Ajouter une ligne d'observation individuelle avec la taille saisie tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all=Tout tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.mnemonic=T tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.tip=Tout recopier (tailles et poids) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit e980ec1bd35ce9a6777aa74e7f1b8e98e660005d Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 16:23:13 2016 +0100 - ajout du numéro de l'observation - suppression d'observations refs #8019 --- .../filtered-resources/tutti-help-fr.properties | 3 +- .../IndividualObservationBatchTableModel.java | 17 +++--- .../species/frequency/SpeciesFrequencyUI.jaxx | 8 ++- .../species/frequency/SpeciesFrequencyUI.jcss | 11 +++- .../frequency/SpeciesFrequencyUIHandler.java | 57 +++++++------------- .../frequency/actions/RemoveObservationAction.java | 63 ++++++++++++++++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 9 ++++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 12 +++-- 8 files changed, 126 insertions(+), 54 deletions(-) diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index 900304c..a9e9087 100644 --- a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties +++ b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties @@ -22,7 +22,7 @@ # #L% ### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Fri Feb 26 11:49:12 CET 2016 +#Fri Feb 26 15:28:11 CET 2016 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -323,6 +323,7 @@ tutti.editSpeciesBatch.sortSpeciesBatch.help=editFishingOperation.html\#captureE tutti.editSpeciesFrequencies.action.addLengthStepCaracteristic.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.cancel.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.generate.help=editFishingOperation.html\#captureEspecesMensurationActions +tutti.editSpeciesFrequencies.action.removeObservation.help= tutti.editSpeciesFrequencies.action.reset.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndClose.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndContinue.help=editFishingOperation.html\#captureEspecesMensurationActions diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java index f22197b..c59fd4a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java @@ -37,15 +37,10 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab private static final long serialVersionUID = 1L; - public static final ColumnIdentifier<IndividualObservationBatchRowModel> ID = ColumnIdentifier.newId( - IndividualObservationBatchRowModel.PROPERTY_ID, - n("tutti.editIndividualObservationBatch.table.header.id"), - n("tutti.editIndividualObservationBatch.table.header.id.tip")); - - public static final ColumnIdentifier<IndividualObservationBatchRowModel> SPECIES = ColumnIdentifier.newId( - IndividualObservationBatchRowModel.PROPERTY_SPECIES, - n("tutti.editIndividualObservationBatch.table.header.species"), - n("tutti.editIndividualObservationBatch.table.header.species.tip")); + public static final ColumnIdentifier<IndividualObservationBatchRowModel> RANK = ColumnIdentifier.newId( + IndividualObservationBatchRowModel.PROPERTY_RANK_ORDER, + n("tutti.editIndividualObservationBatch.table.header.rank"), + n("tutti.editIndividualObservationBatch.table.header.rank.tip")); public static final ColumnIdentifier<IndividualObservationBatchRowModel> WEIGHT = ColumnIdentifier.newId( IndividualObservationBatchRowModel.PROPERTY_WEIGHT, @@ -89,7 +84,7 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab super(columnModel, true, true); this.weightUnit = weightUnit; - setNoneEditableCols(ID); + setNoneEditableCols(RANK); } @Override @@ -99,6 +94,8 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab // by default empty row is not valid result.setValid(false); + result.setRankOrder(getRowCount() + 1); + return result; } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx index 5031b49..54ba830 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx @@ -82,6 +82,10 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { <SaveAndCloseSpeciesFrequencyAction id="saveAndCloseAction" constructorParams="this"/> <SaveAndContinueSpeciesFrequencyAction id="saveAndContinueAction" constructorParams="this"/> + <JPopupMenu id='obsTablePopup'> + <JMenuItem id='deleteObsRowsMenu'/> + </JPopupMenu> + <Table id='configurationPanel' fill="both" anchor="west" constraints='BorderLayout.CENTER'> <row> @@ -267,7 +271,9 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { onActionPerformed='model.setCopyIndividualObservationMode(CopyIndividualObservationMode.SIZE)'/> </HBox> <JScrollPane id='obsPanel' constraints="BorderLayout.CENTER"> - <JXTable id='obsTable'/> + <JXTable id='obsTable' + onMouseClicked='handler.autoSelectRowInTable(event, obsTablePopup)' + onKeyPressed='handler.openRowMenu(event, obsTablePopup)'/> </JScrollPane> </JPanel> </JSplitPane> 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 689d824..c51fe03 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 @@ -50,6 +50,15 @@ ComputableDataEditor { _help: {"tutti.editSpeciesFrequencies.help"}; } +#deleteObsRowsMenu { + actionIcon: delete2; + text: "tutti.editSpeciesFrequencies.action.removeObservation"; + toolTipText: "tutti.editSpeciesFrequencies.action.removeObservation.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.action.removeObservation.mnemonic"; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.RemoveObservationAction.class}; + _help: {"tutti.editSpeciesFrequencies.action.removeObservation.help"}; +} + //configurationPanel #frequencyModePanel { @@ -343,7 +352,7 @@ ComputableDataEditor { } #obsTable { - selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionMode: {ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}; selectionBackground: {null}; selectionForeground: {Color.BLACK}; sortable: false; 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 86c936e..41fec5d 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 @@ -88,6 +88,7 @@ import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.SwingUtilities; +import javax.swing.event.TableModelEvent; import javax.swing.table.TableCellRenderer; import java.awt.BorderLayout; import java.awt.Color; @@ -675,7 +676,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci //-- Internal methods --// //------------------------------------------------------------------------// - protected void initDataTable() { JXTable table = getTable(); @@ -891,12 +891,15 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci Decorator<CaracteristicQualitativeValue> caracteristicQualitativeDecorator = getDecorator(CaracteristicQualitativeValue.class, null); -// { -// // Id column -// -// addIdColumnToModel(columnModel, IndividualObservationBatchTableModel.ID, obsTable); -// -// } + { + // Rank column + + addIntegerColumnToModel(columnModel, + IndividualObservationBatchTableModel.RANK, + TuttiUI.INT_10_DIGITS_PATTERN, + obsTable); + + } { // Weight column @@ -1004,37 +1007,17 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci installTableKeyListener(columnModel, obsTable); - } + tableModel.addTableModelListener(e -> { -// protected void addIdColumnToModel(TableColumnModel model, -// ColumnIdentifier identifier, -// JTable table) { -// -// final TableCellRenderer defaultRenderer = table.getDefaultRenderer(Number.class); -// final Decorator<String> idDecorator = getDecorator(String.class, DecoratorService.SPACE_EVERY_3_DIGIT); -// -// TableCellRenderer idTableCellRenderer = new TableCellRenderer() { -// @Override -// public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { -// -// String text = null; -// if (value != null) { -// text = idDecorator.toString(value); -// } -// -// Component result = defaultRenderer.getTableCellRendererComponent(table, text, isSelected, hasFocus, row, column); -// if (result instanceof JLabel) { -// JLabel jLabel = (JLabel) result; -// jLabel.setHorizontalTextPosition(SwingConstants.RIGHT); -// -// } -// return result; -// } -// }; -// -// addColumnToModel(model, null, idTableCellRenderer, identifier); -// -// } + if (e.getType() == TableModelEvent.DELETE) { + int firstRow = e.getFirstRow(); + for (int i = firstRow ; i < tableModel.getRowCount() ; i++) { + tableModel.getRows().get(i).setRankOrder(i + 1); + } + } + }); + + } protected void consumeFeedRecord(FeedReaderMeasureRecord record) { if (record.isValid()) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java new file mode 100644 index 0000000..ed32fd8 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java @@ -0,0 +1,63 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions; + +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +import org.jdesktop.swingx.JXTable; + +import javax.swing.JOptionPane; +import java.util.Collection; +import java.util.HashSet; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class RemoveObservationAction extends SimpleActionSupport<SpeciesFrequencyUI> { + + public RemoveObservationAction(SpeciesFrequencyUI speciesFrequencyUI) { + super(speciesFrequencyUI, false); + } + + @Override + protected void onActionPerformed(SpeciesFrequencyUI ui) { + JXTable obsTable = ui.getObsTable(); + IndividualObservationBatchTableModel obsTableModel = + (IndividualObservationBatchTableModel) obsTable.getModel(); + + int[] selectedRowIndexes = obsTable.getSelectedRows(); + Collection<IndividualObservationBatchRowModel> rowsToDelete = new HashSet<>(); + + for (int selectedRowIndex : selectedRowIndexes) { + rowsToDelete.add(obsTableModel.getRows().get(selectedRowIndex)); + } + + String message; + if (rowsToDelete.size() == 1) { + message = t("tutti.editSpeciesFrequencies.action.removeObservation.confirm.message"); + } else { + message = t("tutti.editSpeciesFrequencies.action.removeObservations.confirm.message", rowsToDelete.size()); + } + + int answer = JOptionPane.showConfirmDialog(ui, + message, + t("tutti.editSpeciesFrequencies.action.removeObservations.confirm.title"), + JOptionPane.YES_NO_OPTION); + + + if (answer == JOptionPane.YES_OPTION) { + + int minSelection = obsTable.getSelectionModel().getMinSelectionIndex(); + int maxSelection = obsTable.getSelectionModel().getMaxSelectionIndex(); + obsTableModel.getRows().removeAll(rowsToDelete); + obsTableModel.fireTableRowsDeleted(minSelection, maxSelection); + + if (obsTable.getRowCount() == 0) { + obsTableModel.addNewRow(); + } + } + } +} 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 2db9d66..d54d701 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 @@ -1433,6 +1433,12 @@ tutti.editSpeciesFrequencies.action.cancel.tip= tutti.editSpeciesFrequencies.action.generate= tutti.editSpeciesFrequencies.action.generate.mnemonic= tutti.editSpeciesFrequencies.action.generate.tip= +tutti.editSpeciesFrequencies.action.removeObservation= +tutti.editSpeciesFrequencies.action.removeObservation.confirm.message= +tutti.editSpeciesFrequencies.action.removeObservation.mnemonic= +tutti.editSpeciesFrequencies.action.removeObservation.tip= +tutti.editSpeciesFrequencies.action.removeObservations.confirm.message= +tutti.editSpeciesFrequencies.action.removeObservations.confirm.title= tutti.editSpeciesFrequencies.action.reset= tutti.editSpeciesFrequencies.action.reset.mnemonic= tutti.editSpeciesFrequencies.action.reset.tip= @@ -1510,6 +1516,9 @@ tutti.editSpeciesFrequencies.logTable.header.label= tutti.editSpeciesFrequencies.logTable.header.lengthStep= tutti.editSpeciesFrequencies.logTable.removeRow.confirm.message= tutti.editSpeciesFrequencies.logTable.removeRow.confirm.title= +tutti.editSpeciesFrequencies.removeObservationRow.message= +tutti.editSpeciesFrequencies.removeObservationRows.message= +tutti.editSpeciesFrequencies.removeObservationRows.title= 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 e8b865a..7e27232 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 @@ -920,16 +920,14 @@ tutti.editIndividualObservationBatch.table.header.comment=Commentaire tutti.editIndividualObservationBatch.table.header.comment.tip=Commentaire tutti.editIndividualObservationBatch.table.header.file=Pièces jointes tutti.editIndividualObservationBatch.table.header.file.tip=Pièces jointes -tutti.editIndividualObservationBatch.table.header.id=Id -tutti.editIndividualObservationBatch.table.header.id.tip=Identifiant du lot tutti.editIndividualObservationBatch.table.header.lengthStepCaracteristic=Classe de taille tutti.editIndividualObservationBatch.table.header.lengthStepCaracteristic.tip=Classe de taille tutti.editIndividualObservationBatch.table.header.otherCaracteristics=Autres caractéristiques tutti.editIndividualObservationBatch.table.header.otherCaracteristics.tip=Autres caractéristiques +tutti.editIndividualObservationBatch.table.header.rank=N° +tutti.editIndividualObservationBatch.table.header.rank.tip=N° de l'observation tutti.editIndividualObservationBatch.table.header.size=Taille tutti.editIndividualObservationBatch.table.header.size.tip=Taille -tutti.editIndividualObservationBatch.table.header.species=Espèce -tutti.editIndividualObservationBatch.table.header.species.tip=Espèce tutti.editIndividualObservationBatch.table.header.weight=Poids tutti.editIndividualObservationBatch.table.header.weight.tip=Poids individuel tutti.editIndividualObservationCaracteristics.action.cancel=Annuler @@ -1354,6 +1352,12 @@ tutti.editSpeciesFrequencies.action.cancel.tip=Annuler l'édition des mensuratio tutti.editSpeciesFrequencies.action.generate=Générer tutti.editSpeciesFrequencies.action.generate.mnemonic=G tutti.editSpeciesFrequencies.action.generate.tip=Générer les mensurations +tutti.editSpeciesFrequencies.action.removeObservation=Supprimer +tutti.editSpeciesFrequencies.action.removeObservation.confirm.message=<html>Vous êtes sur le point de supprimer l'observation sélectionnée.<hr/>Êtes-vous sur de vouloir la supprimer ?</html> +tutti.editSpeciesFrequencies.action.removeObservation.mnemonic=S +tutti.editSpeciesFrequencies.action.removeObservation.tip=Supprimer les lignes sélectionnées +tutti.editSpeciesFrequencies.action.removeObservations.confirm.message=<html>Vous êtes sur le point de supprimer les %s observations sélectionnées.<hr/>Êtes-vous sur de vouloir les supprimer ?</html> +tutti.editSpeciesFrequencies.action.removeObservations.confirm.title=Suppression d'observations individuelles tutti.editSpeciesFrequencies.action.reset=Réinitialiser tutti.editSpeciesFrequencies.action.reset.mnemonic=R tutti.editSpeciesFrequencies.action.reset.tip=Supprimer toutes les mensurations saisies -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit f1b29ce6ba2f02c866567e2c6435cbc9f5be16c4 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 16:35:25 2016 +0100 use lanbdas where possible --- .../frequency/SpeciesFrequencyUIHandler.java | 159 +++++++++------------ 1 file changed, 64 insertions(+), 95 deletions(-) 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 41fec5d..ac7f38d 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 @@ -25,7 +25,6 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; -import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderEvent; import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderListener; import fr.ifremer.tutti.ichtyometer.feed.record.FeedReaderMeasureRecord; import fr.ifremer.tutti.persistence.entities.TuttiEntities; @@ -97,8 +96,6 @@ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -153,26 +150,19 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci SpeciesFrequencyRowModel.PROPERTY_NUMBER, SpeciesFrequencyRowModel.PROPERTY_WEIGHT); - this.feedReaderListener = new FeedReaderListener() { + this.feedReaderListener = event -> { - @Override - public void recordRead(FeedReaderEvent event) { - - final FeedReaderMeasureRecord record = event.getRecord(); + final FeedReaderMeasureRecord record = event.getRecord(); - SwingUtilities.invokeLater( - new Runnable() { - @Override - public void run() { - if (!getModel().isSimpleCountingMode()) { + SwingUtilities.invokeLater( + () -> { + if (!getModel().isSimpleCountingMode()) { - // can try to consume value - consumeFeedRecord(record); - } - } + // can try to consume value + consumeFeedRecord(record); } - ); - } + } + ); }; } @@ -195,8 +185,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci public boolean isRowValid(SpeciesFrequencyRowModel row) { SpeciesFrequencyUIModel model = getModel(); - boolean valid = model.isRowValid(row); - return valid; + return model.isRowValid(row); } @@ -270,25 +259,16 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci this.ui.setContextValue(model); // listen when ichtyometer is connected or not and adjust the listener - getContext().addPropertyChangeListener(TuttiUIContext.PROPERTY_ICHTYOMETER_CONNECTED, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - boolean connected = (boolean) evt.getNewValue(); - - if (connected && SpeciesFrequencyUIHandler.this.frequencyEditor != null) { + getContext().addPropertyChangeListener(TuttiUIContext.PROPERTY_ICHTYOMETER_CONNECTED, evt -> { + boolean connected = (boolean) evt.getNewValue(); - // listen when itchtyometer is connected and this ui is showing - listenItchtyometer(); - } + if (connected && SpeciesFrequencyUIHandler.this.frequencyEditor != null) { - SwingUtilities.invokeLater( - new Runnable() { - @Override - public void run() { - updateLogVisibility(); - } - }); + // listen when itchtyometer is connected and this ui is showing + listenItchtyometer(); } + + SwingUtilities.invokeLater(this::updateLogVisibility); }); } @@ -338,71 +318,59 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci }); // when lengthStepCaracteristic changed, let's updates all row with the new value - model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_LENGTH_STEP_CARACTERISTIC, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - Caracteristic newValue = (Caracteristic) evt.getNewValue(); - // get step from the pmfm - float step = getStep(newValue); - getModel().setStep(step); - getModel().setDataSetIntervalWidth(step); - frequenciesChart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step == 1f)); - if (CollectionUtils.isNotEmpty(getModel().getRows())) { - for (SpeciesFrequencyRowModel rowModel : getModel().getRows()) { - rowModel.setLengthStepCaracteristic(newValue); - recomputeRowValidState(rowModel); - } + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_LENGTH_STEP_CARACTERISTIC, evt -> { + Caracteristic newValue = (Caracteristic) evt.getNewValue(); + // get step from the pmfm + float step1 = getStep(newValue); + getModel().setStep(step1); + getModel().setDataSetIntervalWidth(step1); + frequenciesChart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step1 == 1f)); + averageWeightsChart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step1 == 1f)); + if (CollectionUtils.isNotEmpty(getModel().getRows())) { + for (SpeciesFrequencyRowModel rowModel : getModel().getRows()) { + rowModel.setLengthStepCaracteristic(newValue); + recomputeRowValidState(rowModel); } - SpeciesFrequencyUIHandler.this.ui.getValidator().doValidate(); } + SpeciesFrequencyUIHandler.this.ui.getValidator().doValidate(); }); // when lengthStepCaracteristicUnit changed, let's updates the label of some fields - model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_LENGTH_STEP_CARACTERISTIC_UNIT, new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent evt) { + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_LENGTH_STEP_CARACTERISTIC_UNIT, evt -> { - String unit = (String) evt.getNewValue(); + String unit = (String) evt.getNewValue(); - if (unit == null) { + if (unit == null) { - unit = t("tutti.editSpeciesFrequencies.unkownStepUnit"); - } + unit = t("tutti.editSpeciesFrequencies.unkownStepUnit"); + } - getUI().getMinStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.minStep"), unit)); - getUI().getMinStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.minStep.tip"), unit)); + getUI().getMinStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.minStep"), unit)); + getUI().getMinStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.minStep.tip"), unit)); - getUI().getMaxStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.maxStep"), unit)); - getUI().getMaxStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.maxStep.tip"), unit)); + getUI().getMaxStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.maxStep"), unit)); + getUI().getMaxStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.maxStep.tip"), unit)); - getUI().getRafaleStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.rafaleStep"), unit)); - getUI().getRafaleStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.rafaleStep.tip"), unit)); + getUI().getRafaleStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.rafaleStep"), unit)); + getUI().getRafaleStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.rafaleStep.tip"), unit)); - TableColumnExt column = (TableColumnExt) getUI().getTable().getColumn(SpeciesFrequencyTableModel.LENGTH_STEP); - column.setHeaderValue(getLabelWithUnit(t("tutti.editSpeciesFrequencies.table.header.lengthStep"), unit)); - column.setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.table.header.lengthStep"), unit)); - } + TableColumnExt column = (TableColumnExt) getUI().getTable().getColumn(SpeciesFrequencyTableModel.LENGTH_STEP); + column.setHeaderValue(getLabelWithUnit(t("tutti.editSpeciesFrequencies.table.header.lengthStep"), unit)); + column.setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.table.header.lengthStep"), unit)); }); // when configuration mode change, let's focus the best component (see http://forge.codelutin.com/issues/4035) - model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_FREQUENCIES_CONFIGURATION_MODE, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - final FrequencyConfigurationMode newValue = (FrequencyConfigurationMode) evt.getNewValue(); - SwingUtilities.invokeLater( - new Runnable() { - @Override - public void run() { - JComponent componentToFocus = getComponentToFocus(newValue); - if (componentToFocus != null) { - componentToFocus.grabFocus(); - } - updateLogVisibility(); - } + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_FREQUENCIES_CONFIGURATION_MODE, evt -> { + final FrequencyConfigurationMode newValue = (FrequencyConfigurationMode) evt.getNewValue(); + SwingUtilities.invokeLater( + () -> { + JComponent componentToFocus = getComponentToFocus(newValue); + if (componentToFocus != null) { + componentToFocus.grabFocus(); } - ); - } + updateLogVisibility(); + } + ); }); model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_USE_RTP, evt -> { @@ -639,17 +607,18 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci mode = FrequencyConfigurationMode.SIMPLE_COUNTING; } } - } - if (log.isDebugEnabled()) { - log.debug("Will edit batch row: " + speciesBatch + " with " + rows.size() + " frequency"); - } + if (log.isDebugEnabled()) { + log.debug("Will edit batch row: " + speciesBatch + " with " + rows.size() + " frequency"); + } - Integer number = speciesBatch.getNumber(); - if (number != null && rows.isEmpty()) { - mode = FrequencyConfigurationMode.SIMPLE_COUNTING; - model.setSimpleCount(number); + Integer number = speciesBatch.getNumber(); + if (number != null && rows.isEmpty()) { + mode = FrequencyConfigurationMode.SIMPLE_COUNTING; + model.setSimpleCount(number); + } } + // make sure configuration mode will be rebound model.setConfigurationMode(null); model.setConfigurationMode(mode); @@ -860,7 +829,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // create log table model SpeciesFrequencyLogsTableModel logTableModel = new SpeciesFrequencyLogsTableModel(logColumnModel); - logTableModel.setRows(new ArrayList<SpeciesFrequencyLogRowModel>()); + logTableModel.setRows(new ArrayList<>()); logTable.setModel(logTableModel); logTable.setColumnModel(logColumnModel); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit cf52df320c4fa37faba9e9f2c0b2022dfb49f183 Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 29 16:04:42 2016 +0100 - copie des donnees d'observation individuelles dans le tableau des mensurations en fonction du mode - suppression ou ecrasement des données au changement de mode de copie refs #8019 --- .../IndividualObservationBatchTableModel.java | 27 +- .../frequency/SpeciesFrequencyRowModel.java | 30 +++ .../species/frequency/SpeciesFrequencyUI.jcss | 7 +- .../frequency/SpeciesFrequencyUIHandler.java | 288 ++++++++++++++++++--- .../species/frequency/SpeciesFrequencyUIModel.java | 25 +- .../frequency/actions/RemoveObservationAction.java | 11 + .../resources/i18n/tutti-ui-swing_en_GB.properties | 2 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 3 + 8 files changed, 348 insertions(+), 45 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java index c59fd4a..d71cdb7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java @@ -22,6 +22,8 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservatio * #L% */ +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.type.WeightUnit; import org.jdesktop.swingx.table.TableColumnModelExt; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; @@ -52,11 +54,6 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab n("tutti.editIndividualObservationBatch.table.header.size"), n("tutti.editIndividualObservationBatch.table.header.size.tip")); - public static final ColumnIdentifier<IndividualObservationBatchRowModel> LENGTH_STEP_CARACTERISTIC = ColumnIdentifier.newId( - IndividualObservationBatchRowModel.PROPERTY_LENGTH_STEP_CARACTERISTIC, - n("tutti.editIndividualObservationBatch.table.header.lengthStepCaracteristic"), - n("tutti.editIndividualObservationBatch.table.header.lengthStepCaracteristic.tip")); - public static final ColumnIdentifier<IndividualObservationBatchRowModel> OTHER_CARACTERISTICS = ColumnIdentifier.newId( IndividualObservationBatchRowModel.PROPERTY_CARACTERISTICS, n("tutti.editIndividualObservationBatch.table.header.otherCaracteristics"), @@ -79,6 +76,10 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab */ protected final WeightUnit weightUnit; + protected Species species; + + protected Caracteristic lengthstepCaracteristic; + public IndividualObservationBatchTableModel(WeightUnit weightUnit, TableColumnModelExt columnModel) { super(columnModel, true, true); @@ -87,6 +88,20 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab setNoneEditableCols(RANK); } + public void setSpecies(Species species) { + this.species = species; + if (rows != null) { + rows.forEach(row -> row.setSpecies(species)); + } + } + + public void setLengthstepCaracteristic(Caracteristic lengthstepCaracteristic) { + this.lengthstepCaracteristic = lengthstepCaracteristic; + if (rows != null) { + rows.forEach(row -> row.setLengthStepCaracteristic(lengthstepCaracteristic)); + } + } + @Override public IndividualObservationBatchRowModel createNewRow() { IndividualObservationBatchRowModel result = @@ -95,6 +110,8 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab // by default empty row is not valid result.setValid(false); result.setRankOrder(getRowCount() + 1); + result.setSpecies(species); + result.setLengthStepCaracteristic(lengthstepCaracteristic); return result; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java index faffe38..a9122d7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java @@ -191,6 +191,23 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa firePropertyChange(PROPERTY_NUMBER, oldValue, number); } + public void incNumber() { + if (number == null) { + number = 0; + } + setNumber(number + 1); + } + + public void decNumber() { + decNumber(1); + } + + public void decNumber(int nb) { + if (number != null && number >= nb) { + setNumber(number - nb); + } + } + @Override public Float getWeight() { return computedOrNotWeight.getData(); @@ -203,6 +220,19 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa firePropertyChange(PROPERTY_WEIGHT, oldValue, weight); } + /** + * @param weightToAdd weight (can be negative) to add + */ + public void addToWeight(float weightToAdd) { + Float weight = computedOrNotWeight.getData(); + if (weight == null) { + weight = 0f; + } + if (weight + weightToAdd >= 0) { + setWeight(weight + weightToAdd); + } + } + public Float getComputedWeight() { return computedOrNotWeight.getComputedData(); } 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 c51fe03..e66d35e 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 @@ -223,7 +223,6 @@ ComputableDataEditor { #samplingWarningLabel { foreground: {Color.RED}; - text: "Prélèvement"; } #dataFieldPanel { @@ -326,7 +325,7 @@ ComputableDataEditor { toolTipText: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.tip"; i18nMnemonic: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.mnemonic"; value: "all"; - //selected: {model.isSimpleCountingMode()}; + selected: {model.isCopyIndividualObservationAll()}; buttonGroup: "copyToSizeTableMode"; _help: {"tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all.help"}; } @@ -336,7 +335,7 @@ ComputableDataEditor { toolTipText: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.tip"; i18nMnemonic: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.mnemonic"; value: "nothing"; - //selected: {model.isSimpleCountingMode()}; + selected: {model.isCopyIndividualObservationNothing()}; buttonGroup: "copyToSizeTableMode"; _help: {"tutti.editSpeciesFrequencies.field.copyToSizeTableMode.nothing.help"}; } @@ -346,7 +345,7 @@ ComputableDataEditor { toolTipText: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.tip"; i18nMnemonic: "tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.mnemonic"; value: "size"; - //selected: {model.isSimpleCountingMode()}; + selected: {model.isCopyIndividualObservationSize()}; buttonGroup: "copyToSizeTableMode"; _help: {"tutti.editSpeciesFrequencies.field.copyToSizeTableMode.size.help"}; } 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 ac7f38d..7b93051 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 @@ -25,6 +25,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; +import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderEvent; import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderListener; import fr.ifremer.tutti.ichtyometer.feed.record.FeedReaderMeasureRecord; import fr.ifremer.tutti.persistence.entities.TuttiEntities; @@ -44,6 +45,7 @@ import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.CopyIndividualObservationMode; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; @@ -62,6 +64,7 @@ import fr.ifremer.tutti.ui.swing.util.comment.CommentCellRenderer; import fr.ifremer.tutti.ui.swing.util.computable.ComputableDataTableCell; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; import fr.ifremer.tutti.ui.swing.util.table.CaracteristicColumnIdentifier; +import fr.ifremer.tutti.util.Weights; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections4.CollectionUtils; @@ -83,6 +86,7 @@ import org.nuiton.jaxx.application.ApplicationBusinessException; import javax.swing.JComponent; import javax.swing.JFrame; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTextField; @@ -96,6 +100,8 @@ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -144,25 +150,76 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci protected ApplySpeciesFrequencyRafaleAction applySpeciesFrequencyRafaleAction; + protected PropertyChangeListener obsChangedListener; + public SpeciesFrequencyUIHandler() { super(SpeciesFrequencyRowModel.PROPERTY_LENGTH_STEP, SpeciesFrequencyRowModel.PROPERTY_NUMBER, SpeciesFrequencyRowModel.PROPERTY_WEIGHT); - this.feedReaderListener = event -> { + this.feedReaderListener = new FeedReaderListener() { - final FeedReaderMeasureRecord record = event.getRecord(); + @Override + public void recordRead(FeedReaderEvent event) { + final FeedReaderMeasureRecord record = event.getRecord(); - SwingUtilities.invokeLater( - () -> { - if (!getModel().isSimpleCountingMode()) { + SwingUtilities.invokeLater( + () -> { + if (!getModel().isSimpleCountingMode()) { - // can try to consume value - consumeFeedRecord(record); + // can try to consume value + consumeFeedRecord(record); + } } + ); + } + }; + + this.obsChangedListener = new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + IndividualObservationBatchRowModel row = (IndividualObservationBatchRowModel) evt.getSource(); + String propertyName = evt.getPropertyName(); + + if (getModel().mustCopyIndividualObservationSize() + && IndividualObservationBatchRowModel.PROPERTY_SIZE.equals(propertyName)) { + + Float oldValue = (Float) evt.getOldValue(); + Float newValue = (Float) evt.getNewValue(); + updateFrequencyRowsNumbers(oldValue, newValue); + + Float weight = row.getWeight(); + if (getModel().mustCopyIndividualObservationWeight() && weight != null) { + updateFrequencyRowsWeights(oldValue, -weight); + updateFrequencyRowsWeights(newValue, weight); } - ); + } + + if (getModel().mustCopyIndividualObservationWeight() + && IndividualObservationBatchRowModel.PROPERTY_WEIGHT.equals(propertyName)) { + + Float oldValue = (Float) evt.getOldValue(); + Float newValue = (Float) evt.getNewValue(); + Float weightToAdd; + + if (oldValue == null) { + weightToAdd = newValue; + + } else if (newValue == null) { + weightToAdd = - oldValue; + + } else { + weightToAdd = newValue - oldValue; + } + + if (weightToAdd != null) { + updateFrequencyRowsWeights(row.getSize(), weightToAdd); + } + } + } + }; } @@ -322,8 +379,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci Caracteristic newValue = (Caracteristic) evt.getNewValue(); // get step from the pmfm float step1 = getStep(newValue); - getModel().setStep(step1); - getModel().setDataSetIntervalWidth(step1); + model.setStep(step1); + model.setDataSetIntervalWidth(step1); frequenciesChart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step1 == 1f)); averageWeightsChart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step1 == 1f)); if (CollectionUtils.isNotEmpty(getModel().getRows())) { @@ -333,6 +390,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } } SpeciesFrequencyUIHandler.this.ui.getValidator().doValidate(); + + ((IndividualObservationBatchTableModel) ui.getObsTable().getModel()).setLengthstepCaracteristic(newValue); }); // when lengthStepCaracteristicUnit changed, let's updates the label of some fields @@ -385,6 +444,82 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci obsTableModel.setRows((List<IndividualObservationBatchRowModel>) evt.getNewValue()); }); + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, evt -> { + + CopyIndividualObservationMode newCopyMode = (CopyIndividualObservationMode) evt.getNewValue(); + CopyIndividualObservationMode oldCopyMode = (CopyIndividualObservationMode) evt.getOldValue(); + + if (oldCopyMode == CopyIndividualObservationMode.NOTHING) { + + long rowsWithData = model.getRows().stream() + .filter(row -> row.getLengthStep() != null + || row.getNumber() != null + || row.getWeight() != null) + .count(); + + if (rowsWithData > 0) { + + String htmlMessage = String.format( + CONFIRMATION_FORMAT, + t("tutti.editSpeciesFrequencies.changeCopyMode.confirm.message"), + t("tutti.editSpeciesFrequencies.changeCopyMode.confirm.help")); + int i = JOptionPane.showConfirmDialog( + getTopestUI(), + htmlMessage, + t("tutti.editSpeciesFrequencies.changeCopyMode.confirm.title"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + + if (i == JOptionPane.CANCEL_OPTION) { + return; + } + } + } + + model.getRows().clear(); + model.reloadRows(); + + if (newCopyMode != null) { + if (newCopyMode != CopyIndividualObservationMode.NOTHING) { + + Caracteristic lengthStepCaracteristic = model.getLengthStepCaracteristic(); + for (IndividualObservationBatchRowModel obsRow : model.getIndividualObservationRows()) { + + Float size = obsRow.getSize(); + if (size != null) { + size = model.getLengthStep(size); + if (log.isInfoEnabled()) { + log.info("size : " + size); + } + SpeciesFrequencyRowModel row = model.getRowCache().get(size); + if (row == null) { + row = getTableModel().createNewRow(); + row.setLengthStep(size); + row.setLengthStepCaracteristic(lengthStepCaracteristic); + model.getRows().add(row); + model.getRowCache().put(size, row); + } + row.incNumber(); + if (newCopyMode == CopyIndividualObservationMode.ALL && obsRow.getWeight() != null) { + row.addToWeight(obsRow.getWeight()); + } + } + } + + Collections.sort(model.getRows()); + + } else { + getTableModel().addNewRow(); + } + + model.reloadRows(); + + } + + getTableModel().fireTableDataChanged(); + + }); + // set the pattern to the weight in simple counting mode according to the weight unit ui.getSimpleCountingWeightField().setNumberPattern(weightUnit.getNumberEditorPattern()); @@ -469,7 +604,15 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.setMinStep(null); model.setMaxStep(null); model.setRtp(null); - model.setIndividualObservationRows(new ArrayList<>()); + + ((IndividualObservationBatchTableModel) ui.getObsTable().getModel()).setSpecies(speciesBatch.getSpecies()); + + ArrayList<IndividualObservationBatchRowModel> individualObservationRows = new ArrayList<>(); + IndividualObservationBatchRowModel emptyRow = + ((IndividualObservationBatchTableModel) ui.getObsTable().getModel()).createNewRow(); + emptyRow.addPropertyChangeListener(obsChangedListener); + individualObservationRows.add(emptyRow); + model.setIndividualObservationRows(individualObservationRows); frequencyEditor = editor; @@ -641,6 +784,62 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } + public void updateFrequencyRowsNumbers(Float lengthStepToDec, Float lengthStepToInc) { + if (log.isInfoEnabled()) { + log.info("updateFrequencyRowsNumbers " + lengthStepToDec + ", " + lengthStepToInc); + } + + SpeciesFrequencyTableModel tableModel = getTableModel(); + + if (lengthStepToDec != null) { + lengthStepToDec = getModel().getLengthStep(lengthStepToDec); + + SpeciesFrequencyRowModel row = getRowForLengthstep(lengthStepToDec); + row.decNumber(); + + if (row.getNumber() == 0) { + int rowIndex = tableModel.getRowIndex(row); + tableModel.removeRow(rowIndex); + getModel().getRowCache().remove(lengthStepToDec); + + } else { + tableModel.updateRow(row); + } + } + + if (lengthStepToInc != null) { + lengthStepToInc = getModel().getLengthStep(lengthStepToInc); + + SpeciesFrequencyRowModel row = getRowForLengthstep(lengthStepToInc); + row.incNumber(); + tableModel.updateRow(row); + } + } + + public void updateFrequencyRowsWeights(Float lengthStep, Float weight) { + if (log.isInfoEnabled()) { + log.info("updateFrequencyRowsWeights " + lengthStep + ", " + weight); + } + if (lengthStep != null && weight != null) { + + SpeciesFrequencyTableModel tableModel = getTableModel(); + + lengthStep = getModel().getLengthStep(lengthStep); + + SpeciesFrequencyRowModel row = getRowForLengthstep(lengthStep); + row.addToWeight(weight); + + if (Weights.isNullOrZero(row.getWeight())) { + int rowIndex = tableModel.getRowIndex(row); + tableModel.removeRow(rowIndex); + getModel().getRowCache().remove(lengthStep); + + } else { + tableModel.updateRow(row); + } + } + } + //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// @@ -870,14 +1069,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } - { // Weight column - - addFloatColumnToModel(columnModel, - IndividualObservationBatchTableModel.WEIGHT, - weightUnit, - obsTable); - } - { // Size column addFloatColumnToModel(columnModel, @@ -886,18 +1077,16 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci obsTable); } - { // Length step caracteristic column - - addComboDataColumnToModel(columnModel, - IndividualObservationBatchTableModel.LENGTH_STEP_CARACTERISTIC, - getDecorator(Caracteristic.class, null), - getDataContext().getLengthStepCaracteristics()); + { // Weight column + addFloatColumnToModel(columnModel, + IndividualObservationBatchTableModel.WEIGHT, + weightUnit, + obsTable); } List<Caracteristic> defaultCaracteristic = getModel().getDefaultCaracteristic(); - for (Caracteristic caracteristic : defaultCaracteristic) { String header = caracteristicDecorator.toString(caracteristic); String headerTip = caracteristicTipDecorator.toString(caracteristic); @@ -978,14 +1167,27 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci tableModel.addTableModelListener(e -> { - if (e.getType() == TableModelEvent.DELETE) { - int firstRow = e.getFirstRow(); - for (int i = firstRow ; i < tableModel.getRowCount() ; i++) { - tableModel.getRows().get(i).setRankOrder(i + 1); - } + int firstRow = e.getFirstRow(); + int lastRow = e.getLastRow(); + + switch (e.getType()) { + case TableModelEvent.DELETE: + for (int i = firstRow ; i < tableModel.getRowCount() ; i++) { + tableModel.getRows().get(i).setRankOrder(i + 1); + } + break; + + case TableModelEvent.INSERT: + for (int i = firstRow ; i <= lastRow ; i++) { + IndividualObservationBatchRowModel newRow = tableModel.getRows().get(i); + newRow.addPropertyChangeListener(obsChangedListener); + + if (getModel().mustCopyIndividualObservationSize()) { + updateFrequencyRowsNumbers(null, newRow.getSize()); + } + } } }); - } protected void consumeFeedRecord(FeedReaderMeasureRecord record) { @@ -1096,6 +1298,28 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci return label + " (" + unit + ")"; } + protected SpeciesFrequencyRowModel getRowForLengthstep(float lengthstep) { + Map<Float, SpeciesFrequencyRowModel> rowCache = getModel().getRowCache(); + + SpeciesFrequencyRowModel row = rowCache.get(lengthstep); + + if (row == null) { + row = getTableModel().createNewRow(); + row.setLengthStep(lengthstep); + rowCache.put(lengthstep, row); + + // get new index + List<Float> steps = Lists.newArrayList(rowCache.keySet()); + steps.add(lengthstep); + Collections.sort(steps); + + int indexToInsert = steps.indexOf(lengthstep); + getTableModel().addNewRow(indexToInsert, row); + } + + return row; + } + @Override public <E> void initBeanFilterableComboBox(BeanFilterableComboBox<E> comboBox, List<E> data, E selectedData) { super.initBeanFilterableComboBox(comboBox, data, selectedData); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index b94a76b..ef543ba 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -242,7 +242,7 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa * What to copy from the individual observations to the data table * @since 4.5 */ - protected CopyIndividualObservationMode copyIndividualObservationMode; + protected CopyIndividualObservationMode copyIndividualObservationMode = CopyIndividualObservationMode.NOTHING; /** * To store frequencies graph series. @@ -326,11 +326,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa if (averageWeight != null) { averageWeightsSeries.addOrUpdate(lengthStep, averageWeight); } - } - } - } recomputeTotalNumberAndWeight(); @@ -605,6 +602,26 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, oldValue, copyIndividualObservationMode); } + public boolean mustCopyIndividualObservationSize() { + return isCopyIndividualObservationAll() || isCopyIndividualObservationSize(); + } + + public boolean mustCopyIndividualObservationWeight() { + return isCopyIndividualObservationAll(); + } + + public boolean isCopyIndividualObservationAll() { + return copyIndividualObservationMode == CopyIndividualObservationMode.ALL; + } + + public boolean isCopyIndividualObservationNothing() { + return copyIndividualObservationMode == CopyIndividualObservationMode.NOTHING; + } + + public boolean isCopyIndividualObservationSize() { + return copyIndividualObservationMode == CopyIndividualObservationMode.SIZE; + } + public Set<SpeciesFrequencyRowModel> getEmptyRows() { return emptyRows; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java index ed32fd8..61bb6fc 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java @@ -3,6 +3,8 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.ac import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIHandler; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIModel; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; import org.jdesktop.swingx.JXTable; @@ -50,6 +52,15 @@ public class RemoveObservationAction extends SimpleActionSupport<SpeciesFrequenc if (answer == JOptionPane.YES_OPTION) { + SpeciesFrequencyUIModel model = ui.getModel(); + SpeciesFrequencyUIHandler handler = ui.getHandler(); + + rowsToDelete.forEach(row -> { + if (model.mustCopyIndividualObservationSize()) { + handler.updateFrequencyRowsNumbers(row.getSize(), null); + } + }); + int minSelection = obsTable.getSelectionModel().getMinSelectionIndex(); int maxSelection = obsTable.getSelectionModel().getMaxSelectionIndex(); obsTableModel.getRows().removeAll(rowsToDelete); 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 d54d701..c3b9e17 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 @@ -970,6 +970,8 @@ tutti.editIndividualObservationBatch.table.header.lengthStepCaracteristic= tutti.editIndividualObservationBatch.table.header.lengthStepCaracteristic.tip= tutti.editIndividualObservationBatch.table.header.otherCaracteristics= tutti.editIndividualObservationBatch.table.header.otherCaracteristics.tip= +tutti.editIndividualObservationBatch.table.header.rank= +tutti.editIndividualObservationBatch.table.header.rank.tip= tutti.editIndividualObservationBatch.table.header.size= tutti.editIndividualObservationBatch.table.header.size.tip= tutti.editIndividualObservationBatch.table.header.species= 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 7e27232..90ddd38 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 @@ -1372,6 +1372,9 @@ tutti.editSpeciesFrequencies.askBeforeSave.help=Que voulez-vous faire?<ul><li><s tutti.editSpeciesFrequencies.askBeforeSave.message=La saisie comporte des classes de taille avec et sans poids associés.<br/><strong>Seules les classes de taille avec poids seront dans ce cas sauvegardées.</strong> tutti.editSpeciesFrequencies.askBeforeSave.title=Confirmer l'enregistrement des mensurations tutti.editSpeciesFrequencies.averageWeight.label=Poids moyen +tutti.editSpeciesFrequencies.changeCopyMode.confirm.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour ne pas changer de mode de copie</li><li><strong>OK</strong> pour changer de mode de copie et supprimer les données saisies</li></ul> +tutti.editSpeciesFrequencies.changeCopyMode.confirm.message=Vous êtes sur le point de changer de mode de copie alors que des données ont été saisies dans les mensurations.<br/>Si vous changez de mode, les données vont être supprimées. +tutti.editSpeciesFrequencies.changeCopyMode.confirm.title=Changement de mode de copie tutti.editSpeciesFrequencies.error.itchyometer.bad.record=La mesure provenant de l'ichtyomètre n'est pas valide (la donnée est peut-être corrompue) \:<br/><ul><li>Enregistrement \: <strong>%s</strong></li><li>CRC \: <strong>%s</strong></li><li>CRC calculé \: <strong>%s</strong></li></ul> tutti.editSpeciesFrequencies.error.length.doublon=La classe de taille <strong>%s</strong> est utilisée plusieurs fois (deuxième occurrence trouvée à la ligne <strong>%s</strong>), ce qui n'est pas autorisé.<hr/>Veuillez corriger cela pour pouvoir enregistrer les mensurations. tutti.editSpeciesFrequencies.field.addIndividualObservationOnRafale=Ajouter aux observations individuelles -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm