branch feature/7930 updated (ecf3ab9 -> 4bffb23)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git omits ecf3ab9 suppression des lignes des expèces supprimés depuis les onglets especes et benthos fixes #7930 omits d088b22 - ajout des listener à l'initialisation de la liste des lignes - ajout de la modif du model quand on modifie une ligne refs #7930 omits fd7bb16 - persistence - chargement des lignes existantes - chargement de la combo des especes avec les especes du protocole (especes et benthos) refs #7930 omits 5c3b5af - modification de la prise en compte du sexe pour toutes les lignes d'une meme espece - correction du tri des espèces refs #7930 omits cda99d2 test de la nouvelle valeur de min size refs #7930 omits 5fe5dd0 - ajout des autres colonnes - modification de la taille max de la ligne précédente quand on modifie la taille min refs #7930 omits 5ecea68 ajout des libellés des menus refs #7930 omits 9e57cae - symbole infini au lieu de null - validation de la taille minquand on clique sur entrée refs #7930 omits f957206 fix build (refs #7930) omits 03da271 - ajout de la suppression d'une ligne - activation/descativation des menus - validation de ce que l'utilisateur entre comme taille minimale dans la popup refs #7930 omits 6cb5b72 - ajout des lignes mature et immatue si la case maturité est cochee - renderer des maturités - cellule de min size 0 non editable - ajout de la suppression des lignes d'une espèce refs #7930 omits 5652306 Ajout d'une propriété pour utiliser le prélèvement des pièces calcifiées, et utilisation dans l'éditeur de protocole omits f977238 Charger le modèle des strates dispnibles plus haut + ne pas reproposer à la sélection des strates et sous-strates déjà dans le protocole omits ccfa7fb Filtrer les protocoles par série de campagne omits 53176df Ajout d'une méthode de persistence pour ne récupérer que les protocoles d'une série de campagne omits 75562f8 Ajout de la propriété programId sur le modèle d'un protocole (sert à filtrer les protocole d'une série de campagne) omits e21ec1d Fin de merge depuis develop omits 6b43543 combo de selection de l'espece + ajout de lignes dans le tableau + possibilité de splitter une ligne (refs #7930) omits 36b113c creation de l'onglet d'edition de l'algo de prelevement de pieces calcifiees (refs #7930) adds 88ff745 on ne fait pas la valeur absolue de la coordonnées (fixes #7984) adds 98ff50b Fixes #7984 Merge branch 'feature/7984' into develop adds 61f7549 ajout d'un event quand une ligne est sauvée, pour mettre à jour la liste des validations quand on modifie une ligne (fixes #7972) adds 59151a3 le BatchSavedEvent étend EventObject refs #7972 adds 0a35f40 Surcharge de la méthode getSource adds 146fa6f Et les listeners doivent étendre EventListener... adds fd17dbf Fixes #7972 Merge branch 'feature/7972' into develop new 5d7769f creation de l'onglet d'edition de l'algo de prelevement de pieces calcifiees (refs #7930) new 23661cf combo de selection de l'espece + ajout de lignes dans le tableau + possibilité de splitter une ligne (refs #7930) new fe785f8 Fin de merge depuis develop new b6d0e4c Ajout de la propriété programId sur le modèle d'un protocole (sert à filtrer les protocole d'une série de campagne) new c153564 Ajout d'une méthode de persistence pour ne récupérer que les protocoles d'une série de campagne new 384ff90 Filtrer les protocoles par série de campagne new 6d43c7a Charger le modèle des strates dispnibles plus haut + ne pas reproposer à la sélection des strates et sous-strates déjà dans le protocole new 4f565d3 Ajout d'une propriété pour utiliser le prélèvement des pièces calcifiées, et utilisation dans l'éditeur de protocole new a82e69b - ajout des lignes mature et immatue si la case maturité est cochee - renderer des maturités - cellule de min size 0 non editable - ajout de la suppression des lignes d'une espèce refs #7930 new ad17e2a - ajout de la suppression d'une ligne - activation/descativation des menus - validation de ce que l'utilisateur entre comme taille minimale dans la popup refs #7930 new 403709b fix build (refs #7930) new e63dfae - symbole infini au lieu de null - validation de la taille minquand on clique sur entrée refs #7930 new d81f2e5 ajout des libellés des menus refs #7930 new 57296e7 - ajout des autres colonnes - modification de la taille max de la ligne précédente quand on modifie la taille min refs #7930 new fb4a47a test de la nouvelle valeur de min size refs #7930 new 3aaa5b7 - modification de la prise en compte du sexe pour toutes les lignes d'une meme espece - correction du tri des espèces refs #7930 new c9daf39 - persistence - chargement des lignes existantes - chargement de la combo des especes avec les especes du protocole (especes et benthos) refs #7930 new 273bcf8 - ajout des listener à l'initialisation de la liste des lignes - ajout de la modif du model quand on modifie une ligne refs #7930 new 4bffb23 suppression des lignes des expèces supprimés depuis les onglets especes et benthos fixes #7930 This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (ecf3ab9) \ N -- N -- N refs/heads/feature/7930 (4bffb23) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 19 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 4bffb235dae5902cffd7bf4df9a589fae6c88bcd Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 15 15:21:52 2016 +0100 suppression des lignes des expèces supprimés depuis les onglets especes et benthos fixes #7930 commit 273bcf877f1f975ab258651e066286bac695b557 Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 15 12:17:19 2016 +0100 - ajout des listener à l'initialisation de la liste des lignes - ajout de la modif du model quand on modifie une ligne refs #7930 commit c9daf3947a656e7d92034640571439b81c77d26c Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 21:19:22 2016 +0100 - persistence - chargement des lignes existantes - chargement de la combo des especes avec les especes du protocole (especes et benthos) refs #7930 commit 3aaa5b75d7ed0c26d7f2ce8728a3161231504c26 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 17:12:46 2016 +0100 - modification de la prise en compte du sexe pour toutes les lignes d'une meme espece - correction du tri des espèces refs #7930 commit fb4a47a01596573b8c1753a4d687b411b116542c Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 13:48:12 2016 +0100 test de la nouvelle valeur de min size refs #7930 commit 57296e7ac5c78545905429f17fbf9cb959c3add3 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 12:06:16 2016 +0100 - ajout des autres colonnes - modification de la taille max de la ligne précédente quand on modifie la taille min refs #7930 commit d81f2e5c117cd83da99453e21f58ad26f16ce2df Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 11:27:07 2016 +0100 ajout des libellés des menus refs #7930 commit e63dfae0f7256397a9b7d4c86c0471c602406f22 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 11:09:25 2016 +0100 - symbole infini au lieu de null - validation de la taille minquand on clique sur entrée refs #7930 commit 403709b1a67ab625e2247e52b69b4c733ca2978b Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 09:41:23 2016 +0100 fix build (refs #7930) commit ad17e2a9a3564e3b74b88aa12b2c0ebec3bff1f3 Author: Kevin Morin <morin@codelutin.com> Date: Wed Feb 10 18:28:44 2016 +0100 - ajout de la suppression d'une ligne - activation/descativation des menus - validation de ce que l'utilisateur entre comme taille minimale dans la popup refs #7930 commit a82e69b1b10d98f1d1ce0c9a783b6c66b1f12e95 Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 9 18:16:23 2016 +0100 - ajout des lignes mature et immatue si la case maturité est cochee - renderer des maturités - cellule de min size 0 non editable - ajout de la suppression des lignes d'une espèce refs #7930 commit 4f565d369c3a7598266932e19a8113ab7e4a1e74 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 9 00:06:22 2016 +0100 Ajout d'une propriété pour utiliser le prélèvement des pièces calcifiées, et utilisation dans l'éditeur de protocole commit 6d43c7ae995c1c81bdd85882038f12190e9bd97c Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 8 23:25:45 2016 +0100 Charger le modèle des strates dispnibles plus haut + ne pas reproposer à la sélection des strates et sous-strates déjà dans le protocole commit 384ff900bb7683a7dd06300782638930f748cd3d Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 8 23:24:19 2016 +0100 Filtrer les protocoles par série de campagne commit c15356474df5681aaac2be2c44dab3e8a45e570a Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 8 23:23:44 2016 +0100 Ajout d'une méthode de persistence pour ne récupérer que les protocoles d'une série de campagne commit b6d0e4cabaf4c0795be18c296ecf4e5f70178b4b Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 8 17:18:45 2016 +0100 Ajout de la propriété programId sur le modèle d'un protocole (sert à filtrer les protocole d'une série de campagne) commit fe785f85ce9a3fbab41e5c27d0282f0cd23d8fb4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 8 16:13:23 2016 +0100 Fin de merge depuis develop commit 23661cf5697022f4d005e6a27d01f62a2de75c71 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 5 14:09:11 2016 +0100 combo de selection de l'espece + ajout de lignes dans le tableau + possibilité de splitter une ligne (refs #7930) commit 5d7769fa11144a2c3ff863fed92c4b7faff90ea5 Author: Kevin Morin <morin@codelutin.com> Date: Wed Feb 3 18:05:33 2016 +0100 creation de l'onglet d'edition de l'algo de prelevement de pieces calcifiees (refs #7930) Summary of changes: .../main/java/fr/ifremer/tutti/util/Numbers.java | 5 ++- .../catches/AbstractTuttiBatchTableUIHandler.java | 25 ++++++++++- .../content/operation/catches/BatchSavedEvent.java | 28 ++++++++++++ .../operation/catches/BatchSavedListener.java | 12 +++++ .../accidental/AccidentalBatchUIHandler.java | 1 + .../catches/benthos/BenthosBatchUIHandler.java | 2 + .../IndividualObservationBatchUIHandler.java | 1 + .../marinelitter/MarineLitterBatchUIHandler.java | 2 + .../catches/species/SpeciesBatchUIHandler.java | 2 + .../EditFishingOperationInValidationUIAction.java | 51 ++++++++++++++++++++-- 10 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedEvent.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/BatchSavedListener.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit 5d7769fa11144a2c3ff863fed92c4b7faff90ea5 Author: Kevin Morin <morin@codelutin.com> Date: Wed Feb 3 18:05:33 2016 +0100 creation de l'onglet d'edition de l'algo de prelevement de pieces calcifiees (refs #7930) --- .../ui/swing/content/protocol/EditProtocolUI.jaxx | 5 +- .../CalcifiedPiecesSamplingEditorRowModel.java | 54 +++++++++++++++++++++ .../CalcifiedPiecesSamplingEditorTableModel.java | 38 +++++++++++++++ .../CalcifiedPiecesSamplingEditorUI.jaxx | 56 ++++++++++++++++++++++ .../CalcifiedPiecesSamplingEditorUI.jcss | 4 ++ .../CalcifiedPiecesSamplingEditorUIHandler.java | 37 ++++++++++++++ .../actions/AddSpeciesAction.java | 20 ++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 7 +++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 7 +++ 9 files changed, 224 insertions(+), 4 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx index a8687d4..2a508b7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx @@ -29,6 +29,7 @@ fr.ifremer.tutti.ui.swing.TuttiHelpBroker fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpEditorUI fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneEditorUI + fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil @@ -238,10 +239,6 @@ </Table> </JPanel> </tab> - <tab title='tutti.editProtocol.tab.zone'> - <ZoneEditorUI id="zoneEditor" - constructorParams='this'/> - </tab> </JTabbedPane> <JPanel id='saveWarningContainer' layout='{new BorderLayout(10, 10)}' diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java new file mode 100644 index 0000000..3edea71 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java @@ -0,0 +1,54 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; + +import fr.ifremer.tutti.persistence.entities.referential.Species; +import org.jdesktop.beans.AbstractSerializableBean; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class CalcifiedPiecesSamplingEditorRowModel extends AbstractSerializableBean { + + + public static final String PROPERTY_SPECIES = "species"; + + public static final String PROPERTY_MIN_SIZE = "minSize"; + + public static final String PROPERTY_MAX_SIZE = "maxSize"; + + protected Species species; + + protected int minSize; + + protected int maxSize; + + public int getMaxSize() { + return maxSize; + } + + public void setMaxSize(int maxSize) { + Object oldValue = getMaxSize(); + this.maxSize = maxSize; + firePropertyChange(PROPERTY_MAX_SIZE, oldValue, maxSize); + } + + public int getMinSize() { + return minSize; + } + + public void setMinSize(int minSize) { + Object oldValue = getMinSize(); + this.minSize = minSize; + firePropertyChange(PROPERTY_MIN_SIZE, oldValue, minSize); + } + + public Species getSpecies() { + return species; + } + + public void setSpecies(Species species) { + Object oldValue = getSpecies(); + this.species = species; + firePropertyChange(PROPERTY_SPECIES, oldValue, species); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java new file mode 100644 index 0000000..a9fb747 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java @@ -0,0 +1,38 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; + +import org.jdesktop.swingx.table.TableColumnModelExt; +import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; +import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; + +import static org.nuiton.i18n.I18n.n; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplicationTableModel<CalcifiedPiecesSamplingEditorRowModel> { + + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> SPECIES = ColumnIdentifier.newId( + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_SPECIES, + n("tutti.editCps.table.header.species.field"), + n("tutti.editCps.table.header.species.field.tip")); + + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> MIN_SIZE = ColumnIdentifier.newId( + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, + n("tutti.editCps.table.header.minSize.field"), + n("tutti.editCps.table.header.minSize.field.tip")); + + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> MAX_SIZE = ColumnIdentifier.newId( + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MAX_SIZE, + n("tutti.editCps.table.header.maxSize.field"), + n("tutti.editCps.table.header.maxSize.field.tip")); + + public CalcifiedPiecesSamplingEditorTableModel(TableColumnModelExt columnModel) { + super(columnModel, false, false); + } + + @Override + public CalcifiedPiecesSamplingEditorRowModel createNewRow() { + return new CalcifiedPiecesSamplingEditorRowModel(); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx new file mode 100644 index 0000000..7e9bba5 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx @@ -0,0 +1,56 @@ +<JPanel id='cpsPanel' layout="{new BorderLayout()}" + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditProtocolUIModel, CalcifiedPiecesSamplingEditorUIHandler>'> + + <import> + fr.ifremer.tutti.persistence.entities.referential.Species + + fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel + fr.ifremer.tutti.ui.swing.util.TuttiUI + fr.ifremer.tutti.ui.swing.util.TuttiUIUtil + + jaxx.runtime.swing.editor.bean.BeanFilterableComboBox + + org.jdesktop.swingx.JXTable + + + </import> + + <script><![CDATA[ + + public CalcifiedPiecesSamplingEditorUI(TuttiUI parentUI) { + TuttiUIUtil.setParentUI(this, parentUI); + } + ]]> + </script> + + <EditProtocolUIModel id='model' + initializer='getContextValue(EditProtocolUIModel.class)'/> + + <JPopupMenu id='cpsTablePopup'> + <JMenuItem id='splitCpsRowMenu'/> + </JPopupMenu> + + <Table fill='both' constraints='BorderLayout.CENTER'> + + <row fill='both'> + <cell fill='both' weightx='1'> + <BeanFilterableComboBox id='speciesComboBox' + constructorParams='this' + genericType='Species'/> + </cell> + <cell fill='both'> + <JButton id='addSpeciesButton'/> + </cell> + </row> + <row fill='both' weighty='1'> + <cell fill='both' columns='3'> + <JScrollPane> + <JXTable id='cpsTable' + onMouseClicked='handler.autoSelectRowInTable(event, cpsTablePopup)' + onKeyPressed='handler.openRowMenu(event, cpsTablePopup)'/> + </JScrollPane> + </cell> + </row> + </Table> + +</JPanel> \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss new file mode 100644 index 0000000..cafa9da --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss @@ -0,0 +1,4 @@ +#addSpeciesButton { + actionIcon: add; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.AddSpeciesAction.class}; +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java new file mode 100644 index 0000000..d413d3b --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -0,0 +1,37 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; + +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import jaxx.runtime.validator.swing.SwingValidator; + +import javax.swing.JComponent; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIModel, CalcifiedPiecesSamplingEditorUI> { + + + @Override + public void afterInit(CalcifiedPiecesSamplingEditorUI calcifiedPiecesSamplingEditorUI) { + initUI(calcifiedPiecesSamplingEditorUI); + + + } + + @Override + protected JComponent getComponentToFocus() { + return null; + } + + @Override + public void onCloseUI() { + + } + + @Override + public SwingValidator<EditProtocolUIModel> getValidator() { + return null; + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java new file mode 100644 index 0000000..a0c660b --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java @@ -0,0 +1,20 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; + +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplingEditorUI> { + + public AddSpeciesAction(CalcifiedPiecesSamplingEditorUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(CalcifiedPiecesSamplingEditorUI ui) { + + } +} 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 56bde07..41a1939 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 @@ -721,6 +721,12 @@ tutti.editCatchBatch.legend.marineLitter= tutti.editCatchBatch.legend.species= tutti.editCatchBatch.legend.total= tutti.editCatchBatch.svgLoading.error= +tutti.editCps.table.header.maxSize.field= +tutti.editCps.table.header.maxSize.field.tip= +tutti.editCps.table.header.minSize.field= +tutti.editCps.table.header.minSize.field.tip= +tutti.editCps.table.header.species.field= +tutti.editCps.table.header.species.field.tip= tutti.editCruise.action.closeEditCruise= tutti.editCruise.action.closeEditCruise.mnemonic= tutti.editCruise.action.closeEditCruise.tip= @@ -1096,6 +1102,7 @@ tutti.editProtocol.tab.caracteristic.individualObservation= tutti.editProtocol.tab.caracteristic.lengthClasses= tutti.editProtocol.tab.caracteristic.mapping= tutti.editProtocol.tab.caracteristic.vesselUseFeature= +tutti.editProtocol.tab.cps= tutti.editProtocol.tab.info= tutti.editProtocol.tab.species= tutti.editProtocol.tab.zone= 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 dd9b112..a96e1d3 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 @@ -683,6 +683,12 @@ tutti.editCatchBatch.legend.marineLitter=Macro déchets tutti.editCatchBatch.legend.species=Espèces tutti.editCatchBatch.legend.total=Capture tutti.editCatchBatch.svgLoading.error=Erreur lors du chargement du diagramme du résumé +tutti.editCps.table.header.maxSize.field= +tutti.editCps.table.header.maxSize.field.tip= +tutti.editCps.table.header.minSize.field= +tutti.editCps.table.header.minSize.field.tip= +tutti.editCps.table.header.species.field= +tutti.editCps.table.header.species.field.tip= tutti.editCruise.action.closeEditCruise=Fermer tutti.editCruise.action.closeEditCruise.mnemonic=F tutti.editCruise.action.closeEditCruise.tip=Fermer l'écran d'édition de campagne @@ -1047,6 +1053,7 @@ tutti.editProtocol.tab.caracteristic=Caractéristiques tutti.editProtocol.tab.caracteristic.individualObservation=Observations individuelles tutti.editProtocol.tab.caracteristic.lengthClasses=Classes de taille tutti.editProtocol.tab.caracteristic.mapping=Caractéristiques du trait +tutti.editProtocol.tab.cps= tutti.editProtocol.tab.info=Informations générales tutti.editProtocol.tab.species=Espèces tutti.editProtocol.tab.zone=Zones -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit 23661cf5697022f4d005e6a27d01f62a2de75c71 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 5 14:09:11 2016 +0100 combo de selection de l'espece + ajout de lignes dans le tableau + possibilité de splitter une ligne (refs #7930) --- pom.xml | 4 +- .../fr/ifremer/tutti/service/DecoratorService.java | 39 +++++++ .../resources/i18n/tutti-service_en_GB.properties | 4 + .../resources/i18n/tutti-service_fr_FR.properties | 4 + .../content/protocol/EditProtocolUIModel.java | 15 +++ .../CalcifiedPiecesSamplingEditorRowModel.java | 20 +++- .../CalcifiedPiecesSamplingEditorTableModel.java | 25 +++++ .../CalcifiedPiecesSamplingEditorUI.jaxx | 7 +- .../CalcifiedPiecesSamplingEditorUI.jcss | 20 ++++ .../CalcifiedPiecesSamplingEditorUIHandler.java | 113 +++++++++++++++++++++ .../actions/AddSpeciesAction.java | 25 +++++ .../actions/SplitSpeciesAction.java | 60 +++++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 4 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 + 14 files changed, 337 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 5a85e14..389d671 100644 --- a/pom.xml +++ b/pom.xml @@ -121,6 +121,8 @@ <projectId>tutti</projectId> + <javaVersion>1.8</javaVersion> + <!-- libraries version --> <nuitonI18nVersion>3.3</nuitonI18nVersion> <nuitonValidatorVersion>3.0</nuitonValidatorVersion> @@ -158,8 +160,6 @@ <!-- Where are deployed software components --> <distroUrl>https://nexus.nuiton.org/nexus/content/repositories/other-releases</distroUrl> - <javaVersion>1.8</javaVersion> - </properties> <repositories> diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java index 77c3f6a..e7aaf49 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java @@ -80,6 +80,10 @@ public class DecoratorService extends AbstractTuttiService { public static final String SEPARATOR = "#"; + public static final String MATURITY = "maturity"; + + public static final String SHORT_MATURITY = "shortMaturity"; + public static final Comparator<FishingOperation> FISHING_OPERATION_COMPARATOR_BY_GEAR_SHOOTING_START_DATE = new Comparator<FishingOperation>() { @Override public int compare(FishingOperation o1, FishingOperation o2) { @@ -87,6 +91,7 @@ public class DecoratorService extends AbstractTuttiService { } }; + /** Delegate decorator provider. */ protected DecoratorProvider decoratorProvider; @@ -156,6 +161,8 @@ public class DecoratorService extends AbstractTuttiService { } }); registerDecorator(SPACE_EVERY_3_DIGIT, new SpaceEvery3DigitDecorator()); + registerDecorator(MATURITY, new MaturityDecorator(false)); + registerDecorator(SHORT_MATURITY, new MaturityDecorator(true)); registerDecorator(new VesselDecorator()); registerDecorator(new ProgramDecorator()); registerTuttiDecorator(Program.class, ONLY_NAME, "${name}$s", SEPARATOR, " - "); @@ -426,4 +433,36 @@ public class DecoratorService extends AbstractTuttiService { } } } + + public static class MaturityDecorator extends Decorator<Boolean> { + + protected boolean shortRendering; + + protected MaturityDecorator(boolean shortRendering) { + super(Boolean.class); + this.shortRendering = shortRendering; + } + + @Override + public String toString(Object bean) { + String result; + + if (bean == null) { + result = ""; + + } else { + + Boolean maturity = (Boolean) bean; + + if (shortRendering) { + result = maturity ? t("tutti.maturity.mature.short") : t("tutti.maturity.immature.short"); + + } else { + result = maturity ? t("tutti.maturity.mature") : t("tutti.maturity.immature"); + } + } + + return result; + } + } } diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index 2b30977..fa432d4 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -13,6 +13,10 @@ tutti.error.messages= tutti.error.species.not.in.protocol= tutti.fatal.messages= tutti.io.mkDir.error= +tutti.maturity.immature= +tutti.maturity.immature.short= +tutti.maturity.mature= +tutti.maturity.mature.short= tutti.pdf.export.missing.species.code= tutti.property.attachment= tutti.property.caracteristic= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 76332e6..2b2727f 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -8,6 +8,10 @@ tutti.csv.import.error.on.row=Des erreurs ont été détectées à la ligne %s \ tutti.error.messages=Erreurs \:\n %s tutti.fatal.messages=Erreurs critiques \:\n %s tutti.io.mkDir.error=Erreur à la création du dossier %s +tutti.maturity.immature=Immature +tutti.maturity.immature.short=I +tutti.maturity.mature=Mature +tutti.maturity.mature.short=M tutti.pdf.export.missing.species.code=Une espèce (referenceId %s, nom scientifique %s) n'a ni code campagne, ni code refTax. tutti.property.attachment=Pièce jointe tutti.property.caracteristic=Caractéristique diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index fea45e0..7842cca 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -40,6 +40,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.SubStrataUIModel; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.ZoneUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import org.apache.commons.lang3.mutable.MutableInt; import org.apache.commons.logging.Log; @@ -92,6 +93,8 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, public static final String PROPERTY_AVAILABLE_STRATAS = "availableStratas"; + public static final String PROPERTY_CSP_ROWS = "cspRows"; + /** * Delegate edit object. * @@ -169,6 +172,8 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, protected List<EditProtocolSpeciesRowModel> benthosRow; + protected List<CalcifiedPiecesSamplingEditorRowModel> cspRows; + protected final Collection<StrataUIModel> availableStratas = new HashSet<>(); protected static Binder<EditProtocolUIModel, TuttiProtocol> toBeanBinder = @@ -296,6 +301,16 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, firePropertyChange(PROPERTY_BENTHOS_ROW, oldValue, benthosRow); } + public List<CalcifiedPiecesSamplingEditorRowModel> getCspRows() { + return cspRows; + } + + public void setCspRows(List<CalcifiedPiecesSamplingEditorRowModel> cspRows) { + Object oldValue = getCspRows(); + this.cspRows = cspRows; + firePropertyChange(PROPERTY_CSP_ROWS, oldValue, cspRows); + } + public boolean isRemoveSpeciesEnabled() { return removeSpeciesEnabled; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java index 3edea71..a808c7f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java @@ -16,17 +16,21 @@ public class CalcifiedPiecesSamplingEditorRowModel extends AbstractSerializableB public static final String PROPERTY_MAX_SIZE = "maxSize"; + public static final String PROPERTY_MATURITY = "maturity"; + protected Species species; protected int minSize; - protected int maxSize; + protected Integer maxSize; + + protected Boolean maturity; - public int getMaxSize() { + public Integer getMaxSize() { return maxSize; } - public void setMaxSize(int maxSize) { + public void setMaxSize(Integer maxSize) { Object oldValue = getMaxSize(); this.maxSize = maxSize; firePropertyChange(PROPERTY_MAX_SIZE, oldValue, maxSize); @@ -51,4 +55,14 @@ public class CalcifiedPiecesSamplingEditorRowModel extends AbstractSerializableB this.species = species; firePropertyChange(PROPERTY_SPECIES, oldValue, species); } + + public Boolean getMaturity() { + return maturity; + } + + public void setMaturity(Boolean maturity) { + Object oldValue = getMaturity(); + this.maturity = maturity; + firePropertyChange(PROPERTY_MATURITY, oldValue, maturity); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java index a9fb747..25c8064 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java @@ -1,9 +1,13 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.referential.Species; import org.jdesktop.swingx.table.TableColumnModelExt; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; +import java.util.List; + import static org.nuiton.i18n.I18n.n; /** @@ -27,12 +31,33 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication n("tutti.editCps.table.header.maxSize.field"), n("tutti.editCps.table.header.maxSize.field.tip")); + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> MATURITY = ColumnIdentifier.newId( + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MATURITY, + n("tutti.editCps.table.header.maturity.field"), + n("tutti.editCps.table.header.maturity.field.tip")); + public CalcifiedPiecesSamplingEditorTableModel(TableColumnModelExt columnModel) { super(columnModel, false, false); + setNoneEditableCols(SPECIES, MAX_SIZE, MATURITY); } @Override public CalcifiedPiecesSamplingEditorRowModel createNewRow() { return new CalcifiedPiecesSamplingEditorRowModel(); } + + /** + * Return the list of used species in the table (used to fill the + * comparator cache for species sort) + * + * @return the list of used species in the table. + * @since 2.8 + */ + public List<Species> getSpeciesList() { + List<Species> result = Lists.newArrayList(); + for (CalcifiedPiecesSamplingEditorRowModel row : rows) { + result.add(row.getSpecies()); + } + return result; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx index 7e9bba5..7cffb53 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx @@ -2,8 +2,9 @@ implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditProtocolUIModel, CalcifiedPiecesSamplingEditorUIHandler>'> <import> - fr.ifremer.tutti.persistence.entities.referential.Species + fr.ifremer.tutti.persistence.entities.referential.Species + fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil @@ -12,7 +13,6 @@ org.jdesktop.swingx.JXTable - </import> <script><![CDATA[ @@ -39,6 +39,9 @@ genericType='Species'/> </cell> <cell fill='both'> + <JComboBox id='maturityComboBox'/> + </cell> + <cell fill='both'> <JButton id='addSpeciesButton'/> </cell> </row> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss index cafa9da..d3207f3 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss @@ -1,4 +1,24 @@ +BeanFilterableComboBox { + showReset: true; +} + +#speciesComboBox { + enabled: {!speciesComboBox.isEmpty()}; + toolTipText: "tutti.editCps.field.species.tip"; + _help: {"tutti.editCps.field.species.help"}; +} + +#maturityComboBox { + toolTipText: "tutti.editCps.field.maturity.tip"; + _help: {"tutti.editCps.field.maturity.help"}; +} + #addSpeciesButton { actionIcon: add; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.AddSpeciesAction.class}; +} + +#splitCpsRowMenu { + actionIcon: add; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.SplitSpeciesAction.class}; } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index d413d3b..dd67edf 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -1,10 +1,27 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.TuttiDecorator; +import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; +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.jdesktop.swingx.table.TableColumnExt; import javax.swing.JComponent; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.JTableHeader; +import java.util.ArrayList; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; /** * @author Kevin Morin (Code Lutin) @@ -12,12 +29,108 @@ import javax.swing.JComponent; */ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIModel, CalcifiedPiecesSamplingEditorUI> { + /** Logger. */ + private static final Log log = LogFactory.getLog(CalcifiedPiecesSamplingEditorUIHandler.class); @Override public void afterInit(CalcifiedPiecesSamplingEditorUI calcifiedPiecesSamplingEditorUI) { initUI(calcifiedPiecesSamplingEditorUI); + initBeanFilterableComboBox(ui.getSpeciesComboBox(), getModel().getAllSpecies(), null); + + JXTable cpsTable = ui.getCpsTable(); + + DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); + + TableColumnExt speciesColumn = addColumnToModel(columnModel, + null, + newTableCellRender(Species.class), + CalcifiedPiecesSamplingEditorTableModel.SPECIES); + speciesColumn.setSortable(true); + DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator(); + speciesColumn.putClientProperty(SpeciesAbleBatchRowHelper.SPECIES_DECORATOR, speciesDecorator); + speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator)); + + addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MATURITY); + addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MIN_SIZE); + addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE); + + final CalcifiedPiecesSamplingEditorTableModel tableModel = + new CalcifiedPiecesSamplingEditorTableModel(columnModel); + cpsTable.setModel(tableModel); + cpsTable.setColumnModel(columnModel); + + JTableHeader tableHeader = cpsTable.getTableHeader(); + + // by default do not authorize to change column orders + tableHeader.setReorderingAllowed(false); + +// addHighlighters(cpsTable); + + // always scroll to selected row + SwingUtil.scrollToTableSelection(cpsTable); + + // add selection listener +// cpsTable.getSelectionModel().addListSelectionListener(selectionListener); + + // when model change, then rebuild the species comparator + set model as modified + tableModel.addTableModelListener(new TableModelListener() { + + @Override + public void tableChanged(TableModelEvent e) { + getModel().setModify(true); + + int type = e.getType(); + if (type == TableModelEvent.DELETE || + type == TableModelEvent.INSERT || + e.getLastRow() == Integer.MAX_VALUE) { + + // get species column + TableColumnExt tableColumn = + (TableColumnExt) cpsTable.getColumns().get(0); + + // get column comparator + TuttiDecorator.TuttiDecoratorComparator<Species> comparator = + (TuttiDecorator.TuttiDecoratorComparator<Species>) + tableColumn.getComparator(); + + // get column comparator + TuttiDecorator<Species> decorator = + SpeciesAbleBatchRowHelper.getSpeciesColumnDecorator(tableColumn); + + boolean comparatorNull = comparator == null; + if (comparatorNull) { + + // first time coming here, add the comparator + comparator = decorator.getCurrentComparator(); + } + + // init comparator with model species list + comparator.init(decorator, tableModel.getSpeciesList()); + + if (comparatorNull) { + + // affect it to colum + tableColumn.setComparator(comparator); + } + } + } + }); + + // create popup to change species decorator + + SpeciesAbleBatchRowHelper.installSpeciesColumnComparatorPopup( + cpsTable, + speciesColumn, + null, + t("tutti.species.refTaxCode.tip"), + t("tutti.species.name.tip") + ); + // at the very end, set rows to model + List<CalcifiedPiecesSamplingEditorRowModel> rows = new ArrayList<>(); + getModel().setCspRows(rows); + tableModel.setRows(rows); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java index a0c660b..0413981 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java @@ -1,7 +1,12 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; /** * @author Kevin Morin (Code Lutin) @@ -15,6 +20,26 @@ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplin @Override protected void onActionPerformed(CalcifiedPiecesSamplingEditorUI ui) { + BeanFilterableComboBox<Species> speciesComboBox = ui.getSpeciesComboBox(); + Species species = (Species) speciesComboBox.getSelectedItem(); + CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) ui.getCpsTable().getModel(); + + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(); + newRow.setSpecies(species); + newRow.setMaturity(null); + newRow.setMinSize(0); + newRow.setMaxSize(null); + + ui.getModel().getCspRows().add(newRow); + + speciesComboBox.removeItem(species); + + tableModel.fireTableRowsInserted(newRow); + + // select this new row + int rowIndex = tableModel.getRowIndex(newRow); + SwingUtil.setSelectionInterval(ui.getCpsTable(), rowIndex); } + } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java new file mode 100644 index 0000000..2407855 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java @@ -0,0 +1,60 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; + +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXTable; + +import javax.swing.JOptionPane; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplingEditorUI> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(SplitSpeciesAction.class); + + public SplitSpeciesAction(CalcifiedPiecesSamplingEditorUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(CalcifiedPiecesSamplingEditorUI ui) { + + String value = JOptionPane.showInputDialog(ui, "min size"); + int minSize = Integer.parseInt(value); + + JXTable cpsTable = ui.getCpsTable(); + CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); + + int selectedRow = cpsTable.getSelectedRow(); + if (log.isInfoEnabled()) { + log.info("selected row " + selectedRow); + } + + CalcifiedPiecesSamplingEditorRowModel row = ui.getModel().getCspRows().get(selectedRow); + Integer exMaxSize = row.getMaxSize(); + row.setMaxSize(minSize - 1); + + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(); + newRow.setSpecies(row.getSpecies()); + newRow.setMaturity(row.getMaturity()); + newRow.setMinSize(minSize); + newRow.setMaxSize(exMaxSize); + + ui.getModel().getCspRows().add(newRow); + + tableModel.fireTableRowsUpdated(selectedRow, selectedRow); + tableModel.fireTableRowsInserted(newRow); + + // select this new row +// int rowIndex = tableModel.getRowIndex(newRow); +// SwingUtil.setSelectionInterval(cpsTable, rowIndex); + } + +} 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 41a1939..ec22d52 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 @@ -721,6 +721,10 @@ tutti.editCatchBatch.legend.marineLitter= tutti.editCatchBatch.legend.species= tutti.editCatchBatch.legend.total= tutti.editCatchBatch.svgLoading.error= +tutti.editCps.field.maturity.tip= +tutti.editCps.field.species.tip= +tutti.editCps.table.header.maturity.field= +tutti.editCps.table.header.maturity.field.tip= tutti.editCps.table.header.maxSize.field= tutti.editCps.table.header.maxSize.field.tip= tutti.editCps.table.header.minSize.field= 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 a96e1d3..8b5fc63 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 @@ -683,6 +683,10 @@ tutti.editCatchBatch.legend.marineLitter=Macro déchets tutti.editCatchBatch.legend.species=Espèces tutti.editCatchBatch.legend.total=Capture tutti.editCatchBatch.svgLoading.error=Erreur lors du chargement du diagramme du résumé +tutti.editCps.field.maturity.tip= +tutti.editCps.field.species.tip= +tutti.editCps.table.header.maturity.field= +tutti.editCps.table.header.maturity.field.tip= tutti.editCps.table.header.maxSize.field= tutti.editCps.table.header.maxSize.field.tip= tutti.editCps.table.header.minSize.field= -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit fe785f85ce9a3fbab41e5c27d0282f0cd23d8fb4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 8 16:13:23 2016 +0100 Fin de merge depuis develop --- .../fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx index 2a508b7..33d7ad5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx @@ -239,6 +239,10 @@ </Table> </JPanel> </tab> + <tab title='tutti.editProtocol.tab.zone'> + <ZoneEditorUI id="zoneEditor" + constructorParams='this'/> + </tab> </JTabbedPane> <JPanel id='saveWarningContainer' layout='{new BorderLayout(10, 10)}' -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit b6d0e4cabaf4c0795be18c296ecf4e5f70178b4b Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 8 17:18:45 2016 +0100 Ajout de la propriété programId sur le modèle d'un protocole (sert à filtrer les protocole d'une série de campagne) --- .../src/main/xmi/tutti-persistence.zargo | Bin 60851 -> 60983 bytes .../swing/content/protocol/EditProtocolUIModel.java | 12 ++++++++++++ 2 files changed, 12 insertions(+) diff --git a/tutti-persistence/src/main/xmi/tutti-persistence.zargo b/tutti-persistence/src/main/xmi/tutti-persistence.zargo index f298eca..25ca92e 100644 Binary files a/tutti-persistence/src/main/xmi/tutti-persistence.zargo and b/tutti-persistence/src/main/xmi/tutti-persistence.zargo differ diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index 7842cca..a4acbed 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -474,6 +474,18 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, } @Override + public String getProgramId() { + return editObject.getProgramId(); + } + + @Override + public void setProgramId(String programId) { + Object oldValue = getProgramId(); + editObject.setComment(programId); + firePropertyChange(PROPERTY_PROGRAM_ID, oldValue, programId); + } + + @Override public List<String> getLengthClassesPmfmId() { return editObject.getLengthClassesPmfmId(); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit c15356474df5681aaac2be2c44dab3e8a45e570a Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 8 23:23:44 2016 +0100 Ajout d'une méthode de persistence pour ne récupérer que les protocoles d'une série de campagne --- .../tutti/persistence/TuttiPersistenceImpl.java | 5 +++++ .../tutti/persistence/TuttiPersistenceNoDbImpl.java | 5 +++++ .../persistence/entities/protocol/TuttiProtocols.java | 5 +++++ .../service/ProtocolPersistenceService.java | 7 +++++++ .../service/ProtocolPersistenceServiceImpl.java | 19 +++++++++++++++++++ .../fr/ifremer/tutti/service/PersistenceService.java | 5 +++++ 6 files changed, 46 insertions(+) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java index a072045..c407372 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java @@ -1022,6 +1022,11 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public List<TuttiProtocol> getAllProtocol(String programId) { + return getProtocolService().getAllProtocol(programId); + } + + @Override public List<String> getAllProtocolId() { return getProtocolService().getAllProtocolId(); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java index e3de04e..623ac90 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java @@ -569,6 +569,11 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override + public List<TuttiProtocol> getAllProtocol(String programId) { + throw notImplemented(); + } + + @Override public boolean isProtocolExist(String id) { throw notImplemented(); } 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 ed13f53..48193dd 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 @@ -64,6 +64,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.TreeMap; @@ -661,4 +662,8 @@ public class TuttiProtocols extends AbstractTuttiProtocols { return surveyCodes; } + public static boolean matchProgramId(TuttiProtocol protocol, String programId) { + Preconditions.checkNotNull(protocol, "Protocol can't be null."); + return Objects.equals(programId, protocol.getProgramId()); + } } \ No newline at end of file diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java index 00d6d3f..5044d35 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceService.java @@ -74,6 +74,13 @@ public interface ProtocolPersistenceService extends TuttiPersistenceServiceImple List<TuttiProtocol> getAllProtocol(); + /** + * + * @param programId l'identifiant de la série de compagne (peut-être null) + * @return la liste des protocoles dont le {@code programId} est celui passé en paramètre + */ + List<TuttiProtocol> getAllProtocol(String programId); + TuttiProtocol getProtocol(String id); TuttiProtocol createProtocol(TuttiProtocol bean); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java index 5cfff98..78e48b4 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java @@ -172,6 +172,25 @@ public class ProtocolPersistenceServiceImpl extends AbstractPersistenceService i } @Override + public List<TuttiProtocol> getAllProtocol(String programId) { + List<TuttiProtocol> result = Lists.newArrayList(); + for (String id : getAllProtocolId()) { + TuttiProtocol protocol = getProtocol(id); + if (TuttiProtocols.matchProgramId(protocol, programId)) { + if (log.isDebugEnabled()) { + log.debug("Keep protocol: "+protocol.getName()+", programId: "+programId+" matches!"); + } + result.add(protocol); + } else { + if (log.isDebugEnabled()) { + log.debug("Remove protocol: "+protocol.getName()+", programId: "+programId+" does not match!"); + } + } + } + return Collections.unmodifiableList(result); + } + + @Override public TuttiProtocol getProtocol(String id) { File file = getProtocolFile(id); TuttiProtocol result = TuttiProtocols.fromFile(file); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java index d092b27..e0a7785 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java @@ -1204,6 +1204,11 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override + public List<TuttiProtocol> getAllProtocol(String programId) { + return driver.getAllProtocol(programId); + } + + @Override public List<String> getAllProtocolId() { return driver.getAllProtocolId(); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit 384ff900bb7683a7dd06300782638930f748cd3d Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 8 23:24:19 2016 +0100 Filtrer les protocoles par série de campagne --- .../ui/swing/content/home/SelectCruiseUI.jcss | 4 ++++ .../swing/content/home/SelectCruiseUIHandler.java | 25 ++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jcss index ec38029..d73a27c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jcss @@ -163,6 +163,7 @@ BeanFilterableComboBox { actionIcon: add; text: "tutti.selectCruise.action.newProtocol"; _applicationAction: {fr.ifremer.tutti.ui.swing.content.home.actions.NewProtocolAction.class}; + enabled: {model.isProgramFound()}; toolTipText: "tutti.selectCruise.action.newProtocol.tip"; _help: {"tutti.selectCruise.action.newProtocol.help"}; } @@ -171,6 +172,7 @@ BeanFilterableComboBox { actionIcon: import; text: "tutti.selectCruise.action.importProtocol"; _applicationAction: {fr.ifremer.tutti.ui.swing.content.home.actions.ImportProtocolAction.class}; + enabled: {model.isProgramFound()}; toolTipText: "tutti.selectCruise.action.importProtocol.tip"; _help: {"tutti.selectCruise.action.importProtocol.help"}; } @@ -180,6 +182,7 @@ BeanFilterableComboBox { text: "tutti.selectCruise.action.editProtocol"; _applicationAction: {fr.ifremer.tutti.ui.swing.content.home.actions.EditProtocolAction.class}; toolTipText: "tutti.selectCruise.action.editProtocol.tip"; + enabled: {model.isProtocolFound() && model.isProgramFound()}; _help: {"tutti.selectCruise.action.editProtocol.help"}; } @@ -188,6 +191,7 @@ BeanFilterableComboBox { text: "tutti.selectCruise.action.cloneProtocol"; _applicationAction: {fr.ifremer.tutti.ui.swing.content.home.actions.CloneProtocolAction.class}; toolTipText: "tutti.selectCruise.action.cloneProtocol.tip"; + enabled: {model.isProtocolFound() && model.isProgramFound()}; _help: {"tutti.selectCruise.action.cloneProtocol.help"}; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java index eb0e6b4..1c858c5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java @@ -68,6 +68,8 @@ public class SelectCruiseUIHandler extends AbstractTuttiUIHandler<SelectCruiseUI List<Program> programs = Lists.newArrayList(persistenceService.getAllProgram()); model.setPrograms(programs); + Program selectedProgram = null; + if (programs.isEmpty()) { // do nothing @@ -78,7 +80,7 @@ public class SelectCruiseUIHandler extends AbstractTuttiUIHandler<SelectCruiseUI // get selected program (if any) - Program selectedProgram = null; + List<Cruise> cruises = null; if (getContext().isProgramFilled()) { selectedProgram = getDataContext().getProgram(); @@ -105,7 +107,7 @@ public class SelectCruiseUIHandler extends AbstractTuttiUIHandler<SelectCruiseUI } List<TuttiProtocol> protocols = - Lists.newArrayList(persistenceService.getAllProtocol()); + Lists.newArrayList(persistenceService.getAllProtocol(selectedProgram == null ? null : selectedProgram.getId())); model.setProtocols(protocols); if (protocols.isEmpty()) { @@ -164,14 +166,20 @@ public class SelectCruiseUIHandler extends AbstractTuttiUIHandler<SelectCruiseUI log.info("Selected program: " + newValue); } List<Cruise> cruises; + List<TuttiProtocol> protocols; if (noProgram) { cruises = Lists.newArrayList(); + protocols = Lists.newArrayList(getPersistenceService().getAllProtocol(null)); + } else { cruises = Lists.newArrayList(getPersistenceService().getAllCruise(newValue.getId())); + protocols = Lists.newArrayList(getPersistenceService().getAllProtocol(newValue.getId())); } SelectCruiseUIModel source = (SelectCruiseUIModel) evt.getSource(); source.setCruises(cruises); source.setCruise(null); + source.setProtocols(protocols); + source.setProtocol(null); } }); @@ -196,6 +204,19 @@ public class SelectCruiseUIHandler extends AbstractTuttiUIHandler<SelectCruiseUI } }); + model.addPropertyChangeListener(SelectCruiseUIModel.PROPERTY_PROTOCOLS, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + // reload combo box + BeanFilterableComboBox<TuttiProtocol> combobox = SelectCruiseUIHandler.this.ui.getProtocolCombobox(); + List<TuttiProtocol> protocols = (List<TuttiProtocol>) evt.getNewValue(); + combobox.setData(null); + if (protocols != null) { + combobox.setData(protocols); + } + } + }); + model.addPropertyChangeListener(SelectCruiseUIModel.PROPERTY_PROTOCOL, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent 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 feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit 6d43c7ae995c1c81bdd85882038f12190e9bd97c Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 8 23:25:45 2016 +0100 Charger le modèle des strates dispnibles plus haut + ne pas reproposer à la sélection des strates et sous-strates déjà dans le protocole --- .../content/protocol/EditProtocolUIHandler.java | 64 ++++++++++++++++++++++ .../content/protocol/EditProtocolUIModel.java | 4 +- .../protocol/zones/ZoneEditorUIHandler.java | 45 ++------------- 3 files changed, 71 insertions(+), 42 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java index 0b0f601..4957bf5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol; import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; +import com.google.common.collect.HashMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; @@ -38,12 +39,16 @@ import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.Strata; +import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiDecorator; import fr.ifremer.tutti.ui.swing.content.home.actions.CloneProtocolAction; import fr.ifremer.tutti.ui.swing.content.home.actions.EditProtocolAction; @@ -51,6 +56,8 @@ import fr.ifremer.tutti.ui.swing.content.home.actions.ImportProtocolAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellEditor; import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellRenderer; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.SubStrataUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.SwingUtil; @@ -94,9 +101,12 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -283,6 +293,8 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI model.setLengthClassesPmfmId(Lists.<String>newArrayList()); } + model.setProgramId(getDataContext().getProgramId()); + SwingValidator validator = this.ui.getValidator(); listenValidatorValid(validator, model); @@ -593,6 +605,9 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI populateImportColumnTableEditors(); + // init available zones + initAvailableZonesModel(); + // if new protocol can already cancel his creation model.setModify(model.isCreate() || model.isCleaned()); @@ -634,6 +649,55 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI } + protected void initAvailableZonesModel() { + + PersistenceService persistenceService = getPersistenceService(); + + TuttiLocation programZone = getDataContext().getProgram().getZone(); + + Multimap<TuttiLocation, TuttiLocation> programStratasAndSubstratas = + HashMultimap.create(persistenceService.getAllFishingOperationStratasAndSubstratas(programZone.getId())); + + Set<TuttiLocation> usedLocations = new LinkedHashSet<>(); + + getModel().getZone().stream().forEach(zone -> { + Collection<Strata> zoneStratas = zone.getStrata(); + + Set<TuttiLocation> locations = zoneStratas.stream().map(Strata::getLocation).collect(Collectors.toSet()); + usedLocations.addAll(locations); + + zoneStratas.stream().map(Strata::getSubstrata).forEach(subStratas -> { + Set<TuttiLocation> locations2 = subStratas.stream().map(SubStrata::getLocation).collect(Collectors.toSet()); + usedLocations.addAll(locations2); + }); + + }); + + // on transforme les données du service en modele d'ui + Collection<StrataUIModel> availableStratas = new HashSet<>(); + programStratasAndSubstratas.keySet().stream().forEach(strataLocation -> { + + Collection<TuttiLocation> subStrataLocations = new HashSet<>(programStratasAndSubstratas.get(strataLocation)); + subStrataLocations.remove(null); + List<SubStrata> subStratas = subStrataLocations.stream() + .filter(tuttiLocation -> !usedLocations.contains(tuttiLocation)) + .map(SubStrataUIModel::new) + .collect(Collectors.toList()); + + + if (!(subStratas.isEmpty() && usedLocations.contains(strataLocation))) { + + // the strata is already consumed + StrataUIModel strata = new StrataUIModel(strataLocation); + strata.setSubstrata(subStratas); + availableStratas.add(strata); + } + + }); + + getModel().setAvailableStratas(availableStratas); + } + @Override protected JComponent getComponentToFocus() { return getUI().getNameField(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index a4acbed..5366fa8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -196,7 +196,7 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, public void fromEntity(TuttiProtocol entity) { fromBeanBinder.copyExcluding(entity, this, PROPERTY_ZONE); - Collection<Zone> zoneModels = entity.getZone() + List<Zone> zoneModels = entity.getZone() .stream() .map(zone -> { ZoneUIModel zoneUIModel = new ZoneUIModel(); @@ -481,7 +481,7 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, @Override public void setProgramId(String programId) { Object oldValue = getProgramId(); - editObject.setComment(programId); + editObject.setProgramId(programId); firePropertyChange(PROPERTY_PROGRAM_ID, oldValue, programId); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIHandler.java index 62aa35c..2cde9ca 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIHandler.java @@ -1,10 +1,5 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; -import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; -import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.SubStrataUIModel; @@ -37,7 +32,6 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; -import java.util.HashSet; import java.util.stream.Collectors; /** @@ -231,7 +225,7 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo zonesTreeModel.addTreeModelListener(new TreeModelListener() { @Override - public void treeNodesChanged(TreeModelEvent e) { } + public void treeNodesChanged(TreeModelEvent e) { getModel().setModify(true); } @Override public void treeNodesInserted(TreeModelEvent e) { @@ -264,8 +258,6 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo // get data - initModel(); - JAXXWidgetUtil.expandTree(availableStratasTree); JAXXWidgetUtil.expandTree(zonesTree); } @@ -334,46 +326,19 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo } } - protected void initModel() { - PersistenceService persistenceService = getPersistenceService(); - - TuttiLocation programZone = getDataContext().getProgram().getZone(); - - Multimap<TuttiLocation, TuttiLocation> programStratasAndSubstratas = - HashMultimap.create(persistenceService.getAllFishingOperationStratasAndSubstratas(programZone.getId())); - - // on transforme les données du service en modele d'ui - Collection<StrataUIModel> availableStratas = new HashSet<>(); - programStratasAndSubstratas.keySet().forEach(strataLocation -> { - - StrataUIModel strata = new StrataUIModel(strataLocation); - - Collection<TuttiLocation> subStrataLocations = new HashSet<>(programStratasAndSubstratas.get(strataLocation)); - subStrataLocations.remove(null); - Collection<SubStrata> subStratas = subStrataLocations.stream() - .map(subStrataLocation -> new SubStrataUIModel(subStrataLocation)) - .collect(Collectors.toList()); - - strata.setSubstrata(subStratas); - availableStratas.add(strata); - }); - - getModel().setAvailableStratas(availableStratas); - } - protected void updateZonesTreeModel(Collection<ZoneUIModel> zonesToAdd, Collection<ZoneUIModel> zonesToRemove) { JTree zonesTree = getUI().getZonesTree(); ZonesTreeModel zonesTreeModel = (ZonesTreeModel) zonesTree.getModel(); getModel().removeStratasFromZone(zonesToRemove.stream() - .map(zone -> zone.getStrata()) - .flatMap(s -> s.stream()) + .map(ZoneUIModel::getStrata) + .flatMap(Collection::stream) .map(strata -> (StrataUIModel) strata) .collect(Collectors.toSet())); zonesToAdd.stream() - .map(zone -> zone.getStrata()) - .flatMap(s -> s.stream()) + .map(ZoneUIModel::getStrata) + .flatMap(Collection::stream) .map(strata -> (StrataUIModel) strata) .forEach(strata -> { if (strata.getSubstrata().isEmpty()) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit 4f565d369c3a7598266932e19a8113ab7e4a1e74 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 9 00:06:22 2016 +0100 Ajout d'une propriété pour utiliser le prélèvement des pièces calcifiées, et utilisation dans l'éditeur de protocole --- .../src/main/xmi/tutti-persistence.zargo | Bin 60983 -> 61039 bytes .../filtered-resources/tutti-help-fr.properties | 24 ++------------------- .../ui/swing/content/protocol/EditProtocolUI.jaxx | 18 +++++++++++++--- .../ui/swing/content/protocol/EditProtocolUI.jcss | 11 ++++++++++ .../content/protocol/EditProtocolUIModel.java | 12 +++++++++++ .../EditProtocolUIModel-error-validation.xml | 2 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 3 +++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 5 ++++- 8 files changed, 48 insertions(+), 27 deletions(-) diff --git a/tutti-persistence/src/main/xmi/tutti-persistence.zargo b/tutti-persistence/src/main/xmi/tutti-persistence.zargo index 25ca92e..ec0a03b 100644 Binary files a/tutti-persistence/src/main/xmi/tutti-persistence.zargo and b/tutti-persistence/src/main/xmi/tutti-persistence.zargo differ 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 8382f32..0a664c5 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 @@ -1,26 +1,5 @@ -### -# #%L -# Tutti :: UI -# %% -# 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% -### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Fri Jan 15 19:43:38 CET 2016 +#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 @@ -279,6 +258,7 @@ tutti.editProtocol.field.individualObservation.help=editProtocol.html\#fieldsCar tutti.editProtocol.field.lengthClasses.help=editProtocol.html\#fieldsCaracteristics tutti.editProtocol.field.name.help=editProtocol.html\#fields tutti.editProtocol.field.species.help=editProtocol.html\#fieldsSpecies +tutti.editProtocol.field.useCalcifiedPieceSampling.help= tutti.editProtocol.field.vesselUseFeature.help=editProtocol.html\#fieldsCaracteristics tutti.editProtocol.help=editProtocol.html tutti.editProtocol.pane.caracteristic.help=editProtocol.html\#fieldsCaracteristics diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx index 33d7ad5..b30c73f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx @@ -239,9 +239,21 @@ </Table> </JPanel> </tab> - <tab title='tutti.editProtocol.tab.zone'> - <ZoneEditorUI id="zoneEditor" - constructorParams='this'/> + + <tab title='tutti.editProtocol.tab.cps'> + <JPanel layout='{new BorderLayout(10, 10)}'> + <JCheckBox id='useCalcifiedPieceSampling' constraints='BorderLayout.NORTH' border="{new TitledBorder(null, null)}" + onItemStateChanged='handler.setBoolean(event, "useCalcifiedPieceSampling")'/> + <JTabbedPane id='cpsTabbedPane' constraints='BorderLayout.CENTER'> + + <tab title='tutti.editProtocol.tab.zone'> + <ZoneEditorUI id="zoneEditor" constructorParams='this'/> + </tab> + <tab title='tutti.editProtocol.tab.algorithm'> + <CalcifiedPiecesSamplingEditorUI id="calcifiedPiecesSamplingEditorUI" constructorParams='this'/> + </tab> + </JTabbedPane> + </JPanel> </tab> </JTabbedPane> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jcss index 51e0b14..daad976 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jcss @@ -159,6 +159,17 @@ JTextField { _help: {"tutti.editProtocol.field.lengthClasses.help"}; } +#cpsTabbedPane { + visible: {model.isUseCalcifiedPieceSampling()}; +} + +#useCalcifiedPieceSampling { + text: "tutti.editProtocol.field.useCalcifiedPieceSampling"; + selected: {model.isUseCalcifiedPieceSampling()}; + toolTipText: "tutti.editProtocol.field.useCalcifiedPieceSampling.tip"; + _help: {"tutti.editProtocol.field.useCalcifiedPieceSampling.help"}; +} + #saveButton { actionIcon: save; text: "tutti.editProtocol.action.saveProtocol"; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index 5366fa8..ae52a8b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -975,6 +975,18 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, return editObject.getOperationFieldMapping(index); } + @Override + public boolean isUseCalcifiedPieceSampling() { + return editObject.isUseCalcifiedPieceSampling(); + } + + @Override + public void setUseCalcifiedPieceSampling(boolean useCalcifiedPieceSampling) { + boolean oldValue = isUseCalcifiedPieceSampling(); + editObject.setUseCalcifiedPieceSampling(useCalcifiedPieceSampling); + firePropertyChanged(TuttiProtocol.PROPERTY_USE_CALCIFIED_PIECE_SAMPLING, oldValue, useCalcifiedPieceSampling); + } + public int numberOfRows(String column) { int result = 0; MutableInt mutableInt = numberOfRowsByColumn.get(column); diff --git a/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel-error-validation.xml b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel-error-validation.xml index 62a6e21..80b6b39 100644 --- a/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel-error-validation.xml +++ b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel-error-validation.xml @@ -29,7 +29,7 @@ <field name="availableStratas"> <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ availableStratas.isEmpty() ]]> + <![CDATA[ !useCalcifiedPieceSampling || availableStratas.isEmpty() ]]> </param> <message> tutti.validator.error.zoneEditor.availableStratas.remaining 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 ec22d52..9a83634 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 @@ -1099,6 +1099,9 @@ tutti.editProtocol.field.comment.tip= tutti.editProtocol.field.protocol.name= tutti.editProtocol.field.protocol.name.tip= tutti.editProtocol.field.species.tip= +tutti.editProtocol.field.useCalcifiedPieceSampling= +tutti.editProtocol.field.useCalcifiedPieceSampling.tip= +tutti.editProtocol.tab.algorithm= tutti.editProtocol.tab.benthos= tutti.editProtocol.tab.caracteristic= tutti.editProtocol.tab.caracteristic.gearUseFeature= 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 8b5fc63..e4c9229 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 @@ -1052,12 +1052,15 @@ tutti.editProtocol.field.comment.tip=Commentaire tutti.editProtocol.field.protocol.name=Nom tutti.editProtocol.field.protocol.name.tip=Nom du protocole tutti.editProtocol.field.species.tip=Espèces +tutti.editProtocol.field.useCalcifiedPieceSampling=Effectuer le prélèvement de pièces calcifiées +tutti.editProtocol.field.useCalcifiedPieceSampling.tip=Effectuer le prélèvement de pièces calcifiées +tutti.editProtocol.tab.algorithm=Algorithme tutti.editProtocol.tab.benthos=Benthos tutti.editProtocol.tab.caracteristic=Caractéristiques tutti.editProtocol.tab.caracteristic.individualObservation=Observations individuelles tutti.editProtocol.tab.caracteristic.lengthClasses=Classes de taille tutti.editProtocol.tab.caracteristic.mapping=Caractéristiques du trait -tutti.editProtocol.tab.cps= +tutti.editProtocol.tab.cps=Prélèvement de pièces calcifiées tutti.editProtocol.tab.info=Informations générales tutti.editProtocol.tab.species=Espèces tutti.editProtocol.tab.zone=Zones -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit a82e69b1b10d98f1d1ce0c9a783b6c66b1f12e95 Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 9 18:16:23 2016 +0100 - ajout des lignes mature et immatue si la case maturité est cochee - renderer des maturités - cellule de min size 0 non editable - ajout de la suppression des lignes d'une espèce refs #7930 --- .../fr/ifremer/tutti/service/DecoratorService.java | 18 +----- .../CalcifiedPiecesSamplingEditorTableModel.java | 32 ++++++++++ .../CalcifiedPiecesSamplingEditorUI.jaxx | 3 +- .../CalcifiedPiecesSamplingEditorUI.jcss | 9 ++- .../CalcifiedPiecesSamplingEditorUIHandler.java | 10 +++- .../actions/AddSpeciesAction.java | 31 +++++++--- .../actions/DeleteSpeciesAction.java | 69 ++++++++++++++++++++++ .../actions/SplitSpeciesAction.java | 21 ++++--- .../resources/i18n/tutti-ui-swing_en_GB.properties | 3 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 13 ++-- 10 files changed, 168 insertions(+), 41 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java index e7aaf49..7108250 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java @@ -82,8 +82,6 @@ public class DecoratorService extends AbstractTuttiService { public static final String MATURITY = "maturity"; - public static final String SHORT_MATURITY = "shortMaturity"; - public static final Comparator<FishingOperation> FISHING_OPERATION_COMPARATOR_BY_GEAR_SHOOTING_START_DATE = new Comparator<FishingOperation>() { @Override public int compare(FishingOperation o1, FishingOperation o2) { @@ -161,8 +159,7 @@ public class DecoratorService extends AbstractTuttiService { } }); registerDecorator(SPACE_EVERY_3_DIGIT, new SpaceEvery3DigitDecorator()); - registerDecorator(MATURITY, new MaturityDecorator(false)); - registerDecorator(SHORT_MATURITY, new MaturityDecorator(true)); + registerDecorator(MATURITY, new MaturityDecorator()); registerDecorator(new VesselDecorator()); registerDecorator(new ProgramDecorator()); registerTuttiDecorator(Program.class, ONLY_NAME, "${name}$s", SEPARATOR, " - "); @@ -436,11 +433,8 @@ public class DecoratorService extends AbstractTuttiService { public static class MaturityDecorator extends Decorator<Boolean> { - protected boolean shortRendering; - - protected MaturityDecorator(boolean shortRendering) { + protected MaturityDecorator() { super(Boolean.class); - this.shortRendering = shortRendering; } @Override @@ -453,13 +447,7 @@ public class DecoratorService extends AbstractTuttiService { } else { Boolean maturity = (Boolean) bean; - - if (shortRendering) { - result = maturity ? t("tutti.maturity.mature.short") : t("tutti.maturity.immature.short"); - - } else { - result = maturity ? t("tutti.maturity.mature") : t("tutti.maturity.immature"); - } + result = maturity ? t("tutti.maturity.mature") : t("tutti.maturity.immature"); } return result; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java index 25c8064..1d8ffa4 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java @@ -46,6 +46,25 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication return new CalcifiedPiecesSamplingEditorRowModel(); } + public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, + Boolean maturity) { + return createNewRow(species, maturity, 0, null); + } + + public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, + Boolean maturity, + int minSize, + Integer maxSize) { + + CalcifiedPiecesSamplingEditorRowModel newRow = createNewRow(); + newRow.setSpecies(species); + newRow.setMaturity(maturity); + newRow.setMinSize(minSize); + newRow.setMaxSize(maxSize); + + return newRow; + } + /** * Return the list of used species in the table (used to fill the * comparator cache for species sort) @@ -60,4 +79,17 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication } return result; } + + @Override + protected boolean isCellEditable(int rowIndex, + int columnIndex, + ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> propertyName) { + boolean result = super.isCellEditable(rowIndex, columnIndex, propertyName); + + if (result && MIN_SIZE.equals(propertyName)) { + int minSize = (int) getValueAt(rowIndex, columnIndex); + result = minSize > 0; + } + return result; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx index 7cffb53..44b86cf 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx @@ -28,6 +28,7 @@ <JPopupMenu id='cpsTablePopup'> <JMenuItem id='splitCpsRowMenu'/> + <JMenuItem id='deleteSpeciesMenu'/> </JPopupMenu> <Table fill='both' constraints='BorderLayout.CENTER'> @@ -39,7 +40,7 @@ genericType='Species'/> </cell> <cell fill='both'> - <JComboBox id='maturityComboBox'/> + <JCheckBox id='maturityCheckBox'/> </cell> <cell fill='both'> <JButton id='addSpeciesButton'/> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss index d3207f3..ff9a4b8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss @@ -8,7 +8,8 @@ BeanFilterableComboBox { _help: {"tutti.editCps.field.species.help"}; } -#maturityComboBox { +#maturityCheckBox { + text: "tutti.editCps.field.maturity"; toolTipText: "tutti.editCps.field.maturity.tip"; _help: {"tutti.editCps.field.maturity.help"}; } @@ -16,9 +17,15 @@ BeanFilterableComboBox { #addSpeciesButton { actionIcon: add; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.AddSpeciesAction.class}; + enabled: { speciesComboBox.getSelectedItem() != null }; } #splitCpsRowMenu { actionIcon: add; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.SplitSpeciesAction.class}; +} + +#deleteSpeciesMenu { + actionIcon: delete; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.DeleteSpeciesAction.class}; } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index dd67edf..4d64fe5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -6,6 +6,7 @@ import fr.ifremer.tutti.service.TuttiDecorator; import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.util.TuttiUI; import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; @@ -51,9 +52,12 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl speciesColumn.putClientProperty(SpeciesAbleBatchRowHelper.SPECIES_DECORATOR, speciesDecorator); speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator)); - addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MATURITY); - addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MIN_SIZE); - addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE); + addColumnToModel(columnModel, + null, + newTableCellRender(Boolean.class, DecoratorService.MATURITY), + CalcifiedPiecesSamplingEditorTableModel.MATURITY); + addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MIN_SIZE, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); + addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); final CalcifiedPiecesSamplingEditorTableModel tableModel = new CalcifiedPiecesSamplingEditorTableModel(columnModel); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java index 0413981..aa807bd 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java @@ -8,6 +8,9 @@ import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; +import java.util.ArrayList; +import java.util.List; + /** * @author Kevin Morin (Code Lutin) * @since 4.5 @@ -25,21 +28,31 @@ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplin CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) ui.getCpsTable().getModel(); - CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(); - newRow.setSpecies(species); - newRow.setMaturity(null); - newRow.setMinSize(0); - newRow.setMaxSize(null); + List<CalcifiedPiecesSamplingEditorRowModel> newRows = new ArrayList<>(); + if (ui.getMaturityCheckBox().isSelected()) { + + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, true); + newRows.add(newRow); + + newRow = tableModel.createNewRow(species, false); + newRows.add(newRow); - ui.getModel().getCspRows().add(newRow); + } else { + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, null); + newRows.add(newRow); + } + + ui.getModel().getCspRows().addAll(newRows); speciesComboBox.removeItem(species); - tableModel.fireTableRowsInserted(newRow); + int firstRowIndex = tableModel.getRowIndex(newRows.get(0)); + int lastRowIndex = tableModel.getRowIndex(newRows.get(newRows.size() - 1)); + + tableModel.fireTableRowsInserted(firstRowIndex, lastRowIndex); // select this new row - int rowIndex = tableModel.getRowIndex(newRow); - SwingUtil.setSelectionInterval(ui.getCpsTable(), rowIndex); + SwingUtil.setSelectionInterval(ui.getCpsTable(), firstRowIndex); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java new file mode 100644 index 0000000..e409703 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java @@ -0,0 +1,69 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; + +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +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 java.util.TreeSet; +import java.util.stream.Collectors; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplingEditorUI> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(DeleteSpeciesAction.class); + + public DeleteSpeciesAction(CalcifiedPiecesSamplingEditorUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(CalcifiedPiecesSamplingEditorUI ui) { + + JXTable cpsTable = ui.getCpsTable(); + CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); + + int selectedRow = cpsTable.getSelectedRow(); + if (log.isInfoEnabled()) { + log.info("selected row " + selectedRow); + } + + List<CalcifiedPiecesSamplingEditorRowModel> cspRows = ui.getModel().getCspRows(); + + CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); + + Species speciesToDelete = row.getSpecies(); + String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete); + int confirmDeletion = JOptionPane.showConfirmDialog(ui, + t("tutti.editCps.deleteSpecies.message", decoratedSpecies), + t("tutti.editCps.deleteSpecies.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + + if (confirmDeletion == JOptionPane.YES_OPTION) { + + List<CalcifiedPiecesSamplingEditorRowModel> rowsToDelete = + cspRows.stream().filter(r -> r.getSpecies().equals(speciesToDelete)).collect(Collectors.toList()); + + TreeSet<Integer> indexesToDelete = + new TreeSet<>(rowsToDelete.stream().map(cspRows::indexOf).collect(Collectors.toSet())); + + cspRows.removeAll(rowsToDelete); + + tableModel.fireTableRowsDeleted(indexesToDelete.first(), indexesToDelete.last()); + } + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java index 2407855..a99d51f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java @@ -9,6 +9,7 @@ import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; import javax.swing.JOptionPane; +import java.util.List; /** * @author Kevin Morin (Code Lutin) @@ -37,17 +38,23 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl log.info("selected row " + selectedRow); } - CalcifiedPiecesSamplingEditorRowModel row = ui.getModel().getCspRows().get(selectedRow); + List<CalcifiedPiecesSamplingEditorRowModel> cspRows = ui.getModel().getCspRows(); + + CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); Integer exMaxSize = row.getMaxSize(); row.setMaxSize(minSize - 1); - CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(); - newRow.setSpecies(row.getSpecies()); - newRow.setMaturity(row.getMaturity()); - newRow.setMinSize(minSize); - newRow.setMaxSize(exMaxSize); + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(row.getSpecies(), + row.getMaturity(), + minSize, + exMaxSize); + +// newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { +// row.setMaxSize(((int) evt.getNewValue()) - 1); +// tableModel.fireTableRowsInserted(row); +// }); - ui.getModel().getCspRows().add(newRow); + cspRows.add(selectedRow + 1, newRow); tableModel.fireTableRowsUpdated(selectedRow, selectedRow); tableModel.fireTableRowsInserted(newRow); 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 9a83634..f786128 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 @@ -721,6 +721,9 @@ tutti.editCatchBatch.legend.marineLitter= tutti.editCatchBatch.legend.species= tutti.editCatchBatch.legend.total= tutti.editCatchBatch.svgLoading.error= +tutti.editCps.deleteSpecies.message= +tutti.editCps.deleteSpecies.title= +tutti.editCps.field.maturity= tutti.editCps.field.maturity.tip= tutti.editCps.field.species.tip= tutti.editCps.table.header.maturity.field= 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 e4c9229..58657bb 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 @@ -683,15 +683,18 @@ tutti.editCatchBatch.legend.marineLitter=Macro déchets tutti.editCatchBatch.legend.species=Espèces tutti.editCatchBatch.legend.total=Capture tutti.editCatchBatch.svgLoading.error=Erreur lors du chargement du diagramme du résumé +tutti.editCps.deleteSpecies.message= +tutti.editCps.deleteSpecies.title= +tutti.editCps.field.maturity=Maturité tutti.editCps.field.maturity.tip= -tutti.editCps.field.species.tip= -tutti.editCps.table.header.maturity.field= +tutti.editCps.field.species.tip=Espèce +tutti.editCps.table.header.maturity.field=Maturité tutti.editCps.table.header.maturity.field.tip= -tutti.editCps.table.header.maxSize.field= +tutti.editCps.table.header.maxSize.field=Taille max tutti.editCps.table.header.maxSize.field.tip= -tutti.editCps.table.header.minSize.field= +tutti.editCps.table.header.minSize.field=Taille min tutti.editCps.table.header.minSize.field.tip= -tutti.editCps.table.header.species.field= +tutti.editCps.table.header.species.field=Espèce tutti.editCps.table.header.species.field.tip= tutti.editCruise.action.closeEditCruise=Fermer tutti.editCruise.action.closeEditCruise.mnemonic=F -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit ad17e2a9a3564e3b74b88aa12b2c0ebec3bff1f3 Author: Kevin Morin <morin@codelutin.com> Date: Wed Feb 10 18:28:44 2016 +0100 - ajout de la suppression d'une ligne - activation/descativation des menus - validation de ce que l'utilisateur entre comme taille minimale dans la popup refs #7930 --- .../fr/ifremer/tutti/service/DecoratorService.java | 14 ++- .../resources/i18n/tutti-service_en_GB.properties | 1 + .../resources/i18n/tutti-service_fr_FR.properties | 1 + .../content/protocol/EditProtocolUIModel.java | 16 +-- .../CalcifiedPiecesSamplingEditorUI.jaxx | 1 + .../CalcifiedPiecesSamplingEditorUI.jcss | 9 ++ .../CalcifiedPiecesSamplingEditorUIHandler.java | 108 ++++++++++++++------- .../calcifiedpiecessampling/MinSizePopupUI.jaxx | 80 +++++++++++++++ .../calcifiedpiecessampling/MinSizePopupUI.jcss | 59 +++++++++++ .../MinSizePopupUIHandler.java | 91 +++++++++++++++++ .../MinSizePopupUIModel.java | 52 ++++++++++ .../actions/AddSpeciesAction.java | 9 +- .../actions/DeleteRowAction.java | 75 ++++++++++++++ .../actions/DeleteSpeciesAction.java | 2 +- .../actions/SplitSpeciesAction.java | 52 +++++----- .../MinSizePopupUIModel-error-validation.xml | 23 +++++ .../rtp/RtpEditorUIModel-error-validation.xml | 2 - .../resources/i18n/tutti-ui-swing_en_GB.properties | 8 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 12 ++- 19 files changed, 542 insertions(+), 73 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java index 7108250..3fd86a2 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java @@ -78,10 +78,12 @@ public class DecoratorService extends AbstractTuttiService { public static final String SPACE_EVERY_3_DIGIT = "spaceEvery3Digit"; - public static final String SEPARATOR = "#"; - public static final String MATURITY = "maturity"; + public static final String NULL_INFINITE = "nullInfinite"; + + public static final String SEPARATOR = "#"; + public static final Comparator<FishingOperation> FISHING_OPERATION_COMPARATOR_BY_GEAR_SHOOTING_START_DATE = new Comparator<FishingOperation>() { @Override public int compare(FishingOperation o1, FishingOperation o2) { @@ -159,6 +161,14 @@ public class DecoratorService extends AbstractTuttiService { } }); registerDecorator(SPACE_EVERY_3_DIGIT, new SpaceEvery3DigitDecorator()); + registerDecorator(NULL_INFINITE, new Decorator<Integer>(Integer.class) { + private static final long serialVersionUID = 1L; + + @Override + public String toString(Object bean) { + return bean == null ? t("tutti.decorator.null.infinite") : String.valueOf(bean); + } + }); registerDecorator(MATURITY, new MaturityDecorator()); registerDecorator(new VesselDecorator()); registerDecorator(new ProgramDecorator()); diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index fa432d4..23c8a02 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -8,6 +8,7 @@ tutti.caracteristicType.lengthStep= tutti.caracteristicType.vesselUseFeature= tutti.csv.import.error.on.field= tutti.csv.import.error.on.row= +tutti.decorator.null.infinite= tutti.error.benthos.not.in.protocol= tutti.error.messages= tutti.error.species.not.in.protocol= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 2b2727f..812cfd6 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -5,6 +5,7 @@ tutti.caracteristicType.VESSEL_USE_FEATURE=Autres caractéristiques tutti.caracteristicType.lengthStep= tutti.csv.import.error.on.field=Colonne %s \: %s tutti.csv.import.error.on.row=Des erreurs ont été détectées à la ligne %s \:\n %s +tutti.decorator.null.infinite= tutti.error.messages=Erreurs \:\n %s tutti.fatal.messages=Erreurs critiques \:\n %s tutti.io.mkDir.error=Erreur à la création du dossier %s diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index ae52a8b..bf2be98 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -93,7 +93,7 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, public static final String PROPERTY_AVAILABLE_STRATAS = "availableStratas"; - public static final String PROPERTY_CSP_ROWS = "cspRows"; + public static final String PROPERTY_CSP_ROWS = "cpsRows"; /** * Delegate edit object. @@ -172,7 +172,7 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, protected List<EditProtocolSpeciesRowModel> benthosRow; - protected List<CalcifiedPiecesSamplingEditorRowModel> cspRows; + protected List<CalcifiedPiecesSamplingEditorRowModel> cpsRows; protected final Collection<StrataUIModel> availableStratas = new HashSet<>(); @@ -301,14 +301,14 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, firePropertyChange(PROPERTY_BENTHOS_ROW, oldValue, benthosRow); } - public List<CalcifiedPiecesSamplingEditorRowModel> getCspRows() { - return cspRows; + public List<CalcifiedPiecesSamplingEditorRowModel> getCpsRows() { + return cpsRows; } - public void setCspRows(List<CalcifiedPiecesSamplingEditorRowModel> cspRows) { - Object oldValue = getCspRows(); - this.cspRows = cspRows; - firePropertyChange(PROPERTY_CSP_ROWS, oldValue, cspRows); + public void setCpsRows(List<CalcifiedPiecesSamplingEditorRowModel> cpsRows) { + Object oldValue = getCpsRows(); + this.cpsRows = cpsRows; + firePropertyChange(PROPERTY_CSP_ROWS, oldValue, cpsRows); } public boolean isRemoveSpeciesEnabled() { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx index 44b86cf..cbbbcfd 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx @@ -28,6 +28,7 @@ <JPopupMenu id='cpsTablePopup'> <JMenuItem id='splitCpsRowMenu'/> + <JMenuItem id='deleteCpsRowMenu'/> <JMenuItem id='deleteSpeciesMenu'/> </JPopupMenu> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss index ff9a4b8..f3362f5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss @@ -25,7 +25,16 @@ BeanFilterableComboBox { _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.SplitSpeciesAction.class}; } +#deleteCpsRowMenu { + actionIcon: delete; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.DeleteRowAction.class}; +} + #deleteSpeciesMenu { actionIcon: delete; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.DeleteSpeciesAction.class}; +} + +#cpsTable { + selectionMode: {javax.swing.ListSelectionModel.SINGLE_SELECTION}; } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index 4d64fe5..4e35b5d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -16,9 +16,15 @@ import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import org.jdesktop.swingx.table.TableColumnExt; import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.SwingConstants; import javax.swing.event.TableModelEvent; -import javax.swing.event.TableModelListener; +import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.JTableHeader; +import javax.swing.table.TableCellRenderer; +import java.awt.Component; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -47,7 +53,6 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl null, newTableCellRender(Species.class), CalcifiedPiecesSamplingEditorTableModel.SPECIES); - speciesColumn.setSortable(true); DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator(); speciesColumn.putClientProperty(SpeciesAbleBatchRowHelper.SPECIES_DECORATOR, speciesDecorator); speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator)); @@ -56,8 +61,25 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl null, newTableCellRender(Boolean.class, DecoratorService.MATURITY), CalcifiedPiecesSamplingEditorTableModel.MATURITY); + addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MIN_SIZE, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); - addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); + + // renderer to display infinite instead of null + TableCellRenderer renderer = new TableCellRenderer() { + + private final TableCellRenderer tableCellRenderer = new DefaultTableCellRenderer(); + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + Component result = tableCellRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + JLabel jLabel = (JLabel) result; + jLabel.setHorizontalTextPosition(SwingConstants.RIGHT); + jLabel.setText(decorate((Serializable) value, DecoratorService.NULL_INFINITE)); + return result; + } + }; + addColumnToModel(columnModel, null, renderer, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE); + final CalcifiedPiecesSamplingEditorTableModel tableModel = new CalcifiedPiecesSamplingEditorTableModel(columnModel); @@ -78,45 +100,42 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl // cpsTable.getSelectionModel().addListSelectionListener(selectionListener); // when model change, then rebuild the species comparator + set model as modified - tableModel.addTableModelListener(new TableModelListener() { + tableModel.addTableModelListener(e -> { - @Override - public void tableChanged(TableModelEvent e) { - getModel().setModify(true); + getModel().setModify(true); - int type = e.getType(); - if (type == TableModelEvent.DELETE || - type == TableModelEvent.INSERT || - e.getLastRow() == Integer.MAX_VALUE) { + int type = e.getType(); + if (type == TableModelEvent.DELETE || + type == TableModelEvent.INSERT || + e.getLastRow() == Integer.MAX_VALUE) { - // get species column - TableColumnExt tableColumn = - (TableColumnExt) cpsTable.getColumns().get(0); + // get species column + TableColumnExt tableColumn = + (TableColumnExt) cpsTable.getColumns().get(0); - // get column comparator - TuttiDecorator.TuttiDecoratorComparator<Species> comparator = - (TuttiDecorator.TuttiDecoratorComparator<Species>) - tableColumn.getComparator(); + // get column comparator + TuttiDecorator.TuttiDecoratorComparator<Species> comparator = + (TuttiDecorator.TuttiDecoratorComparator<Species>) + tableColumn.getComparator(); - // get column comparator - TuttiDecorator<Species> decorator = - SpeciesAbleBatchRowHelper.getSpeciesColumnDecorator(tableColumn); + // get column comparator + TuttiDecorator<Species> decorator = + SpeciesAbleBatchRowHelper.getSpeciesColumnDecorator(tableColumn); - boolean comparatorNull = comparator == null; - if (comparatorNull) { + boolean comparatorNull = comparator == null; + if (comparatorNull) { - // first time coming here, add the comparator - comparator = decorator.getCurrentComparator(); - } + // first time coming here, add the comparator + comparator = decorator.getCurrentComparator(); + } - // init comparator with model species list - comparator.init(decorator, tableModel.getSpeciesList()); + // init comparator with model species list + comparator.init(decorator, tableModel.getSpeciesList()); - if (comparatorNull) { + if (comparatorNull) { - // affect it to colum - tableColumn.setComparator(comparator); - } + // affect it to colum + tableColumn.setComparator(comparator); } } }); @@ -133,11 +152,34 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl // at the very end, set rows to model List<CalcifiedPiecesSamplingEditorRowModel> rows = new ArrayList<>(); - getModel().setCspRows(rows); + getModel().setCpsRows(rows); tableModel.setRows(rows); } @Override + protected void beforeOpenPopup(int modelRowIndex, int modelColumnIndex) { + super.beforeOpenPopup(modelRowIndex, modelColumnIndex); + + boolean rowSelected = modelRowIndex >= 0 && modelRowIndex < getModel().getCpsRows().size(); + boolean splitEnabled = rowSelected; + boolean rowDeletable = rowSelected; + + if (rowSelected) { + CalcifiedPiecesSamplingEditorRowModel selectedRow = getModel().getCpsRows().get(modelRowIndex); + splitEnabled = selectedRow.getMaxSize() == null + || selectedRow.getMaxSize() - selectedRow.getMinSize() > 1; + rowDeletable = selectedRow.getMinSize() > 0; + } + + getUI().getSplitCpsRowMenu().setEnabled(splitEnabled); + + getUI().getDeleteCpsRowMenu().setEnabled(rowDeletable); + + getUI().getDeleteSpeciesMenu().setEnabled(rowSelected); + + } + + @Override protected JComponent getComponentToFocus() { return null; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jaxx new file mode 100644 index 0000000..50de932 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jaxx @@ -0,0 +1,80 @@ +<!-- + #%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% + --> +<JDialog id='minSizeDialog' layout='{new BorderLayout()}' + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<MinSizePopupUIModel, MinSizePopupUIHandler>'> + + <import> + fr.ifremer.tutti.ui.swing.TuttiUIContext + fr.ifremer.tutti.ui.swing.util.TuttiUI + fr.ifremer.tutti.ui.swing.util.TuttiUIUtil + + jaxx.runtime.swing.editor.NumberEditor + </import> + + <script><![CDATA[ + +public MinSizePopupUI(TuttiUI<?,?> parentUI) { + super(parentUI.getHandler().getContext().getMainUI()); + TuttiUIUtil.setParentUI(this, parentUI); +} + +public void open(int minMinSize, Integer maxMinSize) { + handler.open(minMinSize, maxMinSize); +} + ]]></script> + + <MinSizePopupUIModel id="model" javaBean="new MinSizePopupUIModel()"/> + + <BeanValidator id='validator' bean='model' + uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> + <field name='minSize' component='minSizeField'/> + </BeanValidator> + + <Table id='mainPanel' fill='both'> + + <row columns='2'> + <cell> + <JLabel id='message'/> + </cell> + </row> + + <row> + <cell> + <JLabel id='minSizeLabel'/> + </cell> + <cell weightx='1'> + <NumberEditor id='minSizeField'/> + </cell> + </row> + + <row> + <cell columns='2'> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='cancelButton' onActionPerformed="handler.cancel()"/> + <JButton id='validateButton' onActionPerformed="handler.validate()"/> + </JPanel> + </cell> + </row> + + </Table> + +</JDialog> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss new file mode 100644 index 0000000..0c45e85 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss @@ -0,0 +1,59 @@ +/* + * #%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% +*/ + +#minSizeDialog { + modal: true; + title: "tutti.cpsEditor.dialog.minSize.title"; +} + +#minSizeLabel { + text: "tutti.cpsEditor.dialog.minSize.field"; + labelFor: {minSizeField}; +} + +#minSizeField { + autoPopup: {handler.getConfig().isAutoPopupNumberEditor()}; + showPopupButton: {handler.getConfig().isShowNumberEditorButton()}; + showReset: false; + useFloat: false; + useSign: false; + numberPattern: {TuttiUI.INT_6_DIGITS_PATTERN}; + bean: {model}; + property: "minSize"; + model: {model.getMinSize()}; +} + +#cancelButton { + actionIcon: cancel; + text: "tutti.common.cancel"; + toolTipText: "tutti.common.cancel"; + i18nMnemonic: "tutti.common.cancel.mnemonic"; +} + +#validateButton { + actionIcon: add; + text: "tutti.common.validate"; + toolTipText: "tutti.common.validate"; + i18nMnemonic: "tutti.common.validate.mnemonic"; + enabled: {validator.isValid()}; +} + diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIHandler.java new file mode 100644 index 0000000..ce3ed12 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIHandler.java @@ -0,0 +1,91 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; + +/* + * #%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.ui.swing.util.AbstractTuttiUIHandler; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.JComponent; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin - kmorin@codelutin.com + * @since 4.5 + */ +public class MinSizePopupUIHandler extends AbstractTuttiUIHandler<MinSizePopupUIModel, MinSizePopupUI> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(MinSizePopupUIHandler.class); + + @Override + public void afterInit(MinSizePopupUI ui) { + initNumberEditor(ui.getMinSizeField()); + initComponentToFocus(ui); + } + + @Override + public void onCloseUI() { + getUI().dispose(); + } + + @Override + public SwingValidator<MinSizePopupUIModel> getValidator() { + return getUI().getValidator(); + } + + @Override + protected JComponent getComponentToFocus() { + return getUI().getMinSizeField(); + } + + public void open(int minMinSize, Integer maxMinSize) { + getModel().setMinMinSize(minMinSize); + getModel().setMaxMinSize(maxMinSize); + + String message; + if (maxMinSize != null) { + message = t("tutti.cpsEditor.dialog.minSize.message", minMinSize, maxMinSize); + + } else { + message = t("tutti.cpsEditor.dialog.minSize.message.infinite", minMinSize); + } + getUI().getMessage().setText(message); + + getUI().pack(); + SwingUtil.center(getContext().getMainUI(), ui); + getUI().setVisible(true); + } + + public void validate() { + onCloseUI(); + } + + public void cancel() { + getModel().setMinSize(null); + onCloseUI(); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIModel.java new file mode 100644 index 0000000..63d4f49 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIModel.java @@ -0,0 +1,52 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; + +import org.jdesktop.beans.AbstractSerializableBean; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class MinSizePopupUIModel extends AbstractSerializableBean { + + public static final String PROPERTY_MIN_SIZE = "minSize"; + + public static final String PROPERTY_MIN_MIN_SIZE = "minMinSize"; + + public static final String PROPERTY_MAX_MIN_SIZE = "maxMinSize"; + + protected Integer minSize; + + protected int minMinSize; + + protected Integer maxMinSize; + + public Integer getMaxMinSize() { + return maxMinSize; + } + + public void setMaxMinSize(Integer maxMinSize) { + Object oldValue = getMaxMinSize(); + this.maxMinSize = maxMinSize; + firePropertyChange(PROPERTY_MAX_MIN_SIZE, oldValue, maxMinSize); + } + + public int getMinMinSize() { + return minMinSize; + } + + public void setMinMinSize(int minMinSize) { + Object oldValue = getMinMinSize(); + this.minMinSize = minMinSize; + firePropertyChange(PROPERTY_MIN_MIN_SIZE, oldValue, minMinSize); + } + + public Integer getMinSize() { + return minSize; + } + + public void setMinSize(Integer minSize) { + Object oldValue = getMinSize(); + this.minSize = minSize; + firePropertyChange(PROPERTY_MIN_SIZE, oldValue, minSize); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java index aa807bd..a4cc115 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java @@ -9,6 +9,7 @@ import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; /** @@ -42,12 +43,14 @@ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplin newRows.add(newRow); } - ui.getModel().getCspRows().addAll(newRows); + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = ui.getModel().getCpsRows(); + cpsRows.addAll(newRows); + cpsRows.sort(Comparator.comparing(row -> row.getSpecies().toString())); speciesComboBox.removeItem(species); - int firstRowIndex = tableModel.getRowIndex(newRows.get(0)); - int lastRowIndex = tableModel.getRowIndex(newRows.get(newRows.size() - 1)); + int firstRowIndex = cpsRows.indexOf(newRows.get(0)); + int lastRowIndex = cpsRows.indexOf(newRows.get(newRows.size() - 1)); tableModel.fireTableRowsInserted(firstRowIndex, lastRowIndex); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java new file mode 100644 index 0000000..2442005 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java @@ -0,0 +1,75 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; + +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +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; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class DeleteRowAction extends SimpleActionSupport<CalcifiedPiecesSamplingEditorUI> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(DeleteRowAction.class); + + public DeleteRowAction(CalcifiedPiecesSamplingEditorUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(CalcifiedPiecesSamplingEditorUI ui) { + + JXTable cpsTable = ui.getCpsTable(); + CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); + + int selectedRow = cpsTable.getSelectedRow(); + if (log.isInfoEnabled()) { + log.info("selected row " + selectedRow); + } + + List<CalcifiedPiecesSamplingEditorRowModel> cspRows = ui.getModel().getCpsRows(); + + CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); + + if (row.getMinSize() > 0) { + Species speciesToDelete = row.getSpecies(); + //TODO decorator quand on aura le modele persisté + String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete); + String decoratedRow = decoratedSpecies + " | "; + if (row.getMaturity() != null) { + decoratedRow += ui.getHandler().getDecorator(Boolean.class, DecoratorService.MATURITY).toString(row.getMaturity()) + " | "; + } + decoratedRow += row.getMinSize() + " | " + + ui.getHandler().getDecorator(Integer.class, DecoratorService.NULL_INFINITE).toString(row.getMaxSize()); + + int confirmDeletion = JOptionPane.showConfirmDialog(ui, + t("tutti.editCps.deleteRow.message", decoratedRow), + t("tutti.editCps.deleteRow.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + + if (confirmDeletion == JOptionPane.YES_OPTION) { + + // merge the row with the previous one + CalcifiedPiecesSamplingEditorRowModel previousRow = cspRows.get(selectedRow - 1); + previousRow.setMaxSize(row.getMaxSize()); + + cspRows.remove(row); + tableModel.fireTableRowsDeleted(selectedRow, selectedRow); + } + } + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java index e409703..697de30 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java @@ -40,7 +40,7 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp log.info("selected row " + selectedRow); } - List<CalcifiedPiecesSamplingEditorRowModel> cspRows = ui.getModel().getCspRows(); + List<CalcifiedPiecesSamplingEditorRowModel> cspRows = ui.getModel().getCpsRows(); CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java index a99d51f..e8c0179 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java @@ -3,12 +3,12 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actio import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.MinSizePopupUI; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; 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; /** @@ -27,9 +27,6 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl @Override protected void onActionPerformed(CalcifiedPiecesSamplingEditorUI ui) { - String value = JOptionPane.showInputDialog(ui, "min size"); - int minSize = Integer.parseInt(value); - JXTable cpsTable = ui.getCpsTable(); CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); @@ -38,30 +35,41 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl log.info("selected row " + selectedRow); } - List<CalcifiedPiecesSamplingEditorRowModel> cspRows = ui.getModel().getCspRows(); + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = ui.getModel().getCpsRows(); + + CalcifiedPiecesSamplingEditorRowModel row = cpsRows.get(selectedRow); + + int minMinSize = row.getMinSize() + 1; + Integer maxMinSize = row.getMaxSize() != null ? row.getMaxSize() - 1 : null; - CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); - Integer exMaxSize = row.getMaxSize(); - row.setMaxSize(minSize - 1); + MinSizePopupUI minSizePopupUI = new MinSizePopupUI(ui); + minSizePopupUI.open(minMinSize, maxMinSize); + Integer minSize = minSizePopupUI.getModel().getMinSize(); - CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(row.getSpecies(), - row.getMaturity(), - minSize, - exMaxSize); + if (minSize != null) { -// newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { -// row.setMaxSize(((int) evt.getNewValue()) - 1); -// tableModel.fireTableRowsInserted(row); -// }); + Integer exMaxSize = row.getMaxSize(); + row.setMaxSize(minSize - 1); - cspRows.add(selectedRow + 1, newRow); + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(row.getSpecies(), + row.getMaturity(), + minSize, + exMaxSize); - tableModel.fireTableRowsUpdated(selectedRow, selectedRow); - tableModel.fireTableRowsInserted(newRow); + // newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { + // row.setMaxSize(((int) evt.getNewValue()) - 1); + // tableModel.fireTableRowsInserted(row); + // }); - // select this new row -// int rowIndex = tableModel.getRowIndex(newRow); -// SwingUtil.setSelectionInterval(cpsTable, rowIndex); + cpsRows.add(selectedRow + 1, newRow); + + tableModel.fireTableRowsUpdated(selectedRow, selectedRow); + tableModel.fireTableRowsInserted(newRow); + + // select this new row + // int rowIndex = tableModel.getRowIndex(newRow); + // SwingUtil.setSelectionInterval(cpsTable, rowIndex); + } } } diff --git a/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIModel-error-validation.xml b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIModel-error-validation.xml new file mode 100644 index 0000000..6e3afb5 --- /dev/null +++ b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIModel-error-validation.xml @@ -0,0 +1,23 @@ + +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="minSize"> + <field-validator type="required" short-circuit="true"> + <message> + tutti.validator.error.cpsEditor.dialog.minSize.required + </message> + </field-validator> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ minSize >= minMinSize && (maxMinSize == null || minSize <= maxMinSize) ]]> + </param> + <message> + tutti.validator.error.cpsEditor.dialog.minSize.between + </message> + </field-validator> + </field> + +</validators> \ No newline at end of file diff --git a/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel-error-validation.xml b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel-error-validation.xml index d704589..82a5d67 100644 --- a/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel-error-validation.xml +++ b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel-error-validation.xml @@ -69,6 +69,4 @@ </field-validator> </field> - - </validators> 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 f786128..2222078 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 @@ -207,6 +207,10 @@ tutti.context.helpPage.notFound= tutti.context.service.close.error= tutti.coordinate.action.reset.latitude.tip= tutti.coordinate.action.reset.longitude.tip= +tutti.cpsEditor.dialog.minSize.field= +tutti.cpsEditor.dialog.minSize.message= +tutti.cpsEditor.dialog.minSize.message.infinite= +tutti.cpsEditor.dialog.minSize.title= tutti.createAccidentalBatch.action.cancel= tutti.createAccidentalBatch.action.cancel.mnemonic= tutti.createAccidentalBatch.action.cancel.tip= @@ -721,6 +725,8 @@ tutti.editCatchBatch.legend.marineLitter= tutti.editCatchBatch.legend.species= tutti.editCatchBatch.legend.total= tutti.editCatchBatch.svgLoading.error= +tutti.editCps.deleteRow.message= +tutti.editCps.deleteRow.title= tutti.editCps.deleteSpecies.message= tutti.editCps.deleteSpecies.title= tutti.editCps.field.maturity= @@ -2299,6 +2305,8 @@ tutti.validator.error.benthosFrequency.incoherentTotalWeights= tutti.validator.error.benthosFrequency.lengthStepCaracteristic.required= tutti.validator.error.benthosFrequency.oneRowRequired= tutti.validator.error.benthosFrequency.step.positiveValue= +tutti.validator.error.cpsEditor.dialog.minSize.between= +tutti.validator.error.cpsEditor.dialog.minSize.required= tutti.validator.error.createAccidentalBatch.species.required= tutti.validator.error.createBenthosBatch.batchWeight.noBatchSampleWeight= tutti.validator.error.createIndividualObservationBatch.lengthStepCaracteristic.required= 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 58657bb..a45267e 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 @@ -181,6 +181,10 @@ tutti.context.helpPage.notFound=La page d'aide %s n'a pas été trouvée tutti.context.service.close.error=Erreur lors de la fermeture du service %s tutti.coordinate.action.reset.latitude.tip=Réinitialiser la latitude tutti.coordinate.action.reset.longitude.tip=Réinitialiser la longitude +tutti.cpsEditor.dialog.minSize.field=Taille min. +tutti.cpsEditor.dialog.minSize.message=Saisissez la taille minimale (entre %s et %s) +tutti.cpsEditor.dialog.minSize.message.infinite=Saisissez la taille minimale (supérieure ou égale à %s) +tutti.cpsEditor.dialog.minSize.title=Taille minimale tutti.createAccidentalBatch.action.cancel=Annuler tutti.createAccidentalBatch.action.cancel.mnemonic=A tutti.createAccidentalBatch.action.cancel.tip=Annuler la création de la capture accidentelle @@ -683,8 +687,10 @@ tutti.editCatchBatch.legend.marineLitter=Macro déchets tutti.editCatchBatch.legend.species=Espèces tutti.editCatchBatch.legend.total=Capture tutti.editCatchBatch.svgLoading.error=Erreur lors du chargement du diagramme du résumé -tutti.editCps.deleteSpecies.message= -tutti.editCps.deleteSpecies.title= +tutti.editCps.deleteRow.message=Êtes-vous sûr de vouloir supprimer la ligne %s ? +tutti.editCps.deleteRow.title=Suppression de ligne +tutti.editCps.deleteSpecies.message=Êtes-vous sûr de vouloir supprimer toutes les lignes pour l'espèce %s ? +tutti.editCps.deleteSpecies.title=Suppression des lignes d'une espèce tutti.editCps.field.maturity=Maturité tutti.editCps.field.maturity.tip= tutti.editCps.field.species.tip=Espèce @@ -2128,6 +2134,8 @@ tutti.validator.error.benthosFrequency.incoherentTotalWeights=Le poids total est tutti.validator.error.benthosFrequency.lengthStepCaracteristic.required=La classe de taille est obligatoire tutti.validator.error.benthosFrequency.oneRowRequired=Au moins une classe de taille doit être observée tutti.validator.error.benthosFrequency.step.positiveValue=Le pas de la classe de taille doit être strictement positif +tutti.validator.error.cpsEditor.dialog.minSize.between= +tutti.validator.error.cpsEditor.dialog.minSize.required= tutti.validator.error.createAccidentalBatch.species.required=L'espèce est obligatoire tutti.validator.error.createIndividualObservationBatch.lengthStepCaracteristic.required=La classe de taille est obligatoire tutti.validator.error.createIndividualObservationBatch.size.required=La taille est obligatoire -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit 403709b1a67ab625e2247e52b69b4c733ca2978b Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 09:41:23 2016 +0100 fix build (refs #7930) --- .../content/protocol/calcifiedpiecessampling/MinSizePopupUI.jaxx | 2 +- .../content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jaxx index 50de932..b315296 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jaxx @@ -27,7 +27,7 @@ fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil - jaxx.runtime.swing.editor.NumberEditor + org.nuiton.jaxx.widgets.number.NumberEditor </import> <script><![CDATA[ diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss index 0c45e85..bb084a6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss @@ -33,13 +33,13 @@ #minSizeField { autoPopup: {handler.getConfig().isAutoPopupNumberEditor()}; showPopupButton: {handler.getConfig().isShowNumberEditorButton()}; - showReset: false; - useFloat: false; - useSign: false; + showReset: true; + numberType:{Integer.class}; numberPattern: {TuttiUI.INT_6_DIGITS_PATTERN}; bean: {model}; property: "minSize"; - model: {model.getMinSize()}; + numberValue: {model.getMinSize()}; + _selectOnFocus: {true}; } #cancelButton { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit e63dfae0f7256397a9b7d4c86c0471c602406f22 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 11:09:25 2016 +0100 - symbole infini au lieu de null - validation de la taille minquand on clique sur entrée refs #7930 --- .../resources/i18n/tutti-service_fr_FR.properties | 2 +- .../CalcifiedPiecesSamplingEditorUIHandler.java | 13 +++++++------ .../calcifiedpiecessampling/MinSizePopupUI.jcss | 2 ++ .../MinSizePopupUIHandler.java | 20 ++++++++++++++++++-- .../actions/ValidateMinSizeAction.java | 20 ++++++++++++++++++++ 5 files changed, 48 insertions(+), 9 deletions(-) diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 812cfd6..f8d3802 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -5,7 +5,7 @@ tutti.caracteristicType.VESSEL_USE_FEATURE=Autres caractéristiques tutti.caracteristicType.lengthStep= tutti.csv.import.error.on.field=Colonne %s \: %s tutti.csv.import.error.on.row=Des erreurs ont été détectées à la ligne %s \:\n %s -tutti.decorator.null.infinite= +tutti.decorator.null.infinite=∞ tutti.error.messages=Erreurs \:\n %s tutti.fatal.messages=Erreurs critiques \:\n %s tutti.io.mkDir.error=Erreur à la création du dossier %s diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index 4e35b5d..040d037 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -20,11 +20,9 @@ import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.event.TableModelEvent; -import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; import java.awt.Component; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -67,14 +65,17 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl // renderer to display infinite instead of null TableCellRenderer renderer = new TableCellRenderer() { - private final TableCellRenderer tableCellRenderer = new DefaultTableCellRenderer(); + private final TableCellRenderer tableCellRenderer = cpsTable.getDefaultRenderer(Integer.class); @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component result = tableCellRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - JLabel jLabel = (JLabel) result; - jLabel.setHorizontalTextPosition(SwingConstants.RIGHT); - jLabel.setText(decorate((Serializable) value, DecoratorService.NULL_INFINITE)); + if(result instanceof JLabel) { + JLabel jLabel = (JLabel)result; + String decoratedValue = getDecorator(Integer.class, DecoratorService.NULL_INFINITE).toString(value); + jLabel.setText(decoratedValue); + jLabel.setHorizontalTextPosition(SwingConstants.RIGHT); + } return result; } }; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss index bb084a6..9812a87 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUI.jcss @@ -47,6 +47,7 @@ text: "tutti.common.cancel"; toolTipText: "tutti.common.cancel"; i18nMnemonic: "tutti.common.cancel.mnemonic"; + _skipAction: true; } #validateButton { @@ -55,5 +56,6 @@ toolTipText: "tutti.common.validate"; i18nMnemonic: "tutti.common.validate.mnemonic"; enabled: {validator.isValid()}; + _skipAction: true; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIHandler.java index ce3ed12..5e2cce6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIHandler.java @@ -30,6 +30,9 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JComponent; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + import static org.nuiton.i18n.I18n.t; /** @@ -43,8 +46,21 @@ public class MinSizePopupUIHandler extends AbstractTuttiUIHandler<MinSizePopupUI @Override public void afterInit(MinSizePopupUI ui) { - initNumberEditor(ui.getMinSizeField()); - initComponentToFocus(ui); + initUI(ui); + + ui.getMinSizeField().getTextField().addKeyListener(new KeyAdapter() { + + @Override + public void keyReleased(KeyEvent e) { + super.keyReleased(e); + if (log.isInfoEnabled()) { + log.info("action key ? " + e.isActionKey() + " " + e.getKeyCode()); + } + if (e.getKeyCode() == KeyEvent.VK_ENTER) { + validate(); + } + } + }); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/ValidateMinSizeAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/ValidateMinSizeAction.java new file mode 100644 index 0000000..61da88b --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/ValidateMinSizeAction.java @@ -0,0 +1,20 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; + +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.MinSizePopupUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class ValidateMinSizeAction extends SimpleActionSupport<MinSizePopupUI> { + + public ValidateMinSizeAction(MinSizePopupUI minSizePopupUI) { + super(minSizePopupUI); + } + + @Override + protected void onActionPerformed(MinSizePopupUI minSizePopupUI) { + minSizePopupUI.getHandler().validate(); + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit d81f2e5c117cd83da99453e21f58ad26f16ce2df Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 11:27:07 2016 +0100 ajout des libellés des menus refs #7930 --- .../CalcifiedPiecesSamplingEditorUI.jcss | 10 ++++++++-- .../actions/DeleteSpeciesAction.java | 2 ++ .../main/resources/i18n/tutti-ui-swing_en_GB.properties | 6 ++++++ .../main/resources/i18n/tutti-ui-swing_fr_FR.properties | 16 +++++++++++----- .../src/main/resources/icons/action-delete2.png | Bin 0 -> 715 bytes 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss index f3362f5..8d915a6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss @@ -22,16 +22,22 @@ BeanFilterableComboBox { #splitCpsRowMenu { actionIcon: add; + text: "tutti.editCps.splitRow"; + toolTipText: "tutti.editCps.splitRow.tip"; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.SplitSpeciesAction.class}; } #deleteCpsRowMenu { - actionIcon: delete; + actionIcon: delete2; + text: "tutti.editCps.deleteRow"; + toolTipText: "tutti.editCps.deleteRow.tip"; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.DeleteRowAction.class}; } #deleteSpeciesMenu { - actionIcon: delete; + actionIcon: delete2; + text: "tutti.editCps.deleteSpecies"; + toolTipText: "tutti.editCps.deleteSpecies.tip"; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.DeleteSpeciesAction.class}; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java index 697de30..58a73aa 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java @@ -63,6 +63,8 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp cspRows.removeAll(rowsToDelete); tableModel.fireTableRowsDeleted(indexesToDelete.first(), indexesToDelete.last()); + + ui.getSpeciesComboBox().addItem(speciesToDelete); } } 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 2222078..288a20c 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 @@ -725,13 +725,19 @@ tutti.editCatchBatch.legend.marineLitter= tutti.editCatchBatch.legend.species= tutti.editCatchBatch.legend.total= tutti.editCatchBatch.svgLoading.error= +tutti.editCps.deleteRow= tutti.editCps.deleteRow.message= +tutti.editCps.deleteRow.tip= tutti.editCps.deleteRow.title= +tutti.editCps.deleteSpecies= tutti.editCps.deleteSpecies.message= +tutti.editCps.deleteSpecies.tip= tutti.editCps.deleteSpecies.title= tutti.editCps.field.maturity= tutti.editCps.field.maturity.tip= tutti.editCps.field.species.tip= +tutti.editCps.splitRow= +tutti.editCps.splitRow.tip= tutti.editCps.table.header.maturity.field= tutti.editCps.table.header.maturity.field.tip= tutti.editCps.table.header.maxSize.field= 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 a45267e..f955aa1 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 @@ -687,21 +687,27 @@ tutti.editCatchBatch.legend.marineLitter=Macro déchets tutti.editCatchBatch.legend.species=Espèces tutti.editCatchBatch.legend.total=Capture tutti.editCatchBatch.svgLoading.error=Erreur lors du chargement du diagramme du résumé +tutti.editCps.deleteRow=Supprimer la ligne tutti.editCps.deleteRow.message=Êtes-vous sûr de vouloir supprimer la ligne %s ? +tutti.editCps.deleteRow.tip=Supprimer la ligne sélectionnée et la fusionner avec la ligne précédente tutti.editCps.deleteRow.title=Suppression de ligne +tutti.editCps.deleteSpecies=Supprimer l'espèce tutti.editCps.deleteSpecies.message=Êtes-vous sûr de vouloir supprimer toutes les lignes pour l'espèce %s ? +tutti.editCps.deleteSpecies.tip=Supprimer toutes les lignes de l'espèce tutti.editCps.deleteSpecies.title=Suppression des lignes d'une espèce tutti.editCps.field.maturity=Maturité -tutti.editCps.field.maturity.tip= +tutti.editCps.field.maturity.tip=Prendre en compte la maturité pour l'espèce sélectionnée tutti.editCps.field.species.tip=Espèce +tutti.editCps.splitRow=Ajouter un intervalle +tutti.editCps.splitRow.tip=Ajouter un intervalle tutti.editCps.table.header.maturity.field=Maturité -tutti.editCps.table.header.maturity.field.tip= +tutti.editCps.table.header.maturity.field.tip=Maturité tutti.editCps.table.header.maxSize.field=Taille max -tutti.editCps.table.header.maxSize.field.tip= +tutti.editCps.table.header.maxSize.field.tip=Taille maximale incluse tutti.editCps.table.header.minSize.field=Taille min -tutti.editCps.table.header.minSize.field.tip= +tutti.editCps.table.header.minSize.field.tip=Taille minimale incluse tutti.editCps.table.header.species.field=Espèce -tutti.editCps.table.header.species.field.tip= +tutti.editCps.table.header.species.field.tip=Espèce tutti.editCruise.action.closeEditCruise=Fermer tutti.editCruise.action.closeEditCruise.mnemonic=F tutti.editCruise.action.closeEditCruise.tip=Fermer l'écran d'édition de campagne diff --git a/tutti-ui-swing/src/main/resources/icons/action-delete2.png b/tutti-ui-swing/src/main/resources/icons/action-delete2.png new file mode 100644 index 0000000..08f2493 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/icons/action-delete2.png differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit 57296e7ac5c78545905429f17fbf9cb959c3add3 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 12:06:16 2016 +0100 - ajout des autres colonnes - modification de la taille max de la ligne précédente quand on modifie la taille min refs #7930 --- .../CalcifiedPiecesSamplingEditorRowModel.java | 80 ++++++++++++++++++++-- .../CalcifiedPiecesSamplingEditorTableModel.java | 45 ++++++++++-- .../CalcifiedPiecesSamplingEditorUIHandler.java | 38 +++++++--- .../MinSizePopupUIHandler.java | 3 - .../actions/AddSpeciesAction.java | 6 +- .../actions/SplitSpeciesAction.java | 16 +++-- .../resources/i18n/tutti-ui-swing_en_GB.properties | 10 +++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 18 +++-- 8 files changed, 182 insertions(+), 34 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java index a808c7f..b19a893 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java @@ -12,19 +12,39 @@ public class CalcifiedPiecesSamplingEditorRowModel extends AbstractSerializableB public static final String PROPERTY_SPECIES = "species"; + public static final String PROPERTY_MATURITY = "maturity"; + + public static final String PROPERTY_SEX = "sex"; + public static final String PROPERTY_MIN_SIZE = "minSize"; public static final String PROPERTY_MAX_SIZE = "maxSize"; - public static final String PROPERTY_MATURITY = "maturity"; + public static final String PROPERTY_MAX_BY_LENGHT_STEP = "maxByLenghtStep"; + + public static final String PROPERTY_SAMPLING_INTERVAL = "samplingInterval"; + + public static final String PROPERTY_OPERATION_LIMITATION = "operationLimitation"; + + public static final String PROPERTY_ZONE_LIMITATION = "zoneLimitation"; protected Species species; - protected int minSize; + protected Boolean maturity; + + protected boolean sex; + + protected Integer minSize; protected Integer maxSize; - protected Boolean maturity; + protected Integer maxByLenghtStep; + + protected Integer samplingInterval; + + protected Integer operationLimitation; + + protected Integer zoneLimitation; public Integer getMaxSize() { return maxSize; @@ -36,11 +56,11 @@ public class CalcifiedPiecesSamplingEditorRowModel extends AbstractSerializableB firePropertyChange(PROPERTY_MAX_SIZE, oldValue, maxSize); } - public int getMinSize() { + public Integer getMinSize() { return minSize; } - public void setMinSize(int minSize) { + public void setMinSize(Integer minSize) { Object oldValue = getMinSize(); this.minSize = minSize; firePropertyChange(PROPERTY_MIN_SIZE, oldValue, minSize); @@ -65,4 +85,54 @@ public class CalcifiedPiecesSamplingEditorRowModel extends AbstractSerializableB this.maturity = maturity; firePropertyChange(PROPERTY_MATURITY, oldValue, maturity); } + + public Integer getOperationLimitation() { + return operationLimitation; + } + + public void setOperationLimitation(Integer operationLimitation) { + Object oldValue = getOperationLimitation(); + this.operationLimitation = operationLimitation; + firePropertyChange(PROPERTY_OPERATION_LIMITATION, oldValue, operationLimitation); + } + + public Integer getMaxByLenghtStep() { + return maxByLenghtStep; + } + + public void setMaxByLenghtStep(Integer maxByLenghtStep) { + Object oldValue = getMaxByLenghtStep(); + this.maxByLenghtStep = maxByLenghtStep; + firePropertyChange(PROPERTY_MAX_BY_LENGHT_STEP, oldValue, maxByLenghtStep); + } + + public Integer getSamplingInterval() { + return samplingInterval; + } + + public void setSamplingInterval(Integer samplingInterval) { + Object oldValue = getSamplingInterval(); + this.samplingInterval = samplingInterval; + firePropertyChange(PROPERTY_SAMPLING_INTERVAL, oldValue, samplingInterval); + } + + public boolean isSex() { + return sex; + } + + public void setSex(boolean sex) { + Object oldValue = isSex(); + this.sex = sex; + firePropertyChange(PROPERTY_SEX, oldValue, sex); + } + + public Integer getZoneLimitation() { + return zoneLimitation; + } + + public void setZoneLimitation(Integer zoneLimitation) { + Object oldValue = getZoneLimitation(); + this.zoneLimitation = zoneLimitation; + firePropertyChange(PROPERTY_ZONE_LIMITATION, oldValue, zoneLimitation); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java index 1d8ffa4..6b55c7a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java @@ -21,6 +21,16 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication n("tutti.editCps.table.header.species.field"), n("tutti.editCps.table.header.species.field.tip")); + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> MATURITY = ColumnIdentifier.newId( + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MATURITY, + n("tutti.editCps.table.header.maturity.field"), + n("tutti.editCps.table.header.maturity.field.tip")); + + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> SEX = ColumnIdentifier.newId( + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_SEX, + n("tutti.editCps.table.header.sex.field"), + n("tutti.editCps.table.header.sex.field.tip")); + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> MIN_SIZE = ColumnIdentifier.newId( CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, n("tutti.editCps.table.header.minSize.field"), @@ -31,10 +41,26 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication n("tutti.editCps.table.header.maxSize.field"), n("tutti.editCps.table.header.maxSize.field.tip")); - public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> MATURITY = ColumnIdentifier.newId( - CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MATURITY, - n("tutti.editCps.table.header.maturity.field"), - n("tutti.editCps.table.header.maturity.field.tip")); + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> MAX_BY_LENGHT_STEP = ColumnIdentifier.newId( + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MAX_BY_LENGHT_STEP, + n("tutti.editCps.table.header.maxByLengthStep.field"), + n("tutti.editCps.table.header.maxByLengthStep.field.tip")); + + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> SAMPLING_INTERVAL = ColumnIdentifier.newId( + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_SAMPLING_INTERVAL, + n("tutti.editCps.table.header.samplingInterval.field"), + n("tutti.editCps.table.header.samplingInterval.field.tip")); + + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> OPERATION_LIMITATION = ColumnIdentifier.newId( + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_OPERATION_LIMITATION, + n("tutti.editCps.table.header.operationLimitation.field"), + n("tutti.editCps.table.header.operationLimitation.field.tip")); + + public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> ZONE_LIMITATION = ColumnIdentifier.newId( + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_ZONE_LIMITATION, + n("tutti.editCps.table.header.zoneLimitation.field"), + n("tutti.editCps.table.header.zoneLimitation.field.tip")); + public CalcifiedPiecesSamplingEditorTableModel(TableColumnModelExt columnModel) { super(columnModel, false, false); @@ -47,20 +73,27 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication } public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, - Boolean maturity) { - return createNewRow(species, maturity, 0, null); + Boolean maturity, + boolean sex) { + return createNewRow(species, maturity,sex, 0, null); } public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, Boolean maturity, + boolean sex, int minSize, Integer maxSize) { CalcifiedPiecesSamplingEditorRowModel newRow = createNewRow(); newRow.setSpecies(species); newRow.setMaturity(maturity); + newRow.setSex(sex); newRow.setMinSize(minSize); newRow.setMaxSize(maxSize); + newRow.setMaxByLenghtStep(0); + newRow.setSamplingInterval(0); + newRow.setOperationLimitation(0); + newRow.setZoneLimitation(0); return newRow; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index 040d037..581412f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -8,6 +8,8 @@ import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.JAXXWidgetUtil; +import jaxx.runtime.swing.editor.cell.NumberCellEditor; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -19,9 +21,11 @@ import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.SwingConstants; +import javax.swing.border.LineBorder; import javax.swing.event.TableModelEvent; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; +import java.awt.Color; import java.awt.Component; import java.util.ArrayList; import java.util.List; @@ -55,15 +59,8 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl speciesColumn.putClientProperty(SpeciesAbleBatchRowHelper.SPECIES_DECORATOR, speciesDecorator); speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator)); - addColumnToModel(columnModel, - null, - newTableCellRender(Boolean.class, DecoratorService.MATURITY), - CalcifiedPiecesSamplingEditorTableModel.MATURITY); - - addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MIN_SIZE, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); - // renderer to display infinite instead of null - TableCellRenderer renderer = new TableCellRenderer() { + TableCellRenderer infiniteRenderer = new TableCellRenderer() { private final TableCellRenderer tableCellRenderer = cpsTable.getDefaultRenderer(Integer.class); @@ -79,7 +76,30 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl return result; } }; - addColumnToModel(columnModel, null, renderer, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE); + + // table cell number editor + NumberCellEditor editor = JAXXWidgetUtil.newNumberTableCellEditor(Integer.class, false); + editor.getNumberEditor().setSelectAllTextOnError(Boolean.valueOf(true)); + editor.getNumberEditor().getTextField().setBorder(new LineBorder(Color.GRAY, 2)); + editor.getNumberEditor().setNumberPattern(TuttiUI.INT_6_DIGITS_PATTERN); + + addColumnToModel(columnModel, + null, + newTableCellRender(Boolean.class, DecoratorService.MATURITY), + CalcifiedPiecesSamplingEditorTableModel.MATURITY); + + addBooleanColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.SEX, cpsTable); + + addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MIN_SIZE, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); + + addColumnToModel(columnModel, null, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE); + + addColumnToModel(columnModel, editor, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.MAX_BY_LENGHT_STEP); + + addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.SAMPLING_INTERVAL, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); + + addColumnToModel(columnModel, editor, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.OPERATION_LIMITATION); + addColumnToModel(columnModel, editor, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.ZONE_LIMITATION); final CalcifiedPiecesSamplingEditorTableModel tableModel = diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIHandler.java index 5e2cce6..05d4976 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/MinSizePopupUIHandler.java @@ -53,9 +53,6 @@ public class MinSizePopupUIHandler extends AbstractTuttiUIHandler<MinSizePopupUI @Override public void keyReleased(KeyEvent e) { super.keyReleased(e); - if (log.isInfoEnabled()) { - log.info("action key ? " + e.isActionKey() + " " + e.getKeyCode()); - } if (e.getKeyCode() == KeyEvent.VK_ENTER) { validate(); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java index a4cc115..57b0181 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java @@ -32,14 +32,14 @@ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplin List<CalcifiedPiecesSamplingEditorRowModel> newRows = new ArrayList<>(); if (ui.getMaturityCheckBox().isSelected()) { - CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, true); + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, true, true); newRows.add(newRow); - newRow = tableModel.createNewRow(species, false); + newRow = tableModel.createNewRow(species, false, true); newRows.add(newRow); } else { - CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, null); + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, null, true); newRows.add(newRow); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java index e8c0179..869508c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java @@ -53,13 +53,21 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(row.getSpecies(), row.getMaturity(), + row.isSex(), minSize, exMaxSize); - // newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { - // row.setMaxSize(((int) evt.getNewValue()) - 1); - // tableModel.fireTableRowsInserted(row); - // }); + newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { + + int newRowIndex = cpsRows.indexOf(evt.getSource()); + int previousRowIndex = newRowIndex - 1; + + CalcifiedPiecesSamplingEditorRowModel previousRow = cpsRows.get(previousRowIndex); + previousRow.setMaxSize(((int) evt.getNewValue()) - 1); + + tableModel.fireTableRowsUpdated(previousRowIndex, newRowIndex); + + }); cpsRows.add(selectedRow + 1, newRow); 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 288a20c..c3b2fa6 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 @@ -740,12 +740,22 @@ tutti.editCps.splitRow= tutti.editCps.splitRow.tip= tutti.editCps.table.header.maturity.field= tutti.editCps.table.header.maturity.field.tip= +tutti.editCps.table.header.maxByLengthStep.field= +tutti.editCps.table.header.maxByLengthStep.field.tip= tutti.editCps.table.header.maxSize.field= tutti.editCps.table.header.maxSize.field.tip= tutti.editCps.table.header.minSize.field= tutti.editCps.table.header.minSize.field.tip= +tutti.editCps.table.header.operationLimitation.field= +tutti.editCps.table.header.operationLimitation.field.tip= +tutti.editCps.table.header.samplingInterval.field= +tutti.editCps.table.header.samplingInterval.field.tip= +tutti.editCps.table.header.sex.field= +tutti.editCps.table.header.sex.field.tip= tutti.editCps.table.header.species.field= tutti.editCps.table.header.species.field.tip= +tutti.editCps.table.header.zoneLimitation.field= +tutti.editCps.table.header.zoneLimitation.field.tip= tutti.editCruise.action.closeEditCruise= tutti.editCruise.action.closeEditCruise.mnemonic= tutti.editCruise.action.closeEditCruise.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 f955aa1..a25c689 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 @@ -702,12 +702,22 @@ tutti.editCps.splitRow=Ajouter un intervalle tutti.editCps.splitRow.tip=Ajouter un intervalle tutti.editCps.table.header.maturity.field=Maturité tutti.editCps.table.header.maturity.field.tip=Maturité -tutti.editCps.table.header.maxSize.field=Taille max -tutti.editCps.table.header.maxSize.field.tip=Taille maximale incluse -tutti.editCps.table.header.minSize.field=Taille min -tutti.editCps.table.header.minSize.field.tip=Taille minimale incluse +tutti.editCps.table.header.maxByLengthStep.field=Max / classe de taille +tutti.editCps.table.header.maxByLengthStep.field.tip= +tutti.editCps.table.header.maxSize.field=Taille max (mm) +tutti.editCps.table.header.maxSize.field.tip=Taille maximale incluse, en millimètres +tutti.editCps.table.header.minSize.field=Taille min (mm) +tutti.editCps.table.header.minSize.field.tip=Taille minimale incluse, en millimètres +tutti.editCps.table.header.operationLimitation.field=Limite / trait +tutti.editCps.table.header.operationLimitation.field.tip=Nombre limite de prélèvements par trait +tutti.editCps.table.header.samplingInterval.field=Prendre 1/n +tutti.editCps.table.header.samplingInterval.field.tip=Intervalle entre deux prélèvements +tutti.editCps.table.header.sex.field=Sexe +tutti.editCps.table.header.sex.field.tip=Prise en compte du sexe tutti.editCps.table.header.species.field=Espèce tutti.editCps.table.header.species.field.tip=Espèce +tutti.editCps.table.header.zoneLimitation.field=Limite / zone +tutti.editCps.table.header.zoneLimitation.field.tip=Nombre limite de prélèvements par zone tutti.editCruise.action.closeEditCruise=Fermer tutti.editCruise.action.closeEditCruise.mnemonic=F tutti.editCruise.action.closeEditCruise.tip=Fermer l'écran d'édition de campagne -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit fb4a47a01596573b8c1753a4d687b411b116542c Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 13:48:12 2016 +0100 test de la nouvelle valeur de min size refs #7930 --- .../CalcifiedPiecesSamplingEditorTableModel.java | 13 ++++++++++++- .../CalcifiedPiecesSamplingEditorUIHandler.java | 5 +++-- .../actions/SplitSpeciesAction.java | 15 +++++++++++---- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java index 6b55c7a..18ea6e5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java @@ -81,7 +81,7 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, Boolean maturity, boolean sex, - int minSize, + Integer minSize, Integer maxSize) { CalcifiedPiecesSamplingEditorRowModel newRow = createNewRow(); @@ -95,6 +95,17 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication newRow.setOperationLimitation(0); newRow.setZoneLimitation(0); + newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { + if (evt.getNewValue() == null) { + newRow.setMinSize(0); + } + }); + newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_SAMPLING_INTERVAL, evt -> { + if (evt.getNewValue() == null) { + newRow.setSamplingInterval(0); + } + }); + return newRow; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index 581412f..46372df 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -187,9 +187,10 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl if (rowSelected) { CalcifiedPiecesSamplingEditorRowModel selectedRow = getModel().getCpsRows().get(modelRowIndex); + Integer minSize = selectedRow.getMinSize(); splitEnabled = selectedRow.getMaxSize() == null - || selectedRow.getMaxSize() - selectedRow.getMinSize() > 1; - rowDeletable = selectedRow.getMinSize() > 0; + || selectedRow.getMaxSize() - minSize > 1; + rowDeletable = minSize > 0; } getUI().getSplitCpsRowMenu().setEnabled(splitEnabled); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java index 869508c..1e2a7af 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java @@ -59,13 +59,20 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { - int newRowIndex = cpsRows.indexOf(evt.getSource()); + int newRowIndex = cpsRows.indexOf(newRow); int previousRowIndex = newRowIndex - 1; - CalcifiedPiecesSamplingEditorRowModel previousRow = cpsRows.get(previousRowIndex); - previousRow.setMaxSize(((int) evt.getNewValue()) - 1); - tableModel.fireTableRowsUpdated(previousRowIndex, newRowIndex); + Integer newValue = (Integer) evt.getNewValue(); + // si la nouvelle valeur sort de l'intervalle des deux lignes + if (newValue != null && (newValue <= previousRow.getMinSize() + || newRow.getMaxSize() != null && newValue >= newRow.getMaxSize())) { + newRow.setMinSize((Integer) evt.getOldValue()); + + } else { + previousRow.setMaxSize(newValue - 1); + tableModel.fireTableRowsUpdated(previousRowIndex, newRowIndex); + } }); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit 3aaa5b75d7ed0c26d7f2ce8728a3161231504c26 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 17:12:46 2016 +0100 - modification de la prise en compte du sexe pour toutes les lignes d'une meme espece - correction du tri des espèces refs #7930 --- .../CalcifiedPiecesSamplingEditorTableModel.java | 11 - .../CalcifiedPiecesSamplingEditorUIHandler.java | 225 ++++++++++++++++----- .../actions/AddSpeciesAction.java | 16 +- .../actions/DeleteRowAction.java | 3 - .../actions/DeleteSpeciesAction.java | 3 - .../actions/SplitSpeciesAction.java | 49 ++--- .../resources/i18n/tutti-ui-swing_en_GB.properties | 4 + 7 files changed, 205 insertions(+), 106 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java index 18ea6e5..48cee24 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java @@ -95,17 +95,6 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication newRow.setOperationLimitation(0); newRow.setZoneLimitation(0); - newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { - if (evt.getNewValue() == null) { - newRow.setMinSize(0); - } - }); - newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_SAMPLING_INTERVAL, evt -> { - if (evt.getNewValue() == null) { - newRow.setSamplingInterval(0); - } - }); - return newRow; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index 46372df..881f9b3 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -1,9 +1,11 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.TuttiDecorator; import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUI; @@ -19,16 +21,21 @@ import org.jdesktop.swingx.table.TableColumnExt; import javax.swing.JComponent; import javax.swing.JLabel; -import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.border.LineBorder; +import javax.swing.event.CellEditorListener; +import javax.swing.event.ChangeEvent; import javax.swing.event.TableModelEvent; import javax.swing.table.JTableHeader; +import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import java.awt.Color; import java.awt.Component; import java.util.ArrayList; import java.util.List; +import java.util.Optional; +import java.util.TreeSet; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -41,6 +48,14 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl /** Logger. */ private static final Log log = LogFactory.getLog(CalcifiedPiecesSamplingEditorUIHandler.class); + protected Caracteristic sexCaracteristic; + + @Override + public void beforeInit(CalcifiedPiecesSamplingEditorUI ui) { + super.beforeInit(ui); + sexCaracteristic = getPersistenceService().getSexCaracteristic(); + } + @Override public void afterInit(CalcifiedPiecesSamplingEditorUI calcifiedPiecesSamplingEditorUI) { initUI(calcifiedPiecesSamplingEditorUI); @@ -49,58 +64,7 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl JXTable cpsTable = ui.getCpsTable(); - DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); - - TableColumnExt speciesColumn = addColumnToModel(columnModel, - null, - newTableCellRender(Species.class), - CalcifiedPiecesSamplingEditorTableModel.SPECIES); - DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator(); - speciesColumn.putClientProperty(SpeciesAbleBatchRowHelper.SPECIES_DECORATOR, speciesDecorator); - speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator)); - - // renderer to display infinite instead of null - TableCellRenderer infiniteRenderer = new TableCellRenderer() { - - private final TableCellRenderer tableCellRenderer = cpsTable.getDefaultRenderer(Integer.class); - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - Component result = tableCellRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - if(result instanceof JLabel) { - JLabel jLabel = (JLabel)result; - String decoratedValue = getDecorator(Integer.class, DecoratorService.NULL_INFINITE).toString(value); - jLabel.setText(decoratedValue); - jLabel.setHorizontalTextPosition(SwingConstants.RIGHT); - } - return result; - } - }; - - // table cell number editor - NumberCellEditor editor = JAXXWidgetUtil.newNumberTableCellEditor(Integer.class, false); - editor.getNumberEditor().setSelectAllTextOnError(Boolean.valueOf(true)); - editor.getNumberEditor().getTextField().setBorder(new LineBorder(Color.GRAY, 2)); - editor.getNumberEditor().setNumberPattern(TuttiUI.INT_6_DIGITS_PATTERN); - - addColumnToModel(columnModel, - null, - newTableCellRender(Boolean.class, DecoratorService.MATURITY), - CalcifiedPiecesSamplingEditorTableModel.MATURITY); - - addBooleanColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.SEX, cpsTable); - - addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MIN_SIZE, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); - - addColumnToModel(columnModel, null, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE); - - addColumnToModel(columnModel, editor, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.MAX_BY_LENGHT_STEP); - - addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.SAMPLING_INTERVAL, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); - - addColumnToModel(columnModel, editor, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.OPERATION_LIMITATION); - addColumnToModel(columnModel, editor, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.ZONE_LIMITATION); - + DefaultTableColumnModelExt columnModel = initTableColumnModel(); final CalcifiedPiecesSamplingEditorTableModel tableModel = new CalcifiedPiecesSamplingEditorTableModel(columnModel); @@ -165,7 +129,7 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl SpeciesAbleBatchRowHelper.installSpeciesColumnComparatorPopup( cpsTable, - speciesColumn, + columnModel.getColumnExt(0), null, t("tutti.species.refTaxCode.tip"), t("tutti.species.name.tip") @@ -177,6 +141,97 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl tableModel.setRows(rows); } + protected DefaultTableColumnModelExt initTableColumnModel() { + + NumberCellEditor numberCellEditor = JAXXWidgetUtil.newNumberTableCellEditor(Integer.class, false); + numberCellEditor.getNumberEditor().setSelectAllTextOnError(Boolean.valueOf(true)); + numberCellEditor.getNumberEditor().getTextField().setBorder(new LineBorder(Color.GRAY, 2)); + numberCellEditor.getNumberEditor().setNumberPattern(TuttiUI.INT_6_DIGITS_PATTERN); + + // renderer to display the infinite symbol instead of null + TableCellRenderer infiniteRenderer = (table, value, isSelected, hasFocus, row, column) -> { + + Component result = table.getDefaultRenderer(Integer.class) + .getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + if (result instanceof JLabel) { + JLabel jLabel = (JLabel) result; + String decoratedValue = getDecorator(Integer.class, DecoratorService.NULL_INFINITE).toString(value); + jLabel.setText(decoratedValue); + jLabel.setHorizontalTextPosition(SwingConstants.RIGHT); + } + return result; + }; + + // sex cell listener to update the sex value of other rows with the same species + CellEditorListener sexEditorListener = new CellEditorListener() { + + @Override + public void editingStopped(ChangeEvent e) { + + int selectedRow = getUI().getCpsTable().getSelectedRow(); + + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = getModel().getCpsRows(); + CalcifiedPiecesSamplingEditorRowModel row = cpsRows.get(selectedRow); + + List<CalcifiedPiecesSamplingEditorRowModel> rowsToChangeSex = + cpsRows.stream().filter(r -> r.getSpecies().equals(row.getSpecies())).collect(Collectors.toList()); + + rowsToChangeSex.forEach(r -> r.setSex(row.isSex())); + + TreeSet<Integer> indexesToUpdate = + new TreeSet<>(rowsToChangeSex.stream().map(cpsRows::indexOf).collect(Collectors.toSet())); + + CalcifiedPiecesSamplingEditorTableModel tableModel = + (CalcifiedPiecesSamplingEditorTableModel) getUI().getCpsTable().getModel(); + tableModel.fireTableRowsUpdated(indexesToUpdate.first(), indexesToUpdate.last()); + } + + @Override + public void editingCanceled(ChangeEvent e) { + // do nothing + } + }; + + JXTable cpsTable = ui.getCpsTable(); + + DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); + + TableColumnExt speciesColumn = addColumnToModel(columnModel, + null, + newTableCellRender(Species.class), + CalcifiedPiecesSamplingEditorTableModel.SPECIES); + DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator(); + speciesColumn.putClientProperty(SpeciesAbleBatchRowHelper.SPECIES_DECORATOR, speciesDecorator); + speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator)); + + // renderer to display infinite instead of null + + addColumnToModel(columnModel, + null, + newTableCellRender(Boolean.class, DecoratorService.MATURITY), + CalcifiedPiecesSamplingEditorTableModel.MATURITY); + + TableCellEditor defaultBooleanEditor = cpsTable.getDefaultEditor(Boolean.class); + defaultBooleanEditor.addCellEditorListener(sexEditorListener); + addColumnToModel(columnModel, defaultBooleanEditor, + cpsTable.getDefaultRenderer(Boolean.class), + CalcifiedPiecesSamplingEditorTableModel.SEX); + + addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MIN_SIZE, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); + + addColumnToModel(columnModel, null, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE); + + addColumnToModel(columnModel, numberCellEditor, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.MAX_BY_LENGHT_STEP); + + addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.SAMPLING_INTERVAL, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); + + addColumnToModel(columnModel, numberCellEditor, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.OPERATION_LIMITATION); + + addColumnToModel(columnModel, numberCellEditor, infiniteRenderer, CalcifiedPiecesSamplingEditorTableModel.ZONE_LIMITATION); + + return columnModel; + } + @Override protected void beforeOpenPopup(int modelRowIndex, int modelColumnIndex) { super.beforeOpenPopup(modelRowIndex, modelColumnIndex); @@ -186,8 +241,11 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl boolean rowDeletable = rowSelected; if (rowSelected) { + CalcifiedPiecesSamplingEditorRowModel selectedRow = getModel().getCpsRows().get(modelRowIndex); + Integer minSize = selectedRow.getMinSize(); + splitEnabled = selectedRow.getMaxSize() == null || selectedRow.getMaxSize() - minSize > 1; rowDeletable = minSize > 0; @@ -215,4 +273,63 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl public SwingValidator<EditProtocolUIModel> getValidator() { return null; } + + + public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, + Boolean maturity) { + + Optional<EditProtocolSpeciesRowModel> speciesProtocolRow = getModel().getSpeciesRow() + .stream() + .filter(sp -> species.equals(sp.getSpecies())) + .findFirst(); + + boolean sex = speciesProtocolRow.isPresent() + && speciesProtocolRow.get().containsMandatorySampleCategoryId(sexCaracteristic.getIdAsInt()); + + return createNewRow(species, maturity, sex, 0, null); + } + + public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, + Boolean maturity, + boolean sex, + Integer minSize, + Integer maxSize) { + + JXTable cpsTable = getUI().getCpsTable(); + CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = getModel().getCpsRows(); + + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, maturity, sex, minSize, maxSize); + + newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { + + int newRowIndex = cpsRows.indexOf(newRow); + int previousRowIndex = newRowIndex - 1; + CalcifiedPiecesSamplingEditorRowModel previousRow = cpsRows.get(previousRowIndex); + + Integer newValue = (Integer) evt.getNewValue(); + + if (newValue == null) { + newRow.setMinSize(0); + + } else if (newValue <= previousRow.getMinSize() + || newRow.getMaxSize() != null && newValue >= newRow.getMaxSize()) { + // si la nouvelle valeur sort de l'intervalle des deux lignes + newRow.setMinSize((Integer) evt.getOldValue()); + + } else { + previousRow.setMaxSize(newValue - 1); + tableModel.fireTableRowsUpdated(previousRowIndex, newRowIndex); + } + + }); + + newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_SAMPLING_INTERVAL, evt -> { + if (evt.getNewValue() == null) { + newRow.setSamplingInterval(0); + } + }); + + return newRow; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java index 57b0181..52e493c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java @@ -1,6 +1,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; @@ -18,6 +19,8 @@ import java.util.List; */ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplingEditorUI> { + protected final DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator(); + public AddSpeciesAction(CalcifiedPiecesSamplingEditorUI ui) { super(ui); } @@ -27,33 +30,32 @@ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplin BeanFilterableComboBox<Species> speciesComboBox = ui.getSpeciesComboBox(); Species species = (Species) speciesComboBox.getSelectedItem(); - CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) ui.getCpsTable().getModel(); - List<CalcifiedPiecesSamplingEditorRowModel> newRows = new ArrayList<>(); if (ui.getMaturityCheckBox().isSelected()) { - CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, true, true); + CalcifiedPiecesSamplingEditorRowModel newRow = ui.getHandler().createNewRow(species, true); newRows.add(newRow); - newRow = tableModel.createNewRow(species, false, true); + newRow = ui.getHandler().createNewRow(species, false); newRows.add(newRow); } else { - CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, null, true); + CalcifiedPiecesSamplingEditorRowModel newRow = ui.getHandler().createNewRow(species, null); newRows.add(newRow); } List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = ui.getModel().getCpsRows(); cpsRows.addAll(newRows); - cpsRows.sort(Comparator.comparing(row -> row.getSpecies().toString())); + cpsRows.sort(Comparator.comparing(row -> speciesDecorator.toString(row.getSpecies()))); speciesComboBox.removeItem(species); int firstRowIndex = cpsRows.indexOf(newRows.get(0)); int lastRowIndex = cpsRows.indexOf(newRows.get(newRows.size() - 1)); + CalcifiedPiecesSamplingEditorTableModel tableModel = + (CalcifiedPiecesSamplingEditorTableModel) ui.getCpsTable().getModel(); tableModel.fireTableRowsInserted(firstRowIndex, lastRowIndex); - // select this new row SwingUtil.setSelectionInterval(ui.getCpsTable(), firstRowIndex); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java index 2442005..b058b5e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java @@ -35,9 +35,6 @@ public class DeleteRowAction extends SimpleActionSupport<CalcifiedPiecesSampling CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); int selectedRow = cpsTable.getSelectedRow(); - if (log.isInfoEnabled()) { - log.info("selected row " + selectedRow); - } List<CalcifiedPiecesSamplingEditorRowModel> cspRows = ui.getModel().getCpsRows(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java index 58a73aa..07911f1 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java @@ -36,9 +36,6 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); int selectedRow = cpsTable.getSelectedRow(); - if (log.isInfoEnabled()) { - log.info("selected row " + selectedRow); - } List<CalcifiedPiecesSamplingEditorRowModel> cspRows = ui.getModel().getCpsRows(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java index 1e2a7af..ba04fd6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java @@ -1,5 +1,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; @@ -31,14 +33,25 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); int selectedRow = cpsTable.getSelectedRow(); - if (log.isInfoEnabled()) { - log.info("selected row " + selectedRow); - } List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = ui.getModel().getCpsRows(); CalcifiedPiecesSamplingEditorRowModel row = cpsRows.get(selectedRow); + if (log.isInfoEnabled()) { + Species speciesToDelete = row.getSpecies(); + String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete); + String decoratedRow = decoratedSpecies + " | "; + if (row.getMaturity() != null) { + decoratedRow += ui.getHandler().getDecorator(Boolean.class, DecoratorService.MATURITY).toString(row.getMaturity()) + " | "; + } + + decoratedRow += row.getMinSize() + " | " + + ui.getHandler().getDecorator(Integer.class, DecoratorService.NULL_INFINITE).toString(row.getMaxSize()); + log.info("selected row " + selectedRow + " " + decoratedRow); + log.info("rows : " + cpsRows); + } + int minMinSize = row.getMinSize() + 1; Integer maxMinSize = row.getMaxSize() != null ? row.getMaxSize() - 1 : null; @@ -51,31 +64,11 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl Integer exMaxSize = row.getMaxSize(); row.setMaxSize(minSize - 1); - CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(row.getSpecies(), - row.getMaturity(), - row.isSex(), - minSize, - exMaxSize); - - newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { - - int newRowIndex = cpsRows.indexOf(newRow); - int previousRowIndex = newRowIndex - 1; - CalcifiedPiecesSamplingEditorRowModel previousRow = cpsRows.get(previousRowIndex); - - Integer newValue = (Integer) evt.getNewValue(); - // si la nouvelle valeur sort de l'intervalle des deux lignes - if (newValue != null && (newValue <= previousRow.getMinSize() - || newRow.getMaxSize() != null && newValue >= newRow.getMaxSize())) { - newRow.setMinSize((Integer) evt.getOldValue()); - - } else { - previousRow.setMaxSize(newValue - 1); - tableModel.fireTableRowsUpdated(previousRowIndex, newRowIndex); - } - - }); - + CalcifiedPiecesSamplingEditorRowModel newRow = ui.getHandler().createNewRow(row.getSpecies(), + row.getMaturity(), + row.isSex(), + minSize, + exMaxSize); cpsRows.add(selectedRow + 1, newRow); tableModel.fireTableRowsUpdated(selectedRow, selectedRow); 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 c3b2fa6..c9de0b2 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 @@ -725,6 +725,10 @@ tutti.editCatchBatch.legend.marineLitter= tutti.editCatchBatch.legend.species= tutti.editCatchBatch.legend.total= tutti.editCatchBatch.svgLoading.error= +tutti.editCps.changeSex.noSex= +tutti.editCps.changeSex.noSex.tip= +tutti.editCps.changeSex.sex= +tutti.editCps.changeSex.sex.tip= tutti.editCps.deleteRow= tutti.editCps.deleteRow.message= tutti.editCps.deleteRow.tip= -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit c9daf3947a656e7d92034640571439b81c77d26c Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 11 21:19:22 2016 +0100 - persistence - chargement des lignes existantes - chargement de la combo des especes avec les especes du protocole (especes et benthos) refs #7930 --- .../entities/protocol/TuttiProtocols.java | 2 + .../src/main/xmi/tutti-persistence.zargo | Bin 61039 -> 62059 bytes .../protocol/EditProtocolSpeciesRowModel.java | 67 ++++++++ .../content/protocol/EditProtocolUIHandler.java | 31 +++- .../content/protocol/EditProtocolUIModel.java | 2 + .../protocol/actions/AddBenthosProtocolAction.java | 1 + .../protocol/actions/AddSpeciesProtocolAction.java | 3 +- .../actions/RemoveBenthosProtocolAction.java | 5 + .../actions/RemoveSpeciesProtocolAction.java | 9 +- .../protocol/actions/SaveProtocolAction.java | 25 ++- .../CalcifiedPiecesSamplingEditorRowModel.java | 171 +++++++++++++++------ .../CalcifiedPiecesSamplingEditorTableModel.java | 22 +-- .../CalcifiedPiecesSamplingEditorUIHandler.java | 159 ++++++++++--------- .../actions/AddSpeciesAction.java | 16 +- .../actions/DeleteRowAction.java | 7 +- .../actions/DeleteSpeciesAction.java | 11 +- .../actions/SplitSpeciesAction.java | 18 +-- .../actions/ValidateMinSizeAction.java | 20 --- .../protocol/zones/tree/ZonesTreeModel.java | 1 - 19 files changed, 370 insertions(+), 200 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 48193dd..9168b1f 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 @@ -374,6 +374,8 @@ public class TuttiProtocols extends AbstractTuttiProtocols { YamlConfig result = new YamlConfig(); result.setClassTag(SpeciesProtocol.class.getSimpleName(), SpeciesProtocols.typeOfSpeciesProtocol()); + result.setClassTag(CalcifiedPiecesSamplingDefinition.class.getSimpleName(), + CalcifiedPiecesSamplingDefinitions.typeOfCalcifiedPiecesSamplingDefinition()); result.setClassTag(CaracteristicMappingRow.class.getSimpleName(), CaracteristicMappingRows.typeOfCaracteristicMappingRow()); result.setClassTag(Zone.class.getSimpleName(), Zones.typeOfZone()); diff --git a/tutti-persistence/src/main/xmi/tutti-persistence.zargo b/tutti-persistence/src/main/xmi/tutti-persistence.zargo index ec0a03b..71c1af7 100644 Binary files a/tutti-persistence/src/main/xmi/tutti-persistence.zargo and b/tutti-persistence/src/main/xmi/tutti-persistence.zargo differ diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java index 505d2a3..5850ae5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java @@ -22,6 +22,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol; * #L% */ +import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition; import fr.ifremer.tutti.persistence.entities.protocol.Rtp; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocols; @@ -32,6 +33,7 @@ import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import java.util.Collection; +import java.util.LinkedList; import java.util.List; /** @@ -76,6 +78,8 @@ public class EditProtocolSpeciesRowModel extends AbstractTuttiBeanUIModel<Specie protected Rtp rtpUndefined; + Collection<CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinition; + protected static final Binder<SpeciesProtocol, EditProtocolSpeciesRowModel> fromBeanBinder = BinderFactory.newBinder(SpeciesProtocol.class, EditProtocolSpeciesRowModel.class); @@ -305,6 +309,69 @@ public class EditProtocolSpeciesRowModel extends AbstractTuttiBeanUIModel<Specie } @Override + public CalcifiedPiecesSamplingDefinition getCalcifiedPiecesSamplingDefinition(int index) { + CalcifiedPiecesSamplingDefinition o = getChild(calcifiedPiecesSamplingDefinition, index); + return o; + } + + @Override + public boolean isCalcifiedPiecesSamplingDefinitionEmpty() { + return calcifiedPiecesSamplingDefinition == null || calcifiedPiecesSamplingDefinition.isEmpty(); + } + + @Override + public int sizeCalcifiedPiecesSamplingDefinition() { + return calcifiedPiecesSamplingDefinition == null ? 0 : calcifiedPiecesSamplingDefinition.size(); + } + + @Override + public void addCalcifiedPiecesSamplingDefinition(CalcifiedPiecesSamplingDefinition calcifiedPiecesSamplingDefinition) { + getCalcifiedPiecesSamplingDefinition().add(calcifiedPiecesSamplingDefinition); + } + + @Override + public void addAllCalcifiedPiecesSamplingDefinition(Collection<CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinition) { + getCalcifiedPiecesSamplingDefinition().addAll(calcifiedPiecesSamplingDefinition); + } + + @Override + public boolean removeCalcifiedPiecesSamplingDefinition(CalcifiedPiecesSamplingDefinition calcifiedPiecesSamplingDefinition) { + boolean removed = getCalcifiedPiecesSamplingDefinition().remove(calcifiedPiecesSamplingDefinition); + return removed; + } + + @Override + public boolean removeAllCalcifiedPiecesSamplingDefinition(Collection<CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinition) { + boolean removed = getCalcifiedPiecesSamplingDefinition().removeAll(calcifiedPiecesSamplingDefinition); + return removed; + } + + @Override + public boolean containsCalcifiedPiecesSamplingDefinition(CalcifiedPiecesSamplingDefinition calcifiedPiecesSamplingDefinition) { + boolean contains = getCalcifiedPiecesSamplingDefinition().contains(calcifiedPiecesSamplingDefinition); + return contains; + } + + @Override + public boolean containsAllCalcifiedPiecesSamplingDefinition(Collection<CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinition) { + boolean contains = getCalcifiedPiecesSamplingDefinition().containsAll(calcifiedPiecesSamplingDefinition); + return contains; + } + + @Override + public Collection<CalcifiedPiecesSamplingDefinition> getCalcifiedPiecesSamplingDefinition() { + if (calcifiedPiecesSamplingDefinition == null) { + calcifiedPiecesSamplingDefinition = new LinkedList<>(); + } + return calcifiedPiecesSamplingDefinition; + } + + @Override + public void setCalcifiedPiecesSamplingDefinition(Collection<CalcifiedPiecesSamplingDefinition> calcifiedPiecesSamplingDefinition) { + this.calcifiedPiecesSamplingDefinition = calcifiedPiecesSamplingDefinition; + } + + @Override public boolean withRtpMale() { return rtpMale != null; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java index 4957bf5..b2888e0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java @@ -35,6 +35,7 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.FishingOperations; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; +import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; @@ -54,6 +55,7 @@ import fr.ifremer.tutti.ui.swing.content.home.actions.CloneProtocolAction; import fr.ifremer.tutti.ui.swing.content.home.actions.EditProtocolAction; import fr.ifremer.tutti.ui.swing.content.home.actions.ImportProtocolAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellEditor; import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellRenderer; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; @@ -327,12 +329,15 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI incrementsMessage("Préparation des interfaces graphiques"); - // build species and benthos rows + getModel().setCpsRows(Lists.newArrayList()); + + // build protocolSpecies and benthos rows if (protocol == null) { caracteristicMappingRows = Lists.newArrayList(); operationFieldMappingRows = Lists.newArrayList(); speciesRows = Lists.newArrayList(); benthosRows = Lists.newArrayList(); + } else { caracteristicMappingRows = toProtocolCaracteristicRows(protocol.getCaracteristicMapping()); @@ -341,9 +346,14 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI speciesRows = toSpeciesRows(protocol.getSpecies()); benthosRows = toSpeciesRows(protocol.getBenthos()); + // set a copy of the list to refresh the cps table + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = new ArrayList<>(getModel().getCpsRows()); + cpsRows.sort(CalcifiedPiecesSamplingEditorRowModel.COMPARATOR); + getModel().setCpsRows(cpsRows); + if (log.isDebugEnabled()) { log.debug("Will edit protocol with " + - speciesRows.size() + " species and " + + speciesRows.size() + " protocolSpecies and " + benthosRows.size() + " benthos declared."); } } @@ -359,7 +369,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI this.ui.getCaracteristicMappingComboBox().reset(); { - // create species table model + // create protocolSpecies table model JXTable table = getSpeciesTable(); @@ -660,7 +670,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI Set<TuttiLocation> usedLocations = new LinkedHashSet<>(); - getModel().getZone().stream().forEach(zone -> { + getModel().getZone().forEach(zone -> { Collection<Strata> zoneStratas = zone.getStrata(); Set<TuttiLocation> locations = zoneStratas.stream().map(Strata::getLocation).collect(Collectors.toSet()); @@ -718,6 +728,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI Set<Species> speciesSet = Sets.newHashSet(); List<EditProtocolSpeciesRowModel> result = Lists.newArrayList(); + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = Lists.newArrayList(); if (CollectionUtils.isNotEmpty(speciesProtocols)) { for (SpeciesProtocol speciesProtocol : speciesProtocols) { Integer taxonId = speciesProtocol.getSpeciesReferenceTaxonId(); @@ -758,6 +769,18 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI // make sure to get a clean copy of the list row.setMandatorySampleCategoryId(Lists.newArrayList(speciesProtocol.getMandatorySampleCategoryId())); result.add(row); + + // add all the cps rows + Collection<CalcifiedPiecesSamplingDefinition> cpsDefs = speciesProtocol.getCalcifiedPiecesSamplingDefinition(); + if (cpsDefs != null) { + cpsDefs.forEach(def -> { + CalcifiedPiecesSamplingEditorRowModel cpsRow = new CalcifiedPiecesSamplingEditorRowModel(); + cpsRow.fromEntity(def); + cpsRow.setProtocolSpecies(row); + getModel().getCpsRows().add(cpsRow); + }); + } + } // remove once for all in comboboxes diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index bf2be98..eab2c3e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -987,6 +987,8 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, firePropertyChanged(TuttiProtocol.PROPERTY_USE_CALCIFIED_PIECE_SAMPLING, oldValue, useCalcifiedPieceSampling); } + + public int numberOfRows(String column) { int result = 0; MutableInt mutableInt = numberOfRowsByColumn.get(column); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddBenthosProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddBenthosProtocolAction.java index 45bd0ae..0679e29 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddBenthosProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddBenthosProtocolAction.java @@ -89,6 +89,7 @@ public class AddBenthosProtocolAction extends LongActionSupport<EditProtocolUIMo // update comboboxes getUI().getBenthosComboBox().removeItem(species); getUI().getSpeciesComboBox().removeItem(species); + getUI().getCalcifiedPiecesSamplingEditorUI().getSpeciesComboBox().addItem(species); // fire row was inserted in table model EditProtocolSpeciesTableModel tableModel = getHandler().getBenthosTableModel(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddSpeciesProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddSpeciesProtocolAction.java index 8730b24..0c73a65 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddSpeciesProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/AddSpeciesProtocolAction.java @@ -38,7 +38,7 @@ import java.util.Collection; import static org.nuiton.i18n.I18n.t; /** - * To add a new species protocol. + * To add a new protocolSpecies protocol. * * @author Tony Chemit - chemit@codelutin.com * @since 1.0 @@ -87,6 +87,7 @@ public class AddSpeciesProtocolAction extends LongActionSupport<EditProtocolUIMo // update comboboxes getUI().getBenthosComboBox().removeItem(species); getUI().getSpeciesComboBox().removeItem(species); + getUI().getCalcifiedPiecesSamplingEditorUI().getSpeciesComboBox().addItem(species); // fire row was inserted in table model EditProtocolSpeciesTableModel tableModel = getHandler().getSpeciesTableModel(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java index 9b847aa..39079f8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java @@ -27,6 +27,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesTableModel; @@ -123,6 +124,10 @@ public class RemoveBenthosProtocolAction extends LongActionSupport<EditProtocolU // remove all rows from model getModel().getBenthosRow().removeAll(removedRows); + // remove the protocolSpecies from the cps table or combobox + CalcifiedPiecesSamplingEditorUI cspEditor = getUI().getCalcifiedPiecesSamplingEditorUI(); + //TODO remove the protocolSpecies from the cps table or combobox + // fire table data changed handler.getBenthosTableModel().fireTableDataChanged(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java index ab9eb27..4630e1a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java @@ -27,6 +27,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesTableModel; @@ -43,7 +44,7 @@ import java.util.Set; import static org.nuiton.i18n.I18n.t; /** - * To remove all the selected species rows from protocol. + * To remove all the selected protocolSpecies rows from protocol. * * @author Tony Chemit - chemit@codelutin.com * @since 1.0 @@ -51,7 +52,7 @@ import static org.nuiton.i18n.I18n.t; public class RemoveSpeciesProtocolAction extends LongActionSupport<EditProtocolUIModel, EditProtocolUI, EditProtocolUIHandler> { /** - * Set of removed species. + * Set of removed protocolSpecies. * * @since 2.8 */ @@ -120,6 +121,10 @@ public class RemoveSpeciesProtocolAction extends LongActionSupport<EditProtocolU // remove all rows from model getModel().getSpeciesRow().removeAll(removedRows); + // remove the protocolSpecies from the cps table or combobox + CalcifiedPiecesSamplingEditorUI cspEditor = getUI().getCalcifiedPiecesSamplingEditorUI(); + //TODO remove the protocolSpecies from the cps table or combobox + // fire table data changed handler.getSpeciesTableModel().fireTableDataChanged(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java index 70c9409..f6b0448 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java @@ -23,6 +23,8 @@ package fr.ifremer.tutti.ui.swing.content.protocol.actions; */ import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; @@ -36,6 +38,7 @@ import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -44,6 +47,7 @@ import org.apache.commons.logging.LogFactory; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -75,7 +79,7 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E TuttiProtocol bean = model.toEntity(); - Collection<EditProtocolCaracteristicsRowModel> protocolCaracteristicMappingRows = getUI().getModel().getCaracteristicMappingRows(); + Collection<EditProtocolCaracteristicsRowModel> protocolCaracteristicMappingRows = model.getCaracteristicMappingRows(); List<CaracteristicMappingRow> caracteristicMappingRows = new ArrayList<CaracteristicMappingRow>(); for (EditProtocolCaracteristicsRowModel row : protocolCaracteristicMappingRows) { if (row.isValid()) { @@ -84,7 +88,7 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E } bean.setCaracteristicMapping(caracteristicMappingRows); - List<EditProtocolOperationFieldsRowModel> protocolOperationFieldMappingRows = getUI().getModel().getOperationFieldMappingRows(); + List<EditProtocolOperationFieldsRowModel> protocolOperationFieldMappingRows = model.getOperationFieldMappingRows(); List<OperationFieldMappingRow> operationFieldMappingRows = new ArrayList<OperationFieldMappingRow>(); for (EditProtocolOperationFieldsRowModel row : protocolOperationFieldMappingRows) { if (StringUtils.isNotBlank(row.getField()) && StringUtils.isNotBlank(row.getImportColumn()) @@ -94,6 +98,10 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E } bean.setOperationFieldMapping(operationFieldMappingRows); + // map the cps rows by species row + Multimap<EditProtocolSpeciesRowModel, CalcifiedPiecesSamplingEditorRowModel> cpsRowsBySpecies = + Multimaps.index(model.getCpsRows(), input -> input.getProtocolSpecies()); + // get the species protocols from the table List<SpeciesProtocol> speciesProtocols = Lists.newArrayList(); @@ -101,6 +109,12 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E if (row.isValid()) { SpeciesProtocol protocol = row.toEntity(); speciesProtocols.add(protocol); + + //TODO check validity + Collection<CalcifiedPiecesSamplingEditorRowModel> cpsRows = cpsRowsBySpecies.get(row); + protocol.setCalcifiedPiecesSamplingDefinition(cpsRows.stream() + .map(CalcifiedPiecesSamplingEditorRowModel::toEntity) + .collect(Collectors.toList())); } } bean.setSpecies(speciesProtocols); @@ -111,12 +125,17 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E if (row.isValid()) { SpeciesProtocol protocol = row.toEntity(); benthosProtocols.add(protocol); + + //TODO check validity + Collection<CalcifiedPiecesSamplingEditorRowModel> cpsRows = cpsRowsBySpecies.get(row); + protocol.setCalcifiedPiecesSamplingDefinition(cpsRows.stream() + .map(CalcifiedPiecesSamplingEditorRowModel::toEntity) + .collect(Collectors.toList())); } } bean.setBenthos(benthosProtocols); - if (log.isInfoEnabled()) { log.info("bean zones " + bean.getZone()); log.info("bean zones " + bean.getZone()); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java index b19a893..c537d60 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorRowModel.java @@ -1,138 +1,211 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; +import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition; +import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinitions; import fr.ifremer.tutti.persistence.entities.referential.Species; -import org.jdesktop.beans.AbstractSerializableBean; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import java.util.Comparator; /** * @author Kevin Morin (Code Lutin) * @since 4.5 */ -public class CalcifiedPiecesSamplingEditorRowModel extends AbstractSerializableBean { - - - public static final String PROPERTY_SPECIES = "species"; - - public static final String PROPERTY_MATURITY = "maturity"; +public class CalcifiedPiecesSamplingEditorRowModel extends AbstractTuttiBeanUIModel<CalcifiedPiecesSamplingDefinition, + CalcifiedPiecesSamplingEditorRowModel> + implements CalcifiedPiecesSamplingDefinition { - public static final String PROPERTY_SEX = "sex"; + public static final String PROPERTY_PROTOCOL_SPECIES = "protocolSpecies"; - public static final String PROPERTY_MIN_SIZE = "minSize"; + public static final Comparator<CalcifiedPiecesSamplingEditorRowModel> COMPARATOR = + new Comparator<CalcifiedPiecesSamplingEditorRowModel>() { - public static final String PROPERTY_MAX_SIZE = "maxSize"; + private final DecoratorService.SpeciesDecoratorWithSurveyCode speciesDecorator = + new DecoratorService.SpeciesDecoratorWithSurveyCode(); - public static final String PROPERTY_MAX_BY_LENGHT_STEP = "maxByLenghtStep"; + @Override + public int compare(CalcifiedPiecesSamplingEditorRowModel o1, CalcifiedPiecesSamplingEditorRowModel o2) { - public static final String PROPERTY_SAMPLING_INTERVAL = "samplingInterval"; + boolean o1null = o1 == null || o1.getProtocolSpecies() == null; + boolean o2null = o2 == null || o2.getProtocolSpecies() == null; - public static final String PROPERTY_OPERATION_LIMITATION = "operationLimitation"; + if (o1null) { + return o2null ? 0 : -1; + } + if (o2null) { + return 1; + } - public static final String PROPERTY_ZONE_LIMITATION = "zoneLimitation"; + Species species1 = o1.getProtocolSpecies().getSpecies(); + Species species2 = o2.getProtocolSpecies().getSpecies(); + if (!(species1.equals(species2))) { + return speciesDecorator.toString(species1).compareTo(speciesDecorator.toString(species2)); + } - protected Species species; + if (o1.getMaturity() == null && o2.getMaturity() != null) { + return -1; - protected Boolean maturity; + } else if (o1.getMaturity() != null && o2.getMaturity() == null) { + return 1; - protected boolean sex; + } else if (o1.getMaturity() != null && !o1.getMaturity().equals(o2.getMaturity())) { + return o1.getMaturity() ? -1 : 1; + } - protected Integer minSize; + return o1.getMinSize() - o2.getMinSize(); + } + }; - protected Integer maxSize; + /** + * Delegate edit object. + * + * @since 4.5 + */ + protected final CalcifiedPiecesSamplingDefinition editObject = + CalcifiedPiecesSamplingDefinitions.newCalcifiedPiecesSamplingDefinition(); - protected Integer maxByLenghtStep; + protected EditProtocolSpeciesRowModel protocolSpecies; - protected Integer samplingInterval; + protected static final Binder<CalcifiedPiecesSamplingDefinition, CalcifiedPiecesSamplingEditorRowModel> fromBeanBinder = + BinderFactory.newBinder(CalcifiedPiecesSamplingDefinition.class, + CalcifiedPiecesSamplingEditorRowModel.class); - protected Integer operationLimitation; + protected static final Binder<CalcifiedPiecesSamplingEditorRowModel, CalcifiedPiecesSamplingDefinition> toBeanBinder = + BinderFactory.newBinder(CalcifiedPiecesSamplingEditorRowModel.class, + CalcifiedPiecesSamplingDefinition.class); - protected Integer zoneLimitation; + public CalcifiedPiecesSamplingEditorRowModel() { + super(fromBeanBinder, toBeanBinder); + } + @Override public Integer getMaxSize() { - return maxSize; + return editObject.getMaxSize(); } + @Override public void setMaxSize(Integer maxSize) { Object oldValue = getMaxSize(); - this.maxSize = maxSize; + editObject.setMaxSize(maxSize); firePropertyChange(PROPERTY_MAX_SIZE, oldValue, maxSize); } - public Integer getMinSize() { - return minSize; + @Override + public int getMinSize() { + return editObject.getMinSize(); } - public void setMinSize(Integer minSize) { + @Override + public void setMinSize(int minSize) { Object oldValue = getMinSize(); - this.minSize = minSize; + editObject.setMinSize(minSize); firePropertyChange(PROPERTY_MIN_SIZE, oldValue, minSize); } - public Species getSpecies() { - return species; + public void setMinSize(Integer minSize) { + if (minSize != null) { + setMinSize(minSize.intValue()); + } else { + firePropertyChange(PROPERTY_MIN_SIZE, getMinSize(), null); + } } - public void setSpecies(Species species) { - Object oldValue = getSpecies(); - this.species = species; - firePropertyChange(PROPERTY_SPECIES, oldValue, species); + public EditProtocolSpeciesRowModel getProtocolSpecies() { + return protocolSpecies; } + public void setProtocolSpecies(EditProtocolSpeciesRowModel protocolSpecies) { + Object oldValue = getProtocolSpecies(); + this.protocolSpecies = protocolSpecies; + firePropertyChange(PROPERTY_PROTOCOL_SPECIES, oldValue, protocolSpecies); + } + + @Override public Boolean getMaturity() { - return maturity; + return editObject.getMaturity(); } + @Override public void setMaturity(Boolean maturity) { Object oldValue = getMaturity(); - this.maturity = maturity; + editObject.setMaturity(maturity); firePropertyChange(PROPERTY_MATURITY, oldValue, maturity); } + @Override public Integer getOperationLimitation() { - return operationLimitation; + return editObject.getOperationLimitation(); } + @Override public void setOperationLimitation(Integer operationLimitation) { Object oldValue = getOperationLimitation(); - this.operationLimitation = operationLimitation; + editObject.setOperationLimitation(operationLimitation); firePropertyChange(PROPERTY_OPERATION_LIMITATION, oldValue, operationLimitation); } + @Override public Integer getMaxByLenghtStep() { - return maxByLenghtStep; + return editObject.getMaxByLenghtStep(); } + @Override public void setMaxByLenghtStep(Integer maxByLenghtStep) { Object oldValue = getMaxByLenghtStep(); - this.maxByLenghtStep = maxByLenghtStep; + editObject.setMaxByLenghtStep(maxByLenghtStep); firePropertyChange(PROPERTY_MAX_BY_LENGHT_STEP, oldValue, maxByLenghtStep); } - public Integer getSamplingInterval() { - return samplingInterval; + @Override + public int getSamplingInterval() { + return editObject.getSamplingInterval(); } - public void setSamplingInterval(Integer samplingInterval) { + @Override + public void setSamplingInterval(int samplingInterval) { Object oldValue = getSamplingInterval(); - this.samplingInterval = samplingInterval; + editObject.setSamplingInterval(samplingInterval); firePropertyChange(PROPERTY_SAMPLING_INTERVAL, oldValue, samplingInterval); } + public void setSamplingInterval(Integer samplingInterval) { + if (samplingInterval != null) { + setMinSize(samplingInterval.intValue()); + } else { + firePropertyChange(PROPERTY_SAMPLING_INTERVAL, getSamplingInterval(), null); + } + } + + @Override public boolean isSex() { - return sex; + return editObject.isSex(); } + @Override public void setSex(boolean sex) { Object oldValue = isSex(); - this.sex = sex; + editObject.setSex(sex); firePropertyChange(PROPERTY_SEX, oldValue, sex); } + @Override public Integer getZoneLimitation() { - return zoneLimitation; + return editObject.getZoneLimitation(); } + @Override public void setZoneLimitation(Integer zoneLimitation) { Object oldValue = getZoneLimitation(); - this.zoneLimitation = zoneLimitation; + editObject.setZoneLimitation(zoneLimitation); firePropertyChange(PROPERTY_ZONE_LIMITATION, oldValue, zoneLimitation); } + + @Override + protected CalcifiedPiecesSamplingDefinition newEntity() { + return CalcifiedPiecesSamplingDefinitions.newCalcifiedPiecesSamplingDefinition(); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java index 48cee24..815a024 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java @@ -1,7 +1,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import org.jdesktop.swingx.table.TableColumnModelExt; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; @@ -17,7 +17,7 @@ import static org.nuiton.i18n.I18n.n; public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplicationTableModel<CalcifiedPiecesSamplingEditorRowModel> { public static final ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> SPECIES = ColumnIdentifier.newId( - CalcifiedPiecesSamplingEditorRowModel.PROPERTY_SPECIES, + CalcifiedPiecesSamplingEditorRowModel.PROPERTY_PROTOCOL_SPECIES, n("tutti.editCps.table.header.species.field"), n("tutti.editCps.table.header.species.field.tip")); @@ -72,20 +72,20 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication return new CalcifiedPiecesSamplingEditorRowModel(); } - public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, + public CalcifiedPiecesSamplingEditorRowModel createNewRow(EditProtocolSpeciesRowModel species, Boolean maturity, boolean sex) { return createNewRow(species, maturity,sex, 0, null); } - public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, + public CalcifiedPiecesSamplingEditorRowModel createNewRow(EditProtocolSpeciesRowModel species, Boolean maturity, boolean sex, Integer minSize, Integer maxSize) { CalcifiedPiecesSamplingEditorRowModel newRow = createNewRow(); - newRow.setSpecies(species); + newRow.setProtocolSpecies(species); newRow.setMaturity(maturity); newRow.setSex(sex); newRow.setMinSize(minSize); @@ -99,16 +99,16 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication } /** - * Return the list of used species in the table (used to fill the - * comparator cache for species sort) + * Return the list of used protocolSpecies in the table (used to fill the + * comparator cache for protocolSpecies sort) * - * @return the list of used species in the table. + * @return the list of used protocolSpecies in the table. * @since 2.8 */ - public List<Species> getSpeciesList() { - List<Species> result = Lists.newArrayList(); + public List<EditProtocolSpeciesRowModel> getSpeciesList() { + List<EditProtocolSpeciesRowModel> result = Lists.newArrayList(); for (CalcifiedPiecesSamplingEditorRowModel row : rows) { - result.add(row.getSpecies()); + result.add(row.getProtocolSpecies()); } return result; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index 881f9b3..615e7ac 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -3,8 +3,6 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.TuttiDecorator; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; @@ -17,7 +15,6 @@ 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.jdesktop.swingx.table.TableColumnExt; import javax.swing.JComponent; import javax.swing.JLabel; @@ -25,7 +22,6 @@ import javax.swing.SwingConstants; import javax.swing.border.LineBorder; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; -import javax.swing.event.TableModelEvent; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; @@ -37,8 +33,6 @@ import java.util.Optional; import java.util.TreeSet; import java.util.stream.Collectors; -import static org.nuiton.i18n.I18n.t; - /** * @author Kevin Morin (Code Lutin) * @since 4.5 @@ -60,7 +54,31 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl public void afterInit(CalcifiedPiecesSamplingEditorUI calcifiedPiecesSamplingEditorUI) { initUI(calcifiedPiecesSamplingEditorUI); - initBeanFilterableComboBox(ui.getSpeciesComboBox(), getModel().getAllSpecies(), null); + initBeanFilterableComboBox(ui.getSpeciesComboBox(), new ArrayList<>(), null, DecoratorService.WITH_SURVEY_CODE); + + getModel().addPropertyChangeListener(evt -> { + if (EditProtocolUIModel.PROPERTY_BENTHOS_ROW.equals(evt.getPropertyName()) + ||EditProtocolUIModel.PROPERTY_SPECIES_ROW.equals(evt.getPropertyName())) { + + List<Species> protocolSpecies = new ArrayList<>(); + + List<EditProtocolSpeciesRowModel> speciesRows = getModel().getSpeciesRow(); + if (speciesRows != null) { + protocolSpecies.addAll(speciesRows.stream() + .map(EditProtocolSpeciesRowModel::getSpecies) + .collect(Collectors.toList())); + } + + speciesRows = getModel().getBenthosRow(); + if (speciesRows != null) { + protocolSpecies.addAll(speciesRows.stream() + .map(EditProtocolSpeciesRowModel::getSpecies) + .collect(Collectors.toList())); + } + + ui.getSpeciesComboBox().setData(protocolSpecies); + } + }); JXTable cpsTable = ui.getCpsTable(); @@ -76,69 +94,15 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl // by default do not authorize to change column orders tableHeader.setReorderingAllowed(false); -// addHighlighters(cpsTable); - // always scroll to selected row SwingUtil.scrollToTableSelection(cpsTable); - // add selection listener -// cpsTable.getSelectionModel().addListSelectionListener(selectionListener); - - // when model change, then rebuild the species comparator + set model as modified - tableModel.addTableModelListener(e -> { - - getModel().setModify(true); - - int type = e.getType(); - if (type == TableModelEvent.DELETE || - type == TableModelEvent.INSERT || - e.getLastRow() == Integer.MAX_VALUE) { - - // get species column - TableColumnExt tableColumn = - (TableColumnExt) cpsTable.getColumns().get(0); - - // get column comparator - TuttiDecorator.TuttiDecoratorComparator<Species> comparator = - (TuttiDecorator.TuttiDecoratorComparator<Species>) - tableColumn.getComparator(); - - // get column comparator - TuttiDecorator<Species> decorator = - SpeciesAbleBatchRowHelper.getSpeciesColumnDecorator(tableColumn); - - boolean comparatorNull = comparator == null; - if (comparatorNull) { - - // first time coming here, add the comparator - comparator = decorator.getCurrentComparator(); - } - - // init comparator with model species list - comparator.init(decorator, tableModel.getSpeciesList()); - - if (comparatorNull) { - - // affect it to colum - tableColumn.setComparator(comparator); - } - } - }); - - // create popup to change species decorator - - SpeciesAbleBatchRowHelper.installSpeciesColumnComparatorPopup( - cpsTable, - columnModel.getColumnExt(0), - null, - t("tutti.species.refTaxCode.tip"), - t("tutti.species.name.tip") - ); - // at the very end, set rows to model - List<CalcifiedPiecesSamplingEditorRowModel> rows = new ArrayList<>(); - getModel().setCpsRows(rows); - tableModel.setRows(rows); + getModel().addPropertyChangeListener(EditProtocolUIModel.PROPERTY_CSP_ROWS, + evt -> { + tableModel.setRows(getModel().getCpsRows()); + tableModel.fireTableDataChanged(); + }); } protected DefaultTableColumnModelExt initTableColumnModel() { @@ -162,7 +126,7 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl return result; }; - // sex cell listener to update the sex value of other rows with the same species + // sex cell listener to update the sex value of other rows with the same protocolSpecies CellEditorListener sexEditorListener = new CellEditorListener() { @Override @@ -174,7 +138,7 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl CalcifiedPiecesSamplingEditorRowModel row = cpsRows.get(selectedRow); List<CalcifiedPiecesSamplingEditorRowModel> rowsToChangeSex = - cpsRows.stream().filter(r -> r.getSpecies().equals(row.getSpecies())).collect(Collectors.toList()); + cpsRows.stream().filter(r -> r.getProtocolSpecies().equals(row.getProtocolSpecies())).collect(Collectors.toList()); rowsToChangeSex.forEach(r -> r.setSex(row.isSex())); @@ -196,13 +160,22 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); - TableColumnExt speciesColumn = addColumnToModel(columnModel, - null, - newTableCellRender(Species.class), - CalcifiedPiecesSamplingEditorTableModel.SPECIES); - DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator(); - speciesColumn.putClientProperty(SpeciesAbleBatchRowHelper.SPECIES_DECORATOR, speciesDecorator); - speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator)); + // renderer to display the species + TableCellRenderer speciesRenderer = (table, value, isSelected, hasFocus, row, column) -> { + + Component result = table.getDefaultRenderer(String.class) + .getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + if (result instanceof JLabel) { + JLabel jLabel = (JLabel) result; + EditProtocolSpeciesRowModel species = (EditProtocolSpeciesRowModel) value; + jLabel.setText(decorate(species.getSpecies(), DecoratorService.WITH_SURVEY_CODE)); + } + return result; + }; + addColumnToModel(columnModel, + null, + speciesRenderer, + CalcifiedPiecesSamplingEditorTableModel.SPECIES); // renderer to display infinite instead of null @@ -278,15 +251,11 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, Boolean maturity) { - Optional<EditProtocolSpeciesRowModel> speciesProtocolRow = getModel().getSpeciesRow() - .stream() - .filter(sp -> species.equals(sp.getSpecies())) - .findFirst(); - + Optional<EditProtocolSpeciesRowModel> speciesProtocolRow = getEditProtocolSpeciesRowModel(species); boolean sex = speciesProtocolRow.isPresent() && speciesProtocolRow.get().containsMandatorySampleCategoryId(sexCaracteristic.getIdAsInt()); - return createNewRow(species, maturity, sex, 0, null); + return createNewRow(speciesProtocolRow.orElse(null), maturity, sex, 0, null); } public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, @@ -295,12 +264,24 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl Integer minSize, Integer maxSize) { + Optional<EditProtocolSpeciesRowModel> speciesProtocolRow = getEditProtocolSpeciesRowModel(species); + + return createNewRow(speciesProtocolRow.orElse(null), maturity, sex, minSize, maxSize); + } + + public CalcifiedPiecesSamplingEditorRowModel createNewRow(EditProtocolSpeciesRowModel species, + Boolean maturity, + boolean sex, + Integer minSize, + Integer maxSize) { + JXTable cpsTable = getUI().getCpsTable(); CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = getModel().getCpsRows(); CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, maturity, sex, minSize, maxSize); + //FIXME il faudrait ajouter ces listener sur les lignes qu'on charge au chargement du protocole newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { int newRowIndex = cpsRows.indexOf(newRow); @@ -332,4 +313,20 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl return newRow; } + + protected Optional<EditProtocolSpeciesRowModel> getEditProtocolSpeciesRowModel(Species species) { + + Optional<EditProtocolSpeciesRowModel> speciesProtocolRow = getModel().getSpeciesRow() + .stream() + .filter(sp -> species.equals(sp.getSpecies())) + .findFirst(); + + if (!speciesProtocolRow.isPresent()) { + speciesProtocolRow = getModel().getBenthosRow() + .stream() + .filter(sp -> species.equals(sp.getSpecies())) + .findFirst(); + } + return speciesProtocolRow; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java index 52e493c..3178960 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java @@ -1,16 +1,16 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import java.util.ArrayList; -import java.util.Comparator; import java.util.List; /** @@ -19,7 +19,8 @@ import java.util.List; */ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplingEditorUI> { - protected final DecoratorService.SpeciesDecorator speciesDecorator = new DecoratorService.SpeciesDecorator(); + /** Logger. */ + private static final Log log = LogFactory.getLog(AddSpeciesAction.class); public AddSpeciesAction(CalcifiedPiecesSamplingEditorUI ui) { super(ui); @@ -46,7 +47,7 @@ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplin List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = ui.getModel().getCpsRows(); cpsRows.addAll(newRows); - cpsRows.sort(Comparator.comparing(row -> speciesDecorator.toString(row.getSpecies()))); + cpsRows.sort(CalcifiedPiecesSamplingEditorRowModel.COMPARATOR); speciesComboBox.removeItem(species); @@ -55,6 +56,13 @@ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplin CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) ui.getCpsTable().getModel(); + + if (log.isInfoEnabled()) { + log.info(cpsRows); + log.info(tableModel.getRows()); + log.info("insert in " +firstRowIndex + " " + lastRowIndex ); + } + tableModel.fireTableRowsInserted(firstRowIndex, lastRowIndex); // select this new row SwingUtil.setSelectionInterval(ui.getCpsTable(), firstRowIndex); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java index b058b5e..adcd7fb 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteRowAction.java @@ -2,6 +2,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actio import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; @@ -41,9 +42,9 @@ public class DeleteRowAction extends SimpleActionSupport<CalcifiedPiecesSampling CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); if (row.getMinSize() > 0) { - Species speciesToDelete = row.getSpecies(); - //TODO decorator quand on aura le modele persisté - String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete); + EditProtocolSpeciesRowModel speciesToDelete = row.getProtocolSpecies(); + + String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete.getSpecies()); String decoratedRow = decoratedSpecies + " | "; if (row.getMaturity() != null) { decoratedRow += ui.getHandler().getDecorator(Boolean.class, DecoratorService.MATURITY).toString(row.getMaturity()) + " | "; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java index 07911f1..0fcb29b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java @@ -1,6 +1,8 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; @@ -41,8 +43,9 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); - Species speciesToDelete = row.getSpecies(); - String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete); + EditProtocolSpeciesRowModel speciesToDelete = row.getProtocolSpecies(); + String decoratedSpecies = ui.getHandler().getDecorator(Species.class, DecoratorService.WITH_SURVEY_CODE) + .toString(speciesToDelete.getSpecies()); int confirmDeletion = JOptionPane.showConfirmDialog(ui, t("tutti.editCps.deleteSpecies.message", decoratedSpecies), t("tutti.editCps.deleteSpecies.title"), @@ -52,7 +55,7 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp if (confirmDeletion == JOptionPane.YES_OPTION) { List<CalcifiedPiecesSamplingEditorRowModel> rowsToDelete = - cspRows.stream().filter(r -> r.getSpecies().equals(speciesToDelete)).collect(Collectors.toList()); + cspRows.stream().filter(r -> r.getProtocolSpecies().equals(speciesToDelete)).collect(Collectors.toList()); TreeSet<Integer> indexesToDelete = new TreeSet<>(rowsToDelete.stream().map(cspRows::indexOf).collect(Collectors.toSet())); @@ -61,7 +64,7 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp tableModel.fireTableRowsDeleted(indexesToDelete.first(), indexesToDelete.last()); - ui.getSpeciesComboBox().addItem(speciesToDelete); + ui.getSpeciesComboBox().addItem(speciesToDelete.getSpecies()); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java index ba04fd6..adcc93b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java @@ -1,7 +1,5 @@ package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; @@ -38,20 +36,6 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl CalcifiedPiecesSamplingEditorRowModel row = cpsRows.get(selectedRow); - if (log.isInfoEnabled()) { - Species speciesToDelete = row.getSpecies(); - String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete); - String decoratedRow = decoratedSpecies + " | "; - if (row.getMaturity() != null) { - decoratedRow += ui.getHandler().getDecorator(Boolean.class, DecoratorService.MATURITY).toString(row.getMaturity()) + " | "; - } - - decoratedRow += row.getMinSize() + " | " - + ui.getHandler().getDecorator(Integer.class, DecoratorService.NULL_INFINITE).toString(row.getMaxSize()); - log.info("selected row " + selectedRow + " " + decoratedRow); - log.info("rows : " + cpsRows); - } - int minMinSize = row.getMinSize() + 1; Integer maxMinSize = row.getMaxSize() != null ? row.getMaxSize() - 1 : null; @@ -64,7 +48,7 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl Integer exMaxSize = row.getMaxSize(); row.setMaxSize(minSize - 1); - CalcifiedPiecesSamplingEditorRowModel newRow = ui.getHandler().createNewRow(row.getSpecies(), + CalcifiedPiecesSamplingEditorRowModel newRow = ui.getHandler().createNewRow(row.getProtocolSpecies(), row.getMaturity(), row.isSex(), minSize, diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/ValidateMinSizeAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/ValidateMinSizeAction.java deleted file mode 100644 index 61da88b..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/ValidateMinSizeAction.java +++ /dev/null @@ -1,20 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; - -import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.MinSizePopupUI; -import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; - -/** - * @author Kevin Morin (Code Lutin) - * @since x.x - */ -public class ValidateMinSizeAction extends SimpleActionSupport<MinSizePopupUI> { - - public ValidateMinSizeAction(MinSizePopupUI minSizePopupUI) { - super(minSizePopupUI); - } - - @Override - protected void onActionPerformed(MinSizePopupUI minSizePopupUI) { - minSizePopupUI.getHandler().validate(); - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java index 2b88ddb..b57242f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java @@ -28,7 +28,6 @@ public class ZonesTreeModel extends AbstractZoneEditorTreeModel { public ZonesTreeModel() { super(t("tutti.zoneEditor.zones.root.label")); - log.info(t("tutti.test", "test1", "test2", 1.0d)); } public void removeZones(Collection<ZoneUIModel> zonesToRemove) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit 273bcf877f1f975ab258651e066286bac695b557 Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 15 12:17:19 2016 +0100 - ajout des listener à l'initialisation de la liste des lignes - ajout de la modif du model quand on modifie une ligne refs #7930 --- .../content/protocol/EditProtocolUIModel.java | 2 +- .../CalcifiedPiecesSamplingEditorUIHandler.java | 84 ++++++++++++++-------- 2 files changed, 54 insertions(+), 32 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index eab2c3e..71a86d3 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -37,10 +37,10 @@ import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.SubStrataUIModel; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.ZoneUIModel; -import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import org.apache.commons.lang3.mutable.MutableInt; import org.apache.commons.logging.Log; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index 615e7ac..b54737d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -27,7 +27,10 @@ import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import java.awt.Color; import java.awt.Component; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.TreeSet; @@ -44,6 +47,48 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl protected Caracteristic sexCaracteristic; + protected final PropertyChangeListener rowChangeListener = new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + getModel().setModify(true); + + String propertyName = evt.getPropertyName(); + CalcifiedPiecesSamplingEditorRowModel row = (CalcifiedPiecesSamplingEditorRowModel) evt.getSource(); + + if (CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE.equals(propertyName)) { + + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = getModel().getCpsRows(); + + int newRowIndex = cpsRows.indexOf(row); + int previousRowIndex = newRowIndex - 1; + CalcifiedPiecesSamplingEditorRowModel previousRow = cpsRows.get(previousRowIndex); + + Integer newValue = (Integer) evt.getNewValue(); + + if (newValue == null) { + row.setMinSize(0); + + } else if (newValue <= previousRow.getMinSize() + || row.getMaxSize() != null && newValue >= row.getMaxSize()) { + // si la nouvelle valeur sort de l'intervalle des deux lignes + row.setMinSize((Integer) evt.getOldValue()); + + } else { + previousRow.setMaxSize(newValue - 1); + CalcifiedPiecesSamplingEditorTableModel model = + (CalcifiedPiecesSamplingEditorTableModel) getUI().getCpsTable().getModel(); + model.fireTableRowsUpdated(previousRowIndex, newRowIndex); + } + + } else if (CalcifiedPiecesSamplingEditorRowModel.PROPERTY_SAMPLING_INTERVAL.equals(propertyName)) { + if (evt.getNewValue() == null) { + row.setSamplingInterval(0); + } + } + } + }; + @Override public void beforeInit(CalcifiedPiecesSamplingEditorUI ui) { super.beforeInit(ui); @@ -100,6 +145,12 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl // at the very end, set rows to model getModel().addPropertyChangeListener(EditProtocolUIModel.PROPERTY_CSP_ROWS, evt -> { + Collection<CalcifiedPiecesSamplingEditorRowModel> rows = + (Collection<CalcifiedPiecesSamplingEditorRowModel>) evt.getNewValue(); + for (CalcifiedPiecesSamplingEditorRowModel row : rows) { + row.removePropertyChangeListener(rowChangeListener); + row.addPropertyChangeListener(rowChangeListener); + } tableModel.setRows(getModel().getCpsRows()); tableModel.fireTableDataChanged(); }); @@ -277,39 +328,10 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl JXTable cpsTable = getUI().getCpsTable(); CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); - List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = getModel().getCpsRows(); CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, maturity, sex, minSize, maxSize); - - //FIXME il faudrait ajouter ces listener sur les lignes qu'on charge au chargement du protocole - newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { - - int newRowIndex = cpsRows.indexOf(newRow); - int previousRowIndex = newRowIndex - 1; - CalcifiedPiecesSamplingEditorRowModel previousRow = cpsRows.get(previousRowIndex); - - Integer newValue = (Integer) evt.getNewValue(); - - if (newValue == null) { - newRow.setMinSize(0); - - } else if (newValue <= previousRow.getMinSize() - || newRow.getMaxSize() != null && newValue >= newRow.getMaxSize()) { - // si la nouvelle valeur sort de l'intervalle des deux lignes - newRow.setMinSize((Integer) evt.getOldValue()); - - } else { - previousRow.setMaxSize(newValue - 1); - tableModel.fireTableRowsUpdated(previousRowIndex, newRowIndex); - } - - }); - - newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_SAMPLING_INTERVAL, evt -> { - if (evt.getNewValue() == null) { - newRow.setSamplingInterval(0); - } - }); + newRow.removePropertyChangeListener(rowChangeListener); + newRow.addPropertyChangeListener(rowChangeListener); return newRow; } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit 4bffb235dae5902cffd7bf4df9a589fae6c88bcd Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 15 15:21:52 2016 +0100 suppression des lignes des expèces supprimés depuis les onglets especes et benthos fixes #7930 --- .../content/protocol/EditProtocolUIModel.java | 4 +- .../actions/RemoveBenthosProtocolAction.java | 43 +++++++++++++++++++-- .../actions/RemoveSpeciesProtocolAction.java | 44 ++++++++++++++++++++-- .../CalcifiedPiecesSamplingEditorUIHandler.java | 2 +- .../actions/DeleteSpeciesAction.java | 10 ++--- .../resources/i18n/tutti-ui-swing_en_GB.properties | 4 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 ++ 7 files changed, 95 insertions(+), 16 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index 71a86d3..caaef25 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -93,7 +93,7 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, public static final String PROPERTY_AVAILABLE_STRATAS = "availableStratas"; - public static final String PROPERTY_CSP_ROWS = "cpsRows"; + public static final String PROPERTY_CPS_ROWS = "cpsRows"; /** * Delegate edit object. @@ -308,7 +308,7 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, public void setCpsRows(List<CalcifiedPiecesSamplingEditorRowModel> cpsRows) { Object oldValue = getCpsRows(); this.cpsRows = cpsRows; - firePropertyChange(PROPERTY_CSP_ROWS, oldValue, cpsRows); + firePropertyChange(PROPERTY_CPS_ROWS, oldValue, cpsRows); } public boolean isRemoveSpeciesEnabled() { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java index 39079f8..1861676 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveBenthosProtocolAction.java @@ -27,19 +27,24 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; -import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import jaxx.runtime.SwingUtil; +import javax.swing.JOptionPane; import javax.swing.JTable; import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -125,8 +130,8 @@ public class RemoveBenthosProtocolAction extends LongActionSupport<EditProtocolU getModel().getBenthosRow().removeAll(removedRows); // remove the protocolSpecies from the cps table or combobox - CalcifiedPiecesSamplingEditorUI cspEditor = getUI().getCalcifiedPiecesSamplingEditorUI(); - //TODO remove the protocolSpecies from the cps table or combobox + updateCpsTable(); + updateCpsEditorCombo(); // fire table data changed handler.getBenthosTableModel().fireTableDataChanged(); @@ -137,4 +142,34 @@ public class RemoveBenthosProtocolAction extends LongActionSupport<EditProtocolU // notify user sendMessage(t("tutti.flash.info.benthos.remove.from.protocol")); } + + protected void updateCpsEditorCombo() { + CalcifiedPiecesSamplingEditorUI cpsEditor = getUI().getCalcifiedPiecesSamplingEditorUI(); + cpsEditor.getSpeciesComboBox().removeItems(removedSpecies); + } + + protected void updateCpsTable() { + CalcifiedPiecesSamplingEditorUI cpsEditor = getUI().getCalcifiedPiecesSamplingEditorUI(); + + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = getModel().getCpsRows(); + List<CalcifiedPiecesSamplingEditorRowModel> rowsToDelete = + cpsRows.stream().filter(r -> removedSpecies.contains(r.getProtocolSpecies().getSpecies())).collect(Collectors.toList()); + + if (!rowsToDelete.isEmpty()) { + + JOptionPane.showMessageDialog(getUI(), + t("tutti.editProtocol.action.removeBenthosProtocol.removeCpsRows.message"), + t("tutti.editProtocol.action.removeBenthosProtocol.removeCpsRows.title"), + JOptionPane.WARNING_MESSAGE); + + TreeSet<Integer> indexesToDelete = + new TreeSet<>(rowsToDelete.stream().map(cpsRows::indexOf).collect(Collectors.toSet())); + + cpsRows.removeAll(rowsToDelete); + + CalcifiedPiecesSamplingEditorTableModel cpsTableModel = + (CalcifiedPiecesSamplingEditorTableModel) cpsEditor.getCpsTable().getModel(); + cpsTableModel.fireTableRowsDeleted(indexesToDelete.first(), indexesToDelete.last()); + } + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java index 4630e1a..b101111 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/RemoveSpeciesProtocolAction.java @@ -27,19 +27,24 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; -import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import jaxx.runtime.SwingUtil; +import javax.swing.JOptionPane; import javax.swing.JTable; import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -122,8 +127,8 @@ public class RemoveSpeciesProtocolAction extends LongActionSupport<EditProtocolU getModel().getSpeciesRow().removeAll(removedRows); // remove the protocolSpecies from the cps table or combobox - CalcifiedPiecesSamplingEditorUI cspEditor = getUI().getCalcifiedPiecesSamplingEditorUI(); - //TODO remove the protocolSpecies from the cps table or combobox + updateCpsTable(); + updateCpsEditorCombo(); // fire table data changed handler.getSpeciesTableModel().fireTableDataChanged(); @@ -135,4 +140,35 @@ public class RemoveSpeciesProtocolAction extends LongActionSupport<EditProtocolU sendMessage(t("tutti.flash.info.species.remove.from.protocol")); } + protected void updateCpsEditorCombo() { + CalcifiedPiecesSamplingEditorUI cpsEditor = getUI().getCalcifiedPiecesSamplingEditorUI(); + cpsEditor.getSpeciesComboBox().removeItems(removedSpecies); + } + + protected void updateCpsTable() { + CalcifiedPiecesSamplingEditorUI cpsEditor = getUI().getCalcifiedPiecesSamplingEditorUI(); + + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = getModel().getCpsRows(); + List<CalcifiedPiecesSamplingEditorRowModel> rowsToDelete = + cpsRows.stream().filter(r -> removedSpecies.contains(r.getProtocolSpecies().getSpecies())).collect(Collectors.toList()); + + if (!rowsToDelete.isEmpty()) { + + JOptionPane.showMessageDialog(getUI(), + t("tutti.editProtocol.action.removeSpeciesProtocol.removeCpsRows.message"), + t("tutti.editProtocol.action.removeSpeciesProtocol.removeCpsRows.title"), + JOptionPane.WARNING_MESSAGE); + + TreeSet<Integer> indexesToDelete = + new TreeSet<>(rowsToDelete.stream().map(cpsRows::indexOf).collect(Collectors.toSet())); + + cpsRows.removeAll(rowsToDelete); + + CalcifiedPiecesSamplingEditorTableModel cpsTableModel = + (CalcifiedPiecesSamplingEditorTableModel) cpsEditor.getCpsTable().getModel(); + cpsTableModel.fireTableRowsDeleted(indexesToDelete.first(), indexesToDelete.last()); + + } + } + } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index b54737d..bf0afe8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -143,7 +143,7 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl SwingUtil.scrollToTableSelection(cpsTable); // at the very end, set rows to model - getModel().addPropertyChangeListener(EditProtocolUIModel.PROPERTY_CSP_ROWS, + getModel().addPropertyChangeListener(EditProtocolUIModel.PROPERTY_CPS_ROWS, evt -> { Collection<CalcifiedPiecesSamplingEditorRowModel> rows = (Collection<CalcifiedPiecesSamplingEditorRowModel>) evt.getNewValue(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java index 0fcb29b..d99727f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java @@ -39,9 +39,9 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp int selectedRow = cpsTable.getSelectedRow(); - List<CalcifiedPiecesSamplingEditorRowModel> cspRows = ui.getModel().getCpsRows(); + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = ui.getModel().getCpsRows(); - CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); + CalcifiedPiecesSamplingEditorRowModel row = cpsRows.get(selectedRow); EditProtocolSpeciesRowModel speciesToDelete = row.getProtocolSpecies(); String decoratedSpecies = ui.getHandler().getDecorator(Species.class, DecoratorService.WITH_SURVEY_CODE) @@ -55,12 +55,12 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp if (confirmDeletion == JOptionPane.YES_OPTION) { List<CalcifiedPiecesSamplingEditorRowModel> rowsToDelete = - cspRows.stream().filter(r -> r.getProtocolSpecies().equals(speciesToDelete)).collect(Collectors.toList()); + cpsRows.stream().filter(r -> r.getProtocolSpecies().equals(speciesToDelete)).collect(Collectors.toList()); TreeSet<Integer> indexesToDelete = - new TreeSet<>(rowsToDelete.stream().map(cspRows::indexOf).collect(Collectors.toSet())); + new TreeSet<>(rowsToDelete.stream().map(cpsRows::indexOf).collect(Collectors.toSet())); - cspRows.removeAll(rowsToDelete); + cpsRows.removeAll(rowsToDelete); tableModel.fireTableRowsDeleted(indexesToDelete.first(), indexesToDelete.last()); 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 c9de0b2..1463c55 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 @@ -1100,12 +1100,16 @@ tutti.editProtocol.action.moveUpCaracteristicMapping.mnemonic= tutti.editProtocol.action.moveUpCaracteristicMapping.tip= tutti.editProtocol.action.removeBenthosProtocol= tutti.editProtocol.action.removeBenthosProtocol.mnemonic= +tutti.editProtocol.action.removeBenthosProtocol.removeCpsRows.message= +tutti.editProtocol.action.removeBenthosProtocol.removeCpsRows.title= tutti.editProtocol.action.removeBenthosProtocol.tip= tutti.editProtocol.action.removeCaracteristicMapping= tutti.editProtocol.action.removeCaracteristicMapping.mnemonic= tutti.editProtocol.action.removeCaracteristicMapping.tip= tutti.editProtocol.action.removeSpeciesProtocol= tutti.editProtocol.action.removeSpeciesProtocol.mnemonic= +tutti.editProtocol.action.removeSpeciesProtocol.removeCpsRows.message= +tutti.editProtocol.action.removeSpeciesProtocol.removeCpsRows.title= tutti.editProtocol.action.removeSpeciesProtocol.tip= tutti.editProtocol.action.saveProtocol= tutti.editProtocol.action.saveProtocol.mnemonic= 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 a25c689..66c05f0 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 @@ -1049,12 +1049,16 @@ tutti.editProtocol.action.moveUpCaracteristicMapping.mnemonic=M tutti.editProtocol.action.moveUpCaracteristicMapping.tip=Monter l'entrée sélectionnée tutti.editProtocol.action.removeBenthosProtocol=Supprimer les espèces du benthos tutti.editProtocol.action.removeBenthosProtocol.mnemonic=S +tutti.editProtocol.action.removeBenthosProtocol.removeCpsRows.message=Des espèces à supprimer sont présentes dans le tableau de prélèvement des pièces calcifiées. Elles vont être supprimées du tableau. +tutti.editProtocol.action.removeBenthosProtocol.removeCpsRows.title=Espèces présentes dans les prélèvements de pièces calcifiées tutti.editProtocol.action.removeBenthosProtocol.tip=Supprimer les les espèces du benthos sélectionnés tutti.editProtocol.action.removeCaracteristicMapping=Supprimer les caractéristiques tutti.editProtocol.action.removeCaracteristicMapping.mnemonic=S tutti.editProtocol.action.removeCaracteristicMapping.tip=Supprimer les caractéristiques sélectionnés tutti.editProtocol.action.removeSpeciesProtocol=Supprimer les espèces tutti.editProtocol.action.removeSpeciesProtocol.mnemonic=S +tutti.editProtocol.action.removeSpeciesProtocol.removeCpsRows.message=Des espèces à supprimer sont présentes dans le tableau de prélèvement des pièces calcifiées. Elles vont être supprimées du tableau. +tutti.editProtocol.action.removeSpeciesProtocol.removeCpsRows.title=Espèces présentes dans les prélèvements de pièces calcifiées tutti.editProtocol.action.removeSpeciesProtocol.tip=Supprimer les espèces sélectionnées tutti.editProtocol.action.saveProtocol=Enregistrer tutti.editProtocol.action.saveProtocol.mnemonic=E -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm