This is an automated email from the git hooks/post-receive script. New change to branch develop in repository tutti. See http://git.codelutin.com/tutti.git from fe272b9 Merge branch 'feature/8034' into 'develop' new efe93eb début de réarrangement de l'écran des mensurations refs #6926 new 7c6650e mise en page de l'écran refs #6926 new 16b3d9d - use jaxx 2.29-SNAPSHOT - correction du mode de config à l'ouverture de l'écran - ajout de useRTP dans le modele refs #6926 new 21cb702 ajout du model de colonnes de la table des observations (refs #6926) new 4e8e103 organize imports new d47fd99 activtation ou desactivation de cellules de la tables des mensurations en fonction du mode de copie (refs #6926) new 22363b2 - suppression de l'onglet observations individuelles dans la capture - ajout des lignes dans la table d'obs individuelles dans les mensurations (refs #8019) new 9317d63 affichage de l'histogramme dans une popup (refs #8019) new 1bf50ad utilisation des rtp pour calculer les poids des lignes de mensuration (refs #8019) new b9eb3c4 vérification que le poids saisi est proche du poids calculé avec la RTP (refs #8019) new 6188e68 une seule popup pour l'histogramme pour pouvoir la fermer quand on quitte (refs #8019) new 78e54f6 titre de la popup de l'histogramme (refs #8019) new e7863a8 graph des poids moyens (refs #8019) new 7e77962 ajout d'une ligne d'observation individuelle quand on ajoute en rafale (refs #8019) new dbcbb41 - ajout du numéro de l'observation - suppression d'observations refs #8019 new bad7ac5 use lanbdas where possible new ac1e009 - 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 new 0b0fe18 - suppression des lignes d'observations individuelles sur - correction de l'affichage de l'histogramme des mensurations refs #8019 new 4488081 remplissage des lignes vides lors de l'ajout en rafale (refs #8019) new ba542e5 correction de l'incrément des lignes quand on quitte et revient sur l'ecran des mensurations (refs #8019) new 3af74a6 suppression des lignes d'observation individuelles générées en rafale quand on supprime le log correspondant (refs #8019) new d26a5b9 - validation des lignes d'observations - correction de l'ouverture de l'editeur de caracteristiques refs #8019 new 6b129ec Ne pas utiliser adagio dans les ui new fc1de39 Fix merge new 48b0400 Fixes #8019 Merge branch 'feature/ecran_obs_individuelles' into develop The 25 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 48b04007c2984568c3ecc5108f8f958396070443 Merge: fe272b9 fc1de39 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 2 11:25:41 2016 +0100 Fixes #8019 Merge branch 'feature/ecran_obs_individuelles' into develop commit fc1de3969bf4e7d3353fbd0e593cc247bc173ea3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 2 11:13:19 2016 +0100 Fix merge commit 6b129ec9e92d2d896e3c07d48b6d5b94997a9cb6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 2 11:13:02 2016 +0100 Ne pas utiliser adagio dans les ui commit d26a5b9897d5549f187eebb7f080655b2298588d Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 1 18:57:28 2016 +0100 - validation des lignes d'observations - correction de l'ouverture de l'editeur de caracteristiques refs #8019 commit 3af74a612a9c601fc6058e536b8c0adb5232d1b1 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 1 15:05:06 2016 +0100 suppression des lignes d'observation individuelles générées en rafale quand on supprime le log correspondant (refs #8019) commit ba542e56013d94c96b0003bca2f419e634d8139e Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 1 14:57:43 2016 +0100 correction de l'incrément des lignes quand on quitte et revient sur l'ecran des mensurations (refs #8019) commit 448808123b1f4d57a1d06dc4bec46757fc3b97f7 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 1 14:45:52 2016 +0100 remplissage des lignes vides lors de l'ajout en rafale (refs #8019) commit 0b0fe184db70772d80dc26ecf43f81c2edadc217 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 1 12:01:02 2016 +0100 - suppression des lignes d'observations individuelles sur - correction de l'affichage de l'histogramme des mensurations refs #8019 commit ac1e009bbfd23b2525a2ab8d2e57ba4a66dc8cda 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 bad7ac5e3eacf128cfe11bc6cf55feb754407a08 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 16:35:25 2016 +0100 use lanbdas where possible commit dbcbb41e7ebe4cc4bb8c0001dc84dc52c04e0a55 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 7e77962cdf4224f9caffd0e4c423028c39031805 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 e7863a8ebda9c072da10b53622e2d7a0d20dd0d9 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 11:35:29 2016 +0100 graph des poids moyens (refs #8019) commit 78e54f6ea3a79d864f84aec51fecdb0425438fa4 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 6188e6880ab5a6f64e36bfe702062aa15f85a34c 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 b9eb3c4c27c348dee54ad4493fad868945dc2413 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 1bf50adf67dc5d08d3365b4320666b109b49ac26 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 9317d638647e7c73a2ecfa84ceca4a6490ef2382 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 22363b268ff97cd67095eb720b87a41cf49b51d7 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 d47fd99a1c1f97e7f5ddaaa5d0571bc2bc6ade10 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 4e8e1039b4b3bb47b727214d7034593fe07a779d Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 22 14:30:13 2016 +0100 organize imports commit 21cb702409a8b5173e328de736c299b398e49b5d 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 16b3d9d7cd82f8f2922b8ebe2f7ab31696937cde 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 7c6650eb79f3ce07cb6a8d37fde6f3c7bced4b63 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 19 15:09:16 2016 +0100 mise en page de l'écran refs #6926 commit efe93eb1301d442457e6de2548abb998059590f6 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: pom.xml | 3 +- .../java/fr/ifremer/tutti/TuttiConfiguration.java | 8 + .../fr/ifremer/tutti/TuttiConfigurationOption.java | 18 +- .../entities/protocol/TuttiProtocols.java | 4 +- .../persistence/entities/referential/Sexs.java | 21 + .../i18n/tutti-persistence_en_GB.properties | 2 + .../i18n/tutti-persistence_fr_FR.properties | 2 + tutti-ui-swing/src/license/THIRD-PARTY.properties | 2 +- .../filtered-resources/tutti-help-fr.properties | 10 +- .../swing/content/config/TuttiConfigUIHandler.java | 6 + .../operation/FishingOperationsUIHandler.java | 5 +- .../content/operation/catches/EditCatchesUI.jaxx | 34 +- .../content/operation/catches/EditCatchesUI.jcss | 12 - .../operation/catches/EditCatchesUIHandler.java | 105 +-- .../operation/catches/EditCatchesUIModel.java | 11 +- .../catches/FrequencyConfigurationMode.java | 5 +- .../accidental/AccidentalBatchUIHandler.java | 5 +- .../create/CreateBenthosBatchUIHandler.java | 2 +- .../benthos/split/SplitBenthosBatchUIHandler.java | 2 +- .../CopyIndividualObservationMode.java | 10 + .../IndividualObservationBatchTableModel.java | 70 +- .../IndividualObservationBatchUI.jaxx | 97 --- .../IndividualObservationBatchUI.jcss | 106 --- .../IndividualObservationBatchUIHandler.java | 758 ------------------ .../IndividualObservationBatchUIModel.java | 140 ---- ...ExportMultiPostIndividualObservationAction.java | 79 -- ...ImportMultiPostIndividualObservationAction.java | 81 -- ...enCreateIndividualObservationBatchUIAction.java | 57 -- .../RemoveAllIndividualObservationBatchAction.java | 156 ---- .../RemoveIndividualObservationBatchAction.java | 118 --- ...SpeciesForIndividualObservationBatchAction.java | 103 --- .../create/CreateIndividualObservationBatchUI.jaxx | 135 ---- .../create/CreateIndividualObservationBatchUI.jcss | 137 ---- .../CreateIndividualObservationBatchUIHandler.java | 412 ---------- .../CreateIndividualObservationBatchUIModel.java | 290 ------- ...teIndividualObservationBatchAndCloseAction.java | 64 -- ...ndividualObservationBatchAndContinueAction.java | 73 -- ...eateIndividualObservationBatchCancelAction.java | 59 -- .../create/CreateSpeciesBatchUIHandler.java | 2 +- .../frequency/SpeciesFrequencyLogRowModel.java | 11 + .../frequency/SpeciesFrequencyRowModel.java | 71 +- .../frequency/SpeciesFrequencyTableModel.java | 181 +++-- .../species/frequency/SpeciesFrequencyUI.jaxx | 351 +++++---- .../species/frequency/SpeciesFrequencyUI.jcss | 325 +++++--- .../frequency/SpeciesFrequencyUIHandler.java | 866 ++++++++++++++++++--- .../species/frequency/SpeciesFrequencyUIModel.java | 354 ++++++++- .../actions/ApplySpeciesFrequencyRafaleAction.java | 24 +- .../DeleteSpeciesFrequencyLogRowAction.java | 7 + .../frequency/actions/RemoveObservationAction.java | 75 ++ .../actions/ResetSpeciesFrequencyAction.java | 4 +- .../species/split/SplitSpeciesBatchUIHandler.java | 2 +- .../actions/EditFishingOperationAction.java | 3 - .../EditFishingOperationInValidationUIAction.java | 2 - .../ui/swing/util/AbstractTuttiUIHandler.java | 42 +- .../CaracteristicMapCellComponent.java | 2 +- .../CaracteristicMapColumnUIHandler.java | 4 +- .../caracteristics/CaracteristicMapEditorUI.jaxx | 2 +- .../util/table/AbstractTuttiTableUIHandler.java | 20 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 39 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 51 +- .../src/main/resources/icons/action-chart.png | Bin 0 -> 541 bytes 61 files changed, 2172 insertions(+), 3468 deletions(-) create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Sexs.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/CopyIndividualObservationMode.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jcss delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/ExportMultiPostIndividualObservationAction.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/ImportMultiPostIndividualObservationAction.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/OpenCreateIndividualObservationBatchUIAction.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/RemoveAllIndividualObservationBatchAction.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/RemoveIndividualObservationBatchAction.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/SelectSpeciesForIndividualObservationBatchAction.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jcss delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchAndCloseAction.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchAndContinueAction.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/actions/CreateIndividualObservationBatchCancelAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java create mode 100644 tutti-ui-swing/src/main/resources/icons/action-chart.png -- 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit efe93eb1301d442457e6de2548abb998059590f6 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 | 115 ++++---- .../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, 335 insertions(+), 221 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 97343f5..814ddf2 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 9b9b1f0..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 @@ -71,6 +71,8 @@ import javax.swing.SwingUtilities; import java.awt.BorderLayout; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -157,7 +159,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci public boolean isRowValid(SpeciesFrequencyRowModel row) { SpeciesFrequencyUIModel model = getModel(); - return model.isRowValid(row); + boolean valid = model.isRowValid(row); + return valid; } @@ -224,16 +227,25 @@ 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, evt -> { - boolean connected = (boolean) evt.getNewValue(); + 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) { + if (connected && SpeciesFrequencyUIHandler.this.frequencyEditor != null) { - // listen when itchtyometer is connected and this ui is showing - listenItchtyometer(); - } + // listen when itchtyometer is connected and this ui is showing + listenItchtyometer(); + } - SwingUtilities.invokeLater(this::updateLogVisibility); + SwingUtilities.invokeLater( + new Runnable() { + @Override + public void run() { + updateLogVisibility(); + } + }); + } }); } @@ -283,58 +295,71 @@ 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, evt -> { - Caracteristic newValue = (Caracteristic) evt.getNewValue(); - // get step from the pmfm - float step1 = getStep(newValue); - getModel().setStep(step1); - getModel().setDataSetIntervalWidth(step1); - chart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step1 == 1f)); - if (CollectionUtils.isNotEmpty(getModel().getRows())) { - for (SpeciesFrequencyRowModel rowModel : getModel().getRows()) { - rowModel.setLengthStepCaracteristic(newValue); - recomputeRowValidState(rowModel); + 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); + chart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step == 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, evt -> { + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_LENGTH_STEP_CARACTERISTIC_UNIT, new PropertyChangeListener() { - String unit = (String) evt.getNewValue(); + @Override + public void propertyChange(PropertyChangeEvent evt) { - if (unit == null) { + String unit = (String) evt.getNewValue(); - unit = t("tutti.editSpeciesFrequencies.unkownStepUnit"); - } + if (unit == null) { - getUI().getMinStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.minStep"), unit)); - getUI().getMinStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.minStep.tip"), unit)); + 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().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_CONFIGURATION_MODE, evt -> { - final FrequencyConfigurationMode newValue = (FrequencyConfigurationMode) evt.getNewValue(); - SwingUtilities.invokeLater( - () -> { - JComponent componentToFocus = getComponentToFocus(newValue); - if (componentToFocus != null) { - componentToFocus.grabFocus(); + 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(); + } } - updateLogVisibility(); - } - ); + ); + } }); // set the pattern to the weight in simple counting mode according to the weight unit @@ -425,7 +450,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // create log table model SpeciesFrequencyLogsTableModel logTableModel = new SpeciesFrequencyLogsTableModel(logColumnModel); - logTableModel.setRows(new ArrayList<>()); + logTableModel.setRows(new ArrayList<SpeciesFrequencyLogRowModel>()); logTable.setModel(logTableModel); logTable.setColumnModel(logColumnModel); 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 145f829..df42bff 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 5b42237..5d8f169 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= @@ -1453,6 +1454,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= @@ -1462,6 +1469,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 0f62712..ed7b607 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= @@ -1370,18 +1371,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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 7c6650eb79f3ce07cb6a8d37fde6f3c7bced4b63 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 5d8f169..389d14f 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 @@ -1454,12 +1454,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= @@ -1493,6 +1504,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 ed7b607..7087d96 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 @@ -1371,12 +1371,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 @@ -1402,6 +1413,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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 16b3d9d7cd82f8f2922b8ebe2f7ab31696937cde 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 df42bff..a14f569 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<>(); /** + * 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 @@ -479,6 +488,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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 21cb702409a8b5173e328de736c299b398e49b5d 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 a14f569..4c76c1d 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() { @@ -654,4 +670,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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 4e8e1039b4b3bb47b727214d7034593fe07a779d 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit d47fd99a1c1f97e7f5ddaaa5d0571bc2bc6ade10 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 01fbc34..78a94a8 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 @@ -119,6 +119,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 4c76c1d..18e412c 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) { @@ -514,6 +522,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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 22363b268ff97cd67095eb720b87a41cf49b51d7 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 | 35 +- .../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 | 758 --------------------- .../IndividualObservationBatchUIModel.java | 140 ---- ...ExportMultiPostIndividualObservationAction.java | 79 --- ...ImportMultiPostIndividualObservationAction.java | 81 --- ...enCreateIndividualObservationBatchUIAction.java | 57 -- .../RemoveAllIndividualObservationBatchAction.java | 156 ----- .../RemoveIndividualObservationBatchAction.java | 118 ---- ...SpeciesForIndividualObservationBatchAction.java | 103 --- .../create/CreateIndividualObservationBatchUI.jaxx | 135 ---- .../create/CreateIndividualObservationBatchUI.jcss | 137 ---- .../CreateIndividualObservationBatchUIHandler.java | 412 ----------- .../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, 53 insertions(+), 2999 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 b674111..a5315f9 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 @@ -76,8 +76,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(); @@ -160,22 +159,22 @@ public class FishingOperationsUIHandler extends AbstractTuttiTabContainerUIHandl } } - // done here instead of in the action in order to update the headers - // when the operation is saved - String fishingOperationText = getFishingOperationTitle(newValue); - - EditFishingOperationUI efoUI = getUI().getFishingOperationTabContent(); - efoUI.getTraitGeneralTabPane().setTitle(fishingOperationText); - efoUI.getVesselUseFeatureTabPane().setTitle(fishingOperationText); - efoUI.getGearUseFeatureTabPane().setTitle(fishingOperationText); - - EditCatchesUI ecUI = getUI().getCatchesTabContent(); - ecUI.getCatchesCaracteristicsTabPane().setTitle(fishingOperationText); - ecUI.getSpeciesTabFishingOperationReminderLabel().setTitle(fishingOperationText); - ecUI.getBenthosTabFishingOperationReminderLabel().setTitle(fishingOperationText); - ecUI.getMarineLitterTabFishingOperationReminderLabel().setTitle(fishingOperationText); - ecUI.getAccidentalTabFishingOperationReminderLabel().setTitle(fishingOperationText); - ecUI.getIndividualObservationTabFishingOperationReminderLabel().setTitle(fishingOperationText); + // done here instead of in the action in order to update the headers + // when the operation is saved + String fishingOperationText = getFishingOperationTitle(newValue); + + EditFishingOperationUI efoUI = getUI().getFishingOperationTabContent(); + efoUI.getTraitGeneralTabPane().setTitle(fishingOperationText); + efoUI.getVesselUseFeatureTabPane().setTitle(fishingOperationText); + efoUI.getGearUseFeatureTabPane().setTitle(fishingOperationText); + + EditCatchesUI ecUI = getUI().getCatchesTabContent(); + ecUI.getCatchesCaracteristicsTabPane().setTitle(fishingOperationText); + ecUI.getSpeciesTabFishingOperationReminderLabel().setTitle(fishingOperationText); + ecUI.getBenthosTabFishingOperationReminderLabel().setTitle(fishingOperationText); + ecUI.getMarineLitterTabFishingOperationReminderLabel().setTitle(fishingOperationText); + ecUI.getAccidentalTabFishingOperationReminderLabel().setTitle(fishingOperationText); + } }); model.addPropertyChangeListener(FishingOperationsUIModel.PROPERTY_FISHING_OPERATION, evt -> { 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 d4392bc..c32d8a9 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 @@ -192,8 +192,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 @@ -213,7 +212,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(); } @@ -248,7 +246,6 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi closeUI(ui.getBenthosTabFrequencyEditor()); closeUI(ui.getMarineLitterTabContent()); closeUI(ui.getAccidentalTabContent()); - closeUI(ui.getIndividualObservationTabContent()); } @Override @@ -685,47 +682,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 be9b8a2..412d712 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 9b5d481..410da8c 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 @@ -446,7 +446,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 d36287e..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java +++ /dev/null @@ -1,758 +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.getAllIndividualObservationBatchsForFishingOperation(bean.getIdAsInt()); - - 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); - return !validator.hasErrorMessagess(); - } - - @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 bac444e..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java +++ /dev/null @@ -1,140 +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 java.util.stream.Collectors; - -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(); - result.addAll(getRows().stream().map(IndividualObservationBatchRowModel::getSpecies).collect(Collectors.toList())); - 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 abc5d98..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/actions/OpenCreateIndividualObservationBatchUIAction.java +++ /dev/null @@ -1,57 +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; - -/** - * Created on 3/7/15. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.15 - */ -public class OpenCreateIndividualObservationBatchUIAction extends SimpleActionSupport<IndividualObservationBatchUI> { - - 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 1c46006..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 - - Integer id = selectedBatch.getIdAsInt(); - - 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 5a76be2..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 - - Integer id = selectedBatch.getIdAsInt(); - - 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 7a60a45..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java +++ /dev/null @@ -1,412 +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.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, - 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, 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<>(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, 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, 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, - 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, - 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 78a94a8..1a3056a 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 18e412c..f2f67cf 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 daa06ad..334444c 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 @@ -449,7 +449,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 88e8b3a..7eb659a 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 @@ -781,9 +781,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 2338b6e..24a15bb 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; /** @@ -279,7 +281,7 @@ public abstract class AbstractTuttiTableUIHandler<R extends AbstractTuttiBeanUIM private ListSelectionListener tableSelectionListener; - private KeyAdapter keyAdapter; + private Map<JTable, KeyAdapter> keyAdapters = new HashMap<>(); protected void installTableSaveOnRowChangedSelectionListener() { @@ -367,11 +369,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 = @@ -382,7 +384,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) { @@ -423,6 +425,7 @@ public abstract class AbstractTuttiTableUIHandler<R extends AbstractTuttiBeanUIM } } }; + keyAdapters.put(table, keyAdapter); if (log.isDebugEnabled()) { log.debug("Intall " + keyAdapter); @@ -450,17 +453,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(); @@ -470,7 +474,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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 9317d638647e7c73a2ecfa84ceca4a6490ef2382 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 1bf50adf67dc5d08d3365b4320666b109b49ac26 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 | 111 ++++++++++++--------- .../species/frequency/SpeciesFrequencyUI.jcss | 1 + .../frequency/SpeciesFrequencyUIHandler.java | 91 ++++++++++++++--- .../species/frequency/SpeciesFrequencyUIModel.java | 46 +++++++++ 5 files changed, 215 insertions(+), 68 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 63dd67e..60fd754 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; @@ -234,7 +256,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 1a3056a..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 @@ -29,6 +29,7 @@ import org.jfree.data.xy.XYSeries; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; @@ -55,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")); @@ -176,7 +177,9 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp if (oldRows != null) { - oldRows.forEach(this::dettachListeners); + for (SpeciesFrequencyRowModel row : oldRows) { + dettachListeners(row); + } } @@ -228,42 +231,45 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp private PropertyChangeListener getOnLengthStepChangedListener() { if (onLengthStepChangedListener == null) { - onLengthStepChangedListener = evt -> { + onLengthStepChangedListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + + Float oldValue = (Float) evt.getOldValue(); + if (oldValue != null) { - Float oldValue = (Float) evt.getOldValue(); - if (oldValue != null) { + modelCache.removeLengthStep(oldValue); + if (series.indexOf(oldValue) >= 0) { + series.remove(oldValue); + } - modelCache.removeLengthStep(oldValue); - if (series.indexOf(oldValue) >= 0) { - series.remove(oldValue); } - } + SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); - SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); + Float newValue = (Float) evt.getNewValue(); + if (newValue != null) { - Float newValue = (Float) evt.getNewValue(); - if (newValue != null) { + modelCache.addLengthStep(row); - modelCache.addLengthStep(row); + if (row.getNumber() != null) { - if (row.getNumber() != null) { + series.addOrUpdate(newValue, row.getNumber()); - series.addOrUpdate(newValue, row.getNumber()); + } } - } - - uiModel.recomputeCanEditLengthStep(); - uiModel.recomputeRowsValidateState(); - uiModel.updateEmptyRow(row); + uiModel.recomputeCanEditLengthStep(); + uiModel.recomputeRowsValidateState(); + uiModel.updateEmptyRow(row); - // Can recompute total number and weight only after valid flag change - uiModel.recomputeTotalNumberAndWeight(); + // Can recompute total number and weight only after valid flag change + uiModel.recomputeTotalNumberAndWeight(); - fireTableDataChanged(); + fireTableDataChanged(); + } }; } return onLengthStepChangedListener; @@ -271,38 +277,44 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp private PropertyChangeListener getOnNumberChangedListener() { if (onNumberChangedListener == null) { - onNumberChangedListener = evt -> { + onNumberChangedListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { - SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); + SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); - Integer newValue = (Integer) evt.getNewValue(); + Integer newValue = (Integer) evt.getNewValue(); - Float lengthStep = row.getLengthStep(); + Float lengthStep = row.getLengthStep(); - if (lengthStep != null) { + if (lengthStep != null) { - if (newValue == null) { + if (newValue == null) { - // remove the value for the lengthStep - if (series.indexOf(lengthStep) >= 0) { - series.remove(lengthStep); - } + // remove the value for the lengthStep + if (series.indexOf(lengthStep) >= 0) { + series.remove(lengthStep); + } - } else { + } else { - series.addOrUpdate(lengthStep, row.getNumber()); + series.addOrUpdate(lengthStep, row.getNumber()); + + } } - } + uiModel.recomputeCanEditLengthStep(); + uiModel.recomputeRowValidState(row); + uiModel.updateEmptyRow(row); - uiModel.recomputeCanEditLengthStep(); - 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(); + // Can recompute total number and weight only after valid flag change + uiModel.recomputeTotalNumberAndWeight(); + } }; } return onNumberChangedListener; @@ -310,17 +322,20 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp private PropertyChangeListener getOnWeightChangedListener() { if (onWeightChangedListener == null) { - onWeightChangedListener = evt -> { + onWeightChangedListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { - SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); - modelCache.updateRowWithWeight(row); + SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); + modelCache.updateRowWithWeight(row); - uiModel.recomputeRowsValidateState(); - uiModel.updateEmptyRow(row); + uiModel.recomputeRowsValidateState(); + uiModel.updateEmptyRow(row); - // Can recompute total number and weight only after valid flag change - uiModel.recomputeTotalNumberAndWeight(); + // Can recompute total number and weight only after valid flag change + uiModel.recomputeTotalNumberAndWeight(); + } }; } return onWeightChangedListener; 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 f2f67cf..ba13e6c 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<>(); /** + * 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 @@ -513,6 +523,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; } @@ -650,6 +670,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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit b9eb3c4c27c348dee54ad4493fad868945dc2413 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 cbe3529..93131c9 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java @@ -564,6 +564,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()); } @@ -632,6 +636,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 55fb9a6..3543227 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 2fc9b59..565f5ed 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 @@ -113,6 +113,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")) @@ -176,6 +179,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 60fd754..de53c00 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 389d14f..d56da89 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 7087d96..d924401 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 6188e6880ab5a6f64e36bfe702062aa15f85a34c 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 78e54f6ea3a79d864f84aec51fecdb0425438fa4 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 c32d8a9..0d81b41 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 @@ -452,13 +452,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 c4629fa..e9c7861 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 @@ -509,11 +509,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); } @@ -584,9 +594,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) { @@ -597,7 +627,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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit e7863a8ebda9c072da10b53622e2d7a0d20dd0d9 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 0d81b41..e1a96ea 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 @@ -457,7 +457,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 de53c00..89e625d 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 @@ -260,4 +260,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 ba13e6c..953c43b 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); + } } @@ -733,7 +755,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 d56da89..5bb32e3 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 @@ -1454,6 +1454,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 d924401..3e9f193 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 @@ -1371,6 +1371,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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 7e77962cdf4224f9caffd0e4c423028c39031805 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 953c43b..f6ed524 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) { @@ -565,6 +584,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; } @@ -726,6 +755,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 5bb32e3..ca61763 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 @@ -1457,6 +1457,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 3e9f193..6a07a9b 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 @@ -1374,6 +1374,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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit dbcbb41e7ebe4cc4bb8c0001dc84dc52c04e0a55 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 ca61763..dc695d3 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 @@ -1441,6 +1441,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= @@ -1518,6 +1524,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 6a07a9b..af31f3d 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 @@ -924,16 +924,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 @@ -1358,6 +1356,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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit bad7ac5e3eacf128cfe11bc6cf55feb754407a08 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit ac1e009bbfd23b2525a2ab8d2e57ba4a66dc8cda 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 89e625d..0fdf044 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 f6ed524..6997915 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(); @@ -604,6 +601,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 dc695d3..c4312f6 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 @@ -978,6 +978,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 af31f3d..85a1a53 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 @@ -1376,6 +1376,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>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 0b0fe184db70772d80dc26ecf43f81c2edadc217 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 1 12:01:02 2016 +0100 - suppression des lignes d'observations individuelles sur - correction de l'affichage de l'histogramme des mensurations refs #8019 --- .../catches/species/frequency/SpeciesFrequencyUIHandler.java | 3 --- .../species/frequency/actions/ResetSpeciesFrequencyAction.java | 4 ++-- 2 files changed, 2 insertions(+), 5 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 7b93051..e7989b2 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 @@ -1006,9 +1006,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci chartPanel.setMouseZoomable(false); chartPanel.setPopupMenu(null); - JPanel histogramPanel = ui.getHistogramPanel(); - histogramPanel.add(chartPanel, BorderLayout.CENTER); - averageWeightsHistogramPopup.getContentPane().add(chartPanel); averageWeightsHistogramPopup.pack(); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ResetSpeciesFrequencyAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ResetSpeciesFrequencyAction.java index 8b72765..4a3f8a5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ResetSpeciesFrequencyAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ResetSpeciesFrequencyAction.java @@ -25,7 +25,6 @@ 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.species.frequency.SpeciesFrequencyRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; import jaxx.runtime.SwingUtil; @@ -61,7 +60,8 @@ public class ResetSpeciesFrequencyAction extends AbstractAction { public void actionPerformed(ActionEvent e) { // remove all frequencies - ui.getModel().setRows(Lists.<SpeciesFrequencyRowModel>newArrayList()); + ui.getModel().setRows(Lists.newArrayList()); + ui.getModel().setIndividualObservationRows(Lists.newArrayList()); } } \ No newline at end of file -- 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 448808123b1f4d57a1d06dc4bec46757fc3b97f7 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 1 14:45:52 2016 +0100 remplissage des lignes vides lors de l'ajout en rafale (refs #8019) --- .../IndividualObservationBatchTableModel.java | 24 ++++++++++++++++++++++ .../actions/ApplySpeciesFrequencyRafaleAction.java | 10 ++++++--- 2 files changed, 31 insertions(+), 3 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 d71cdb7..22274f9 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 @@ -115,4 +115,28 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab return result; } + + public IndividualObservationBatchRowModel getEmptyRow() { + + IndividualObservationBatchRowModel result = null; + + for (int i = rows.size() - 1 ; i >= 0 ; i--) { + IndividualObservationBatchRowModel row = rows.get(i); + // if the row has no data set, then it could be the empty row we are looking for + if (row.getWeight() == null + && row.getSize() == null + && (row.getCaracteristics() == null || row.getCaracteristics().isEmpty()) + && row.getComment() == null + && (row.getAttachment() == null || row.getAttachment().isEmpty())) { + + result = row; + + } else { // if the row has data set, then the empty row we are looking for was the previous row + break; + } + + } + + return result; + } } 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 6fb44fa..ea3d45d 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 @@ -135,9 +135,13 @@ public class ApplySpeciesFrequencyRafaleAction { IndividualObservationBatchTableModel obsTableModel = (IndividualObservationBatchTableModel) ui.getObsTable().getModel(); - IndividualObservationBatchRowModel newObsRow = obsTableModel.createNewRow(); - newObsRow.setSize(step); - obsTableModel.addNewRow(newObsRow); + IndividualObservationBatchRowModel obsRow = obsTableModel.getEmptyRow(); + if (obsRow == null) { + obsRow = obsTableModel.createNewRow(); + obsTableModel.addNewRow(obsRow); + } + obsRow.setSize(step); + obsTableModel.updateRow(obsRow); } } -- 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit ba542e56013d94c96b0003bca2f419e634d8139e Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 1 14:57:43 2016 +0100 correction de l'incrément des lignes quand on quitte et revient sur l'ecran des mensurations (refs #8019) --- .../IndividualObservationBatchTableModel.java | 2 +- .../catches/species/frequency/SpeciesFrequencyUIHandler.java | 10 +++++----- 2 files changed, 6 insertions(+), 6 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 22274f9..2235ae5 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 @@ -82,7 +82,7 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab public IndividualObservationBatchTableModel(WeightUnit weightUnit, TableColumnModelExt columnModel) { - super(columnModel, true, true); + super(columnModel, true, false); this.weightUnit = weightUnit; setNoneEditableCols(RANK); 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 e7989b2..bb4b4b5 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 @@ -605,14 +605,14 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.setMaxStep(null); model.setRtp(null); - ((IndividualObservationBatchTableModel) ui.getObsTable().getModel()).setSpecies(speciesBatch.getSpecies()); + IndividualObservationBatchTableModel obsTableModel = (IndividualObservationBatchTableModel) ui.getObsTable().getModel(); + obsTableModel.setSpecies(speciesBatch.getSpecies()); ArrayList<IndividualObservationBatchRowModel> individualObservationRows = new ArrayList<>(); - IndividualObservationBatchRowModel emptyRow = - ((IndividualObservationBatchTableModel) ui.getObsTable().getModel()).createNewRow(); - emptyRow.addPropertyChangeListener(obsChangedListener); - individualObservationRows.add(emptyRow); model.setIndividualObservationRows(individualObservationRows); + IndividualObservationBatchRowModel emptyRow = obsTableModel.createNewRow(); + emptyRow.addPropertyChangeListener(obsChangedListener); + obsTableModel.addNewRow(emptyRow); frequencyEditor = editor; -- 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 3af74a612a9c601fc6058e536b8c0adb5232d1b1 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 1 15:05:06 2016 +0100 suppression des lignes d'observation individuelles générées en rafale quand on supprime le log correspondant (refs #8019) --- .../species/frequency/SpeciesFrequencyLogRowModel.java | 11 +++++++++++ .../frequency/actions/ApplySpeciesFrequencyRafaleAction.java | 9 +++++---- .../frequency/actions/DeleteSpeciesFrequencyLogRowAction.java | 7 +++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogRowModel.java index 924a934..109e6e7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogRowModel.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; * #L% */ +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import org.apache.commons.lang3.time.DateFormatUtils; import org.jdesktop.beans.AbstractSerializableBean; @@ -43,6 +44,8 @@ public class SpeciesFrequencyLogRowModel extends AbstractSerializableBean { protected Date date; + protected IndividualObservationBatchRowModel obsRow; + public Float getLengthStep() { return lengthStep; } @@ -59,6 +62,14 @@ public class SpeciesFrequencyLogRowModel extends AbstractSerializableBean { this.date = date; } + public IndividualObservationBatchRowModel getObsRow() { + return obsRow; + } + + public void setObsRow(IndividualObservationBatchRowModel obsRow) { + this.obsRow = obsRow; + } + public String getLabel() { String formattedTime = DateFormatUtils.format(date, "HH:mm:ss"); return formattedTime + " : " + lengthStep.toString(); 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 ea3d45d..03d2d39 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 @@ -126,10 +126,10 @@ public class ApplySpeciesFrequencyRafaleAction { JXTable logsTable = ui.getLogsTable(); SpeciesFrequencyLogsTableModel logsTableModel = (SpeciesFrequencyLogsTableModel) logsTable.getModel(); - SpeciesFrequencyLogRowModel newRow = logsTableModel.createNewRow(); - newRow.setDate(new Date()); - newRow.setLengthStep(step); - logsTableModel.addNewRow(0, newRow); + SpeciesFrequencyLogRowModel newLogRow = logsTableModel.createNewRow(); + newLogRow.setDate(new Date()); + newLogRow.setLengthStep(step); + logsTableModel.addNewRow(0, newLogRow); if (model.isAddIndividualObservationOnRafale()) { IndividualObservationBatchTableModel obsTableModel = @@ -142,6 +142,7 @@ public class ApplySpeciesFrequencyRafaleAction { } obsRow.setSize(step); obsTableModel.updateRow(obsRow); + newLogRow.setObsRow(obsRow); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/DeleteSpeciesFrequencyLogRowAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/DeleteSpeciesFrequencyLogRowAction.java index ebd0bf7..1aee35c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/DeleteSpeciesFrequencyLogRowAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/DeleteSpeciesFrequencyLogRowAction.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.ac * #L% */ +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyLogCellComponent; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyLogRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyLogsTableModel; @@ -90,6 +91,12 @@ public class DeleteSpeciesFrequencyLogRowAction extends AbstractAction { int index = logsTableModel.getRowIndex(row); logsTableModel.removeRow(index); + if (row.getObsRow() != null) { + IndividualObservationBatchTableModel obsTableModel = + (IndividualObservationBatchTableModel) ui.getObsTable().getModel(); + obsTableModel.removeRow(obsTableModel.getRowIndex(row.getObsRow())); + } + } } -- 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit d26a5b9897d5549f187eebb7f080655b2298588d Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 1 18:57:28 2016 +0100 - validation des lignes d'observations - correction de l'ouverture de l'editeur de caracteristiques refs #8019 --- .../content/operation/catches/EditCatchesUI.jaxx | 6 + .../operation/catches/EditCatchesUIHandler.java | 49 +++++- .../accidental/AccidentalBatchUIHandler.java | 5 +- .../frequency/SpeciesFrequencyUIHandler.java | 185 ++++++++++++++------- .../species/frequency/SpeciesFrequencyUIModel.java | 121 ++++++++++++-- .../frequency/actions/RemoveObservationAction.java | 1 + .../CaracteristicMapCellComponent.java | 2 +- .../CaracteristicMapColumnUIHandler.java | 4 +- .../caracteristics/CaracteristicMapEditorUI.jaxx | 2 +- 9 files changed, 294 insertions(+), 81 deletions(-) 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 6a8ff08..0bd414d 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 @@ -142,6 +142,12 @@ public EditCatchesUI(FishingOperationsUI parentUI) { <SpeciesFrequencyUI id='speciesTabFrequencyEditor' constructorParams='speciesTabContent'/> </JXTitledPanel> + <JXTitledPanel id='speciesIndividualObservationCaracteristicMapEditorReminderLabel' + constraints='EditCatchesUIHandler.EDIT_CARACTERISTICS_CARD'> + <CaracteristicMapEditorUI + id='speciesIndividualObservationCaracteristicMapEditor' + constructorParams='speciesTabContent'/> + </JXTitledPanel> </JPanel> </tab> <tab id='benthosTab'> 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 e1a96ea..1938c07 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 @@ -49,6 +49,8 @@ import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTabbedPane; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import javax.swing.table.TableColumn; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -76,9 +78,9 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi public static final String EDIT_CARACTERISTICS_CARD = "caracteristicsCard"; -// public static final String CAROUSSEL_TREMIE_VESSEL = "carousselTremieVessel"; + public static final String CAROUSSEL_TREMIE_VESSEL = "carousselTremieVessel"; -// public static final String CLASSIC_VESSEL = "classicVessel"; + public static final String CLASSIC_VESSEL = "classicVessel"; /** Logger. */ private static final Log log = LogFactory.getLog(EditCatchesUIHandler.class); @@ -127,7 +129,7 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi public void beforeInit(EditCatchesUI ui) { super.beforeInit(ui); - this.catchBatchMonitor = new TuttiBeanMonitor<>( + this.catchBatchMonitor = new TuttiBeanMonitor<EditCatchesUIModel>( EditCatchesUIModel.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT, EditCatchesUIModel.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT, EditCatchesUIModel.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT, @@ -535,6 +537,10 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi } else if (EDIT_FREQUENCY_CARD.equals(card)) { tuttiUi = ui.getSpeciesTabFrequencyEditor(); + + } else if (EDIT_CARACTERISTICS_CARD.equals(card)) { + titlePanel = ui.getSpeciesIndividualObservationCaracteristicMapEditorReminderLabel(); + title = n("tutti.editCaracteristics.title"); } if (tuttiUi != null) { @@ -547,6 +553,43 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi } } +// 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 editBenthosFrequencies(int rowIndex) { JXTable benthosTable = ui.getBenthosTabContent().getTable(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java index 379437b..b2df417 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java @@ -45,6 +45,7 @@ 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.CaracteristicMapColumnRowModel; 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; @@ -368,9 +369,9 @@ public class AccidentalBatchUIHandler } @Override - public void showCaracteristicMapEditor(Species species) { + public void showCaracteristicMapEditor(CaracteristicMapColumnRowModel editRow) { EditCatchesUI parent = getParentContainer(EditCatchesUI.class); - parent.getHandler().setAccidentalSelectedCard(EditCatchesUIHandler.EDIT_CARACTERISTICS_CARD, species); + parent.getHandler().setAccidentalSelectedCard(EditCatchesUIHandler.EDIT_CARACTERISTICS_CARD, editRow.getSpecies()); } @Override 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 bb4b4b5..defb56e 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 @@ -59,6 +59,9 @@ 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.CaracteristicMapColumnRowModel; +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.computable.ComputableDataTableCell; @@ -102,6 +105,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.beans.PropertyVetoException; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -115,7 +119,8 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 0.2 */ -public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<SpeciesFrequencyRowModel, SpeciesFrequencyUIModel, SpeciesFrequencyUI> { +public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<SpeciesFrequencyRowModel, SpeciesFrequencyUIModel, SpeciesFrequencyUI> + implements CaracteristicMapColumnUIHandler { /** Logger. */ private static final Log log = LogFactory.getLog(SpeciesFrequencyUIHandler.class); @@ -218,6 +223,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci updateFrequencyRowsWeights(row.getSize(), weightToAdd); } } + + getModel().recomputeIndividualObservationRowValidState(row); } }; @@ -247,6 +254,33 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } @Override + public CaracteristicMapEditorUI getCaracteristicMapEditor() { + EditCatchesUI parent = getParentContainer(EditCatchesUI.class); + return parent.getSpeciesIndividualObservationCaracteristicMapEditor(); + } + + @Override + public void showCaracteristicMapEditor(CaracteristicMapColumnRowModel editRow) { + EditCatchesUI parent = getParentContainer(EditCatchesUI.class); + + parent.getHandler().setSpeciesSelectedCard(EditCatchesUIHandler.EDIT_CARACTERISTICS_CARD); + + //FIXME title + IndividualObservationBatchRowModel row = (IndividualObservationBatchRowModel) editRow; + WeightUnit individualObservationWeightUnit = getConfig().getIndividualObservationWeightUnit(); + String title = parent.getSpeciesTabFrequencyEditorReminderLabel().getTitle() + " - " + + row.getSize() + " - " + + individualObservationWeightUnit.renderWeight(row.getWeight()); + parent.getSpeciesIndividualObservationCaracteristicMapEditorReminderLabel().setTitle(title); + } + + @Override + public void hideCaracteristicMapEditor() { + EditCatchesUI parent = getParentContainer(EditCatchesUI.class); + parent.getHandler().setSpeciesSelectedCard(EditCatchesUIHandler.EDIT_FREQUENCY_CARD); + } + + @Override protected void onModelRowsChanged(List<SpeciesFrequencyRowModel> rows) { SpeciesFrequencyUIModel model = getModel(); @@ -391,7 +425,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } SpeciesFrequencyUIHandler.this.ui.getValidator().doValidate(); - ((IndividualObservationBatchTableModel) ui.getObsTable().getModel()).setLengthstepCaracteristic(newValue); + getObsTableModel().setLengthstepCaracteristic(newValue); }); // when lengthStepCaracteristicUnit changed, let's updates the label of some fields @@ -439,23 +473,38 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci }); model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_INDIVIDUAL_OBSERVATION_ROWS, evt -> { - IndividualObservationBatchTableModel obsTableModel = - (IndividualObservationBatchTableModel) getUI().getObsTable().getModel(); - obsTableModel.setRows((List<IndividualObservationBatchRowModel>) evt.getNewValue()); + getObsTableModel().setRows((List<IndividualObservationBatchRowModel>) evt.getNewValue()); }); - model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, evt -> { + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, evt -> { + Set<IndividualObservationBatchRowModel> obsRowsInError = + (Set<IndividualObservationBatchRowModel>) evt.getNewValue(); + + if (obsRowsInError.isEmpty()) { + + reloadRowsFromIndividualObservations(); + + } else { + + model.getRows().clear(); + model.getRowsInError().clear(); + model.reloadRows(); + } + + getTableModel().fireTableDataChanged(); + }); + + model.addVetoableChangeListener(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(); + .filter(row -> row.getLengthStep() != null + || row.getNumber() != null + || row.getWeight() != null) + .count(); if (rowsWithData > 0) { @@ -471,52 +520,30 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci JOptionPane.QUESTION_MESSAGE); if (i == JOptionPane.CANCEL_OPTION) { - return; + ui.getCopyNothingButton().setSelected(true); + throw new PropertyVetoException("The user does not want to erase his data.", evt); } } } + }); - model.getRows().clear(); - model.reloadRows(); - - if (newCopyMode != null) { - if (newCopyMode != CopyIndividualObservationMode.NOTHING) { - - Caracteristic lengthStepCaracteristic = model.getLengthStepCaracteristic(); - for (IndividualObservationBatchRowModel obsRow : model.getIndividualObservationRows()) { + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, evt -> { - 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()); - } - } - } + CopyIndividualObservationMode newCopyMode = (CopyIndividualObservationMode) evt.getNewValue(); - Collections.sort(model.getRows()); + model.getRows().clear(); + model.getRowsInError().clear(); + model.reloadRows(); - } else { - getTableModel().addNewRow(); - } + model.recomputeIndividualObservationRowsValidateState(); - model.reloadRows(); + if (newCopyMode != null && model.getIndividualObservationRowsInError().isEmpty()) { + reloadRowsFromIndividualObservations(); } getTableModel().fireTableDataChanged(); + getObsTableModel().fireTableDataChanged(); }); @@ -543,6 +570,10 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } + protected IndividualObservationBatchTableModel getObsTableModel() { + return (IndividualObservationBatchTableModel) ui.getObsTable().getModel(); + } + public void showAverageWeightsHistogram() { averageWeightsHistogramPopup.setVisible(true); } @@ -605,15 +636,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.setMaxStep(null); model.setRtp(null); - IndividualObservationBatchTableModel obsTableModel = (IndividualObservationBatchTableModel) ui.getObsTable().getModel(); - obsTableModel.setSpecies(speciesBatch.getSpecies()); - - ArrayList<IndividualObservationBatchRowModel> individualObservationRows = new ArrayList<>(); - model.setIndividualObservationRows(individualObservationRows); - IndividualObservationBatchRowModel emptyRow = obsTableModel.createNewRow(); - emptyRow.addPropertyChangeListener(obsChangedListener); - obsTableModel.addNewRow(emptyRow); - frequencyEditor = editor; Caracteristic lengthStepCaracteristic = null; @@ -779,6 +801,14 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.setLengthStepCaracteristic(lengthStepCaracteristic); model.setRows(rows); + IndividualObservationBatchTableModel obsTableModel = getObsTableModel(); + obsTableModel.setSpecies(speciesBatch.getSpecies()); + + ArrayList<IndividualObservationBatchRowModel> individualObservationRows = new ArrayList<>(); + model.setIndividualObservationRows(individualObservationRows); + obsTableModel.addNewRow(); + model.recomputeIndividualObservationRowsValidateState(); + // keep batch (will be used to push back editing entry) model.setBatch(speciesBatch); @@ -1074,11 +1104,13 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci obsTable); } + WeightUnit individualObservationWeightUnit = getConfig().getIndividualObservationWeightUnit(); + { // Weight column addFloatColumnToModel(columnModel, IndividualObservationBatchTableModel.WEIGHT, - weightUnit, + individualObservationWeightUnit, obsTable); } @@ -1152,7 +1184,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // create obsTable model IndividualObservationBatchTableModel tableModel = - new IndividualObservationBatchTableModel(weightUnit, + new IndividualObservationBatchTableModel(individualObservationWeightUnit, columnModel); obsTable.setModel(tableModel); @@ -1182,6 +1214,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci if (getModel().mustCopyIndividualObservationSize()) { updateFrequencyRowsNumbers(null, newRow.getSize()); } + + getModel().recomputeIndividualObservationRowValidState(newRow); } } }); @@ -1317,6 +1351,45 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci return row; } + protected void reloadRowsFromIndividualObservations() { + SpeciesFrequencyUIModel model = getModel(); + CopyIndividualObservationMode copyMode = model.getCopyIndividualObservationMode(); + + if (copyMode != 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 (copyMode == CopyIndividualObservationMode.ALL && obsRow.getWeight() != null) { + row.addToWeight(obsRow.getWeight()); + } + } + } + + Collections.sort(model.getRows()); + + } else if (getTableModel().getRowCount() == 0) { + getTableModel().addNewRow(); + } + + model.reloadRows(); + } + @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 6997915..e093548 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 @@ -41,6 +41,8 @@ import org.apache.commons.logging.LogFactory; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; +import java.beans.PropertyVetoException; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -108,6 +110,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_INDIVIDUAL_OBSERVATION_ROWS = "individualObservationRows"; + public static final String PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR = "individualObservationRowsInError"; + /** * Fill mode. * @@ -272,6 +276,13 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa */ protected List<IndividualObservationBatchRowModel> individualObservationRows; + /** + * Individual observations in error + * + * @since 4.5 + */ + protected Set<IndividualObservationBatchRowModel> individualObservationRowsInError; + public SpeciesFrequencyUIModel(WeightUnit weightUnit, SampleCategoryModel sampleCategoryModel, List<Caracteristic> defaultCaracteristic) { @@ -296,6 +307,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa this.defaultCaracteristic = defaultCaracteristic == null ? Lists.<Caracteristic>newArrayList() : Lists.newArrayList(defaultCaracteristic); + + setIndividualObservationRowsInError(new HashSet<>()); } public void reloadRows() { @@ -596,17 +609,28 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa } public void setCopyIndividualObservationMode(CopyIndividualObservationMode copyIndividualObservationMode) { - Object oldValue = getCopyIndividualObservationMode(); + CopyIndividualObservationMode oldValue = getCopyIndividualObservationMode(); this.copyIndividualObservationMode = copyIndividualObservationMode; - firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, oldValue, copyIndividualObservationMode); + + try { + fireVetoableChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, oldValue, copyIndividualObservationMode); + firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, oldValue, copyIndividualObservationMode); + + } catch (PropertyVetoException e) { + if (log.isErrorEnabled()) { + log.error("error in setting copyIndividualObservationMode", e); + } + this.copyIndividualObservationMode = oldValue; + } } public boolean mustCopyIndividualObservationSize() { - return isCopyIndividualObservationAll() || isCopyIndividualObservationSize(); + return getIndividualObservationRowsInError().isEmpty() + && (isCopyIndividualObservationAll() || isCopyIndividualObservationSize()); } public boolean mustCopyIndividualObservationWeight() { - return isCopyIndividualObservationAll(); + return getIndividualObservationRowsInError().isEmpty() && isCopyIndividualObservationAll(); } public boolean isCopyIndividualObservationAll() { @@ -780,22 +804,35 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa Object oldValue = getIndividualObservationRows(); this.individualObservationRows = individualObservationRows; firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS, oldValue, individualObservationRows); - } - protected final void recomputeRowValidState(SpeciesFrequencyRowModel row) { + individualObservationRowsInError.clear(); + for (IndividualObservationBatchRowModel row : individualObservationRows) { + if (!row.isValid()) { + individualObservationRowsInError.add(row); + } + } + setIndividualObservationRowsInError(individualObservationRowsInError); + } - // recompute row valid state - boolean valid = isRowValid(row); + public Set<IndividualObservationBatchRowModel> getIndividualObservationRowsInError() { + return individualObservationRowsInError; + } - // apply it to row - row.setValid(valid); + public void setIndividualObservationRowsInError(Set<IndividualObservationBatchRowModel> individualObservationRowsInError) { + this.individualObservationRowsInError = individualObservationRowsInError; + firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, null, individualObservationRowsInError); + } - if (valid) { - removeRowInError(row); - } else { - addRowInError(row); - } + public void addIndividualObservationRowInError(IndividualObservationBatchRowModel row) { + Object oldValue = new HashSet<>(individualObservationRowsInError); + individualObservationRowsInError.add(row); + firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, oldValue, individualObservationRowsInError); + } + public void removeIndividualObservationRowInError(IndividualObservationBatchRowModel row) { + Object oldValue = new HashSet<>(individualObservationRowsInError); + individualObservationRowsInError.remove(row); + firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, oldValue, individualObservationRowsInError); } public void recomputeRowsValidateState() { @@ -810,6 +847,27 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa } + public void recomputeIndividualObservationRowsValidateState() { + + if (log.isInfoEnabled()) { + log.info("Revalidate all individual observation rows"); + } + + for (IndividualObservationBatchRowModel r : individualObservationRows) { + recomputeIndividualObservationRowValidState(r); + } + + } + + public boolean isIndividualObservationRowValid(IndividualObservationBatchRowModel row) { + return copyIndividualObservationMode == CopyIndividualObservationMode.NOTHING + || copyIndividualObservationMode == CopyIndividualObservationMode.SIZE + && row.getSize() != null + || copyIndividualObservationMode == CopyIndividualObservationMode.ALL + && row.getSize() != null + && row.getWeight() != null; + } + public void setDataSetIntervalWidth(float step) { frequenciesDataset.setIntervalWidth(step); averageWeightsDataset.setIntervalWidth(step); @@ -818,4 +876,37 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public List<Caracteristic> getDefaultCaracteristic() { return defaultCaracteristic; } + + protected final void recomputeRowValidState(SpeciesFrequencyRowModel row) { + + // recompute row valid state + boolean valid = isRowValid(row); + + // apply it to row + row.setValid(valid); + + if (valid) { + removeRowInError(row); + } else { + addRowInError(row); + } + + } + + protected final void recomputeIndividualObservationRowValidState(IndividualObservationBatchRowModel row) { + + // recompute row valid state + boolean valid = isIndividualObservationRowValid(row); + + // apply it to row + row.setValid(valid); + + if (valid) { + removeIndividualObservationRowInError(row); + } else { + addIndividualObservationRowInError(row); + } + + } + } 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 61bb6fc..ac7e997 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 @@ -59,6 +59,7 @@ public class RemoveObservationAction extends SimpleActionSupport<SpeciesFrequenc if (model.mustCopyIndividualObservationSize()) { handler.updateFrequencyRowsNumbers(row.getSize(), null); } + model.removeIndividualObservationRowInError(row); }); int minSelection = obsTable.getSelectionModel().getMinSelectionIndex(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java index ff27c94..331143f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java @@ -209,7 +209,7 @@ public class CaracteristicMapCellComponent extends DefaultTableCellRenderer { // remove all default caracteristics (caracteristicsToSkip) caracteristicMapEditor.getModel().getAvailableCaracteristics().removeAll(caracteristicsToSkip); caracteristicMapEditor.getHandler().editBatch(editRow, this, caracteristicsUsed); - handler.showCaracteristicMapEditor(editRow.getSpecies()); + handler.showCaracteristicMapEditor(editRow); } public void validateEdition(CaracteristicMapEditorUIModel caracteristicMapEditorModel) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapColumnUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapColumnUIHandler.java index 87a72eb..043e79f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapColumnUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapColumnUIHandler.java @@ -22,8 +22,6 @@ package fr.ifremer.tutti.ui.swing.util.caracteristics; * #L% */ -import fr.ifremer.tutti.persistence.entities.referential.Species; - /** * @author Kevin Morin - kmorin@codelutin.com * @since 2.0 @@ -32,7 +30,7 @@ public interface CaracteristicMapColumnUIHandler { CaracteristicMapEditorUI getCaracteristicMapEditor(); - void showCaracteristicMapEditor(Species species); + void showCaracteristicMapEditor(CaracteristicMapColumnRowModel editRow); void hideCaracteristicMapEditor(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUI.jaxx index c82c7d1..b7b6115 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUI.jaxx @@ -69,7 +69,7 @@ public CaracteristicMapEditorUI(TuttiUI parentUI) { <!-- Form Actions --> <row fill='both'> <cell fill='both' columns='2'> - <JPanel layout='{new GridLayout(1, 0)}'> + <JPanel layout='{new GridLayout(1, 0)}' styleClass="buttonPanel"> <JButton id='cancelButton'/> <JButton id='saveButton'/> </JPanel> -- 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 6b129ec9e92d2d896e3c07d48b6d5b94997a9cb6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 2 11:13:02 2016 +0100 Ne pas utiliser adagio dans les ui --- .../persistence/entities/referential/Sexs.java | 21 ++++++++++++++++++ .../frequency/SpeciesFrequencyUIHandler.java | 25 ++++++++++------------ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Sexs.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Sexs.java new file mode 100644 index 0000000..6ea6420 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Sexs.java @@ -0,0 +1,21 @@ +package fr.ifremer.tutti.persistence.entities.referential; + +import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; + +/** + * Created on 02/03/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class Sexs { + + + public static boolean isMale(CaracteristicQualitativeValue caracteristicQualitativeValue) { + return QualitativeValueId.SEX_MALE.getValue().equals(caracteristicQualitativeValue.getIdAsInt()); + } + + public static boolean isFemale(CaracteristicQualitativeValue caracteristicQualitativeValue) { + return QualitativeValueId.SEX_FEMALE.getValue().equals(caracteristicQualitativeValue.getIdAsInt()); + } + +} 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 defb56e..a353385 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,7 +24,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; @@ -36,6 +35,7 @@ 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.Sexs; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TaxonCache; import fr.ifremer.tutti.persistence.entities.referential.TaxonCaches; @@ -663,19 +663,16 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci 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(); + CaracteristicQualitativeValue sampleCategoryValue = (CaracteristicQualitativeValue) speciesBatch.getSampleCategoryValue(sexCaracteristic.getIdAsInt()); + + if (sampleCategoryValue != null) { + + if (Sexs.isMale(sampleCategoryValue)) { + rtp = speciesProtocol.getRtpMale(); + } else if (Sexs.isFemale(sampleCategoryValue)) { + rtp = speciesProtocol.getRtpFemale(); + } else { + rtp = speciesProtocol.getRtpUndefined(); } } else { -- 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit fc1de3969bf4e7d3353fbd0e593cc247bc173ea3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 2 11:13:19 2016 +0100 Fix merge --- .../operation/FishingOperationsUIHandler.java | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 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 a5315f9..8a22e9b 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 @@ -159,22 +159,22 @@ public class FishingOperationsUIHandler extends AbstractTuttiTabContainerUIHandl } } - // done here instead of in the action in order to update the headers - // when the operation is saved - String fishingOperationText = getFishingOperationTitle(newValue); - - EditFishingOperationUI efoUI = getUI().getFishingOperationTabContent(); - efoUI.getTraitGeneralTabPane().setTitle(fishingOperationText); - efoUI.getVesselUseFeatureTabPane().setTitle(fishingOperationText); - efoUI.getGearUseFeatureTabPane().setTitle(fishingOperationText); - - EditCatchesUI ecUI = getUI().getCatchesTabContent(); - ecUI.getCatchesCaracteristicsTabPane().setTitle(fishingOperationText); - ecUI.getSpeciesTabFishingOperationReminderLabel().setTitle(fishingOperationText); - ecUI.getBenthosTabFishingOperationReminderLabel().setTitle(fishingOperationText); - ecUI.getMarineLitterTabFishingOperationReminderLabel().setTitle(fishingOperationText); - ecUI.getAccidentalTabFishingOperationReminderLabel().setTitle(fishingOperationText); - } + // done here instead of in the action in order to update the headers + // when the operation is saved + String fishingOperationText = getFishingOperationTitle(newValue); + + EditFishingOperationUI efoUI = getUI().getFishingOperationTabContent(); + efoUI.getTraitGeneralTabPane().setTitle(fishingOperationText); + efoUI.getVesselUseFeatureTabPane().setTitle(fishingOperationText); + efoUI.getGearUseFeatureTabPane().setTitle(fishingOperationText); + + EditCatchesUI ecUI = getUI().getCatchesTabContent(); + ecUI.getCatchesCaracteristicsTabPane().setTitle(fishingOperationText); + ecUI.getSpeciesTabFishingOperationReminderLabel().setTitle(fishingOperationText); + ecUI.getBenthosTabFishingOperationReminderLabel().setTitle(fishingOperationText); + ecUI.getMarineLitterTabFishingOperationReminderLabel().setTitle(fishingOperationText); + ecUI.getAccidentalTabFishingOperationReminderLabel().setTitle(fishingOperationText); + }); model.addPropertyChangeListener(FishingOperationsUIModel.PROPERTY_FISHING_OPERATION, evt -> { -- 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 48b04007c2984568c3ecc5108f8f958396070443 Merge: fe272b9 fc1de39 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 2 11:25:41 2016 +0100 Fixes #8019 Merge branch 'feature/ecran_obs_individuelles' into develop pom.xml | 3 +- .../java/fr/ifremer/tutti/TuttiConfiguration.java | 8 + .../fr/ifremer/tutti/TuttiConfigurationOption.java | 18 +- .../entities/protocol/TuttiProtocols.java | 4 +- .../persistence/entities/referential/Sexs.java | 21 + .../i18n/tutti-persistence_en_GB.properties | 2 + .../i18n/tutti-persistence_fr_FR.properties | 2 + tutti-ui-swing/src/license/THIRD-PARTY.properties | 2 +- .../filtered-resources/tutti-help-fr.properties | 10 +- .../swing/content/config/TuttiConfigUIHandler.java | 6 + .../operation/FishingOperationsUIHandler.java | 5 +- .../content/operation/catches/EditCatchesUI.jaxx | 34 +- .../content/operation/catches/EditCatchesUI.jcss | 12 - .../operation/catches/EditCatchesUIHandler.java | 105 +-- .../operation/catches/EditCatchesUIModel.java | 11 +- .../catches/FrequencyConfigurationMode.java | 5 +- .../accidental/AccidentalBatchUIHandler.java | 5 +- .../create/CreateBenthosBatchUIHandler.java | 2 +- .../benthos/split/SplitBenthosBatchUIHandler.java | 2 +- .../CopyIndividualObservationMode.java | 10 + .../IndividualObservationBatchTableModel.java | 70 +- .../IndividualObservationBatchUI.jaxx | 97 --- .../IndividualObservationBatchUI.jcss | 106 --- .../IndividualObservationBatchUIHandler.java | 758 ------------------ .../IndividualObservationBatchUIModel.java | 140 ---- ...ExportMultiPostIndividualObservationAction.java | 79 -- ...ImportMultiPostIndividualObservationAction.java | 81 -- ...enCreateIndividualObservationBatchUIAction.java | 57 -- .../RemoveAllIndividualObservationBatchAction.java | 156 ---- .../RemoveIndividualObservationBatchAction.java | 118 --- ...SpeciesForIndividualObservationBatchAction.java | 103 --- .../create/CreateIndividualObservationBatchUI.jaxx | 135 ---- .../create/CreateIndividualObservationBatchUI.jcss | 137 ---- .../CreateIndividualObservationBatchUIHandler.java | 412 ---------- .../CreateIndividualObservationBatchUIModel.java | 290 ------- ...teIndividualObservationBatchAndCloseAction.java | 64 -- ...ndividualObservationBatchAndContinueAction.java | 73 -- ...eateIndividualObservationBatchCancelAction.java | 59 -- .../create/CreateSpeciesBatchUIHandler.java | 2 +- .../frequency/SpeciesFrequencyLogRowModel.java | 11 + .../frequency/SpeciesFrequencyRowModel.java | 71 +- .../frequency/SpeciesFrequencyTableModel.java | 181 +++-- .../species/frequency/SpeciesFrequencyUI.jaxx | 351 +++++---- .../species/frequency/SpeciesFrequencyUI.jcss | 325 +++++--- .../frequency/SpeciesFrequencyUIHandler.java | 866 ++++++++++++++++++--- .../species/frequency/SpeciesFrequencyUIModel.java | 354 ++++++++- .../actions/ApplySpeciesFrequencyRafaleAction.java | 24 +- .../DeleteSpeciesFrequencyLogRowAction.java | 7 + .../frequency/actions/RemoveObservationAction.java | 75 ++ .../actions/ResetSpeciesFrequencyAction.java | 4 +- .../species/split/SplitSpeciesBatchUIHandler.java | 2 +- .../actions/EditFishingOperationAction.java | 3 - .../EditFishingOperationInValidationUIAction.java | 2 - .../ui/swing/util/AbstractTuttiUIHandler.java | 42 +- .../CaracteristicMapCellComponent.java | 2 +- .../CaracteristicMapColumnUIHandler.java | 4 +- .../caracteristics/CaracteristicMapEditorUI.jaxx | 2 +- .../util/table/AbstractTuttiTableUIHandler.java | 20 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 39 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 51 +- .../src/main/resources/icons/action-chart.png | Bin 0 -> 541 bytes 61 files changed, 2172 insertions(+), 3468 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm