branch feature/8109 updated (c417e39 -> 5198ea0)
This is an automated email from the git hooks/post-receive script. New change to branch feature/8109 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git discards c417e39 ajout de la popup d'edition des etats matures d'une caracteristique (refs #8109) discards 71ce616 filtre des psfm avec valeurs qualitatuves pour la maturité (refs #8019) adds affd875 Remise à plat de l'éditeur de zone qui ne fonctionne pas bien du tout adds b7d7b96 Rethink Protocol zone model adds 58163da Vérifier au chargement du protocole que toutes le contenue des zones est encore correct + ajout method manquante adds e9d169d Rethink protocol zone editor adds 3a436f8 Revue de la définition des zones au niveau du cache des échantillons adds 9085601 retour sur develop (at last!) Merge branch 'feature/reecriture_editeur_de_zones' into develop adds 48adaad Ajout de nouvelles méthodes sur CaracteristicMap adds 537f034 Ajout d'un chargeur de cache + amélioration de l'API de cache sur les échantillons adds c182786 Revue du chargement du cache d'échantillon au niveau de l'ui et des actions d'édition des captures d'une campagne adds e661bc9 Ajout méthode pour récupérer les ids des batchs enfants adds 5462f81 Gestion du nettoyage du cache avant la suppresion de lot ou de trait adds 4136577 Amélioration du cache adds c166fdc Passage en log debug sur le cache adds 9740706 Fix test adds 44d1157 Fix bad merge :( adds e19c54c Retour sur develop, mais y'a encore du taff je pense sur le sujet... Merge branch 'feature/8145-2' into develop adds dfcf76d ajout en rafale dans les obs individiuelles par defaut (fixes #8163) adds 216896a Utilisation du modèle et non pas directement changer les états dans l'ui + ne rien faire si le mode de recopie est null (uniquement utilisé pour bien gérer le repositionnement dans les ui) adds f47a69a Fixes #8163 Merge branch 'feature/8163' into develop adds 7a258bc c'est l'inverse, on divise si on a des millimètres... (fixes #8156) adds 2760bf6 Merge branch 'feature/8156' into 'develop' new d0a96b9 filtre des psfm avec valeurs qualitatuves pour la maturité (refs #8019) new 5198ea0 ajout de la popup d'edition des etats matures d'une caracteristique (refs #8109) 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 (c417e39) \ N -- N -- N refs/heads/feature/8109 (5198ea0) 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 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 5198ea04e728204949d4483c9709aad107d9143a Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 23 10:33:50 2016 +0100 ajout de la popup d'edition des etats matures d'une caracteristique (refs #8109) commit d0a96b9535bbef50cd86f1beb2cc1a0230247228 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 22 15:34:18 2016 +0100 filtre des psfm avec valeurs qualitatuves pour la maturité (refs #8019) Summary of changes: .../tutti/persistence/TuttiPersistenceImpl.java | 11 + .../persistence/TuttiPersistenceNoDbImpl.java | 11 + .../persistence/entities/CaracteristicMap.java | 24 ++ .../persistence/entities/TuttiEntityBean.java | 9 +- .../persistence/entities/protocol/ZoneBean.java | 17 + .../tutti/persistence/entities/protocol/Zones.java | 22 ++ .../entities/referential/TuttiLocationBean.java | 16 + .../service/BenthosBatchPersistenceService.java | 9 + .../service/ProtocolPersistenceServiceImpl.java | 34 +- .../service/SpeciesBatchPersistenceService.java | 9 + .../SpeciesBatchPersistenceServiceSupport.java | 7 +- .../referential/LocationPersistenceService.java | 10 + .../LocationPersistenceServiceImpl.java | 30 ++ .../main/java/fr/ifremer/tutti/util/Weights.java | 2 +- .../src/main/xmi/tutti-persistence.zargo | Bin 59307 -> 59165 bytes .../ifremer/tutti/service/PersistenceService.java | 164 ++++++++- .../fr/ifremer/tutti/service/TuttiDataContext.java | 78 +++-- .../service/samplingCache/CruiseSamplingCache.java | 381 ++++++++++++++++----- .../samplingCache/CruiseSamplingCacheLoader.java | 120 +++++++ .../samplingCache/CruiseSamplingInternalCache.java | 180 +++++----- tutti-service/src/test/data2 | 1 + .../src/main/filtered-resources/log4j.properties | 3 +- .../actions/AbstractChangeScreenAction.java | 10 +- .../EditCatchesForSelectedCruiseAction.java | 55 +-- .../EditCatchesSupportAction.java} | 71 +++- .../content/home/actions/EditCatchesAction.java | 56 +-- .../frequency/IndividualObservationUICache.java | 20 +- .../species/frequency/SpeciesFrequencyUI.jcss | 1 + .../frequency/SpeciesFrequencyUIHandler.java | 12 +- .../species/frequency/SpeciesFrequencyUIModel.java | 2 +- .../content/protocol/EditProtocolUIHandler.java | 257 ++++++++++---- .../content/protocol/EditProtocolUIModel.java | 267 +++++++-------- .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 9 +- .../swing/content/protocol/zones/ZoneEditorUI.jcss | 8 + .../protocol/zones/ZoneEditorUIHandler.java | 274 +-------------- .../protocol/zones/actions/AddStratasAction.java | 115 +++++-- .../protocol/zones/actions/CreateZoneAction.java | 19 +- .../protocol/zones/actions/DeleteZoneAction.java | 35 +- .../zones/actions/RemoveStratasAction.java | 99 +++--- .../protocol/zones/actions/RenameZoneAction.java | 24 +- .../protocol/zones/models/StrataUIModel.java | 249 -------------- .../protocol/zones/models/SubStrataUIModel.java | 146 -------- .../content/protocol/zones/models/ZoneUIModel.java | 228 ------------ .../zones/tree/AbstractZoneEditorTreeModel.java | 43 --- ...ataNode.java => AvailableStratasTreeModel.java} | 19 +- .../protocol/zones/tree/StratasTreeModel.java | 153 --------- .../content/protocol/zones/tree/SubStrataNode.java | 42 --- .../protocol/zones/tree/ZoneEditorNode.java | 70 ---- .../zones/tree/ZoneEditorTreeCellRenderer.java | 16 +- .../zones/tree/ZoneEditorTreeModelSupport.java | 199 +++++++++++ .../content/protocol/zones/tree/ZoneNode.java | 43 --- .../protocol/zones/tree/ZonesTreeModel.java | 187 ++-------- .../protocol/zones/tree/node/StrataNode.java | 69 ++++ .../node/SubStrataNode.java} | 32 +- .../zones/tree/node/ZoneEditorNodeSupport.java | 94 +++++ .../content/protocol/zones/tree/node/ZoneNode.java | 73 ++++ .../EditProtocolUIModel-error-validation.xml | 2 +- .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 +- .../tutti/ui/swing/BeanValidatorDetectorTest.java | 2 +- 59 files changed, 2032 insertions(+), 2109 deletions(-) create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/ZoneBean.java create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/Zones.java create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/TuttiLocationBean.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCacheLoader.java create mode 120000 tutti-service/src/test/data2 copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/{home/actions/EditCatchesAction.java => actions/EditCatchesSupportAction.java} (55%) delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/StrataUIModel.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/SubStrataUIModel.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/ZoneUIModel.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/AbstractZoneEditorTreeModel.java rename tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/{StrataNode.java => AvailableStratasTreeModel.java} (61%) delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StratasTreeModel.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/SubStrataNode.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorNode.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeModelSupport.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneNode.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/node/StrataNode.java copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/{actions/CollapseZonesTreeAction.java => tree/node/SubStrataNode.java} (51%) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/node/ZoneEditorNodeSupport.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/node/ZoneNode.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/8109 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit d0a96b9535bbef50cd86f1beb2cc1a0230247228 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 22 15:34:18 2016 +0100 filtre des psfm avec valeurs qualitatuves pour la maturité (refs #8019) --- .../ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 5e825ac..ad11874 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 @@ -540,7 +540,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI initDoubleList(EditProtocolUIModel.PROPERTY_MATURITY_PMFM_ID, this.ui.getMaturityList(), - Lists.newArrayList(model.getCaracteristics()), + model.getCaracteristics().stream().filter(caracteristic -> !caracteristic.isQualitativeValueEmpty()).collect(Collectors.toList()), model.getMaturityPmfmId()); // init caracteristics mappingtable -- 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/8109 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 5198ea04e728204949d4483c9709aad107d9143a Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 23 10:33:50 2016 +0100 ajout de la popup d'edition des etats matures d'une caracteristique (refs #8109) --- .../filtered-resources/tutti-help-fr.properties | 26 +--- .../ui/swing/content/protocol/EditProtocolUI.jaxx | 2 + .../ui/swing/content/protocol/EditProtocolUI.jcss | 10 ++ .../content/protocol/EditProtocolUIHandler.java | 16 ++- .../actions/EditMaturityCaracteristicAction.java | 61 ++++++++++ .../maturity/EditMaturityCaracteristicPopupUI.jaxx | 79 ++++++++++++ .../maturity/EditMaturityCaracteristicPopupUI.jcss | 48 ++++++++ .../EditMaturityCaracteristicPopupUIHandler.java | 135 +++++++++++++++++++++ .../EditMaturityCaracteristicPopupUIModel.java | 88 ++++++++++++++ ...yCaracteristicPopupUIModel-error-validation.xml | 41 +++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 6 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 6 + 12 files changed, 492 insertions(+), 26 deletions(-) diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index 20a5134..be5d232 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,28 +1,5 @@ -### -# #%L -# Tutti :: UI -# $Id:$ -# $HeadURL:$ -# %% -# Copyright (C) 2012 - 2016 Ifremer -# %% -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program. If not, see -# <http://www.gnu.org/licenses/gpl-3.0.html>. -# #L% -### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Wed Mar 16 14:34:44 CET 2016 +#Tue Mar 22 16:41:43 CET 2016 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -256,6 +233,7 @@ tutti.editProtocol.action.addBenthosProtocol.help=editProtocol.html\#actionsBent tutti.editProtocol.action.addCaracteristicMapping.help=editProtocol.html\#actions tutti.editProtocol.action.addSpeciesProtocol.help=editProtocol.html\#actionsSpecies tutti.editProtocol.action.closeEditProtocol.help=editProtocol.html\#actions +tutti.editProtocol.action.editMaturityCaracteristic.help= tutti.editProtocol.action.exportProtocolAllCaracteristic.help=editProtocol.html\#actionsCaracteristics tutti.editProtocol.action.exportProtocolBenthos.help=editProtocol.html\#actionsBenthos tutti.editProtocol.action.exportProtocolCaracteristic.tip=editProtocol.html\#actionsCaracteristics 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 aaa9b40..d835235 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 @@ -68,6 +68,8 @@ <field name='comment' component='commentPane'/> </BeanValidator> + <JMenuItem id='editMaturityCaracteristicAction'/> + <JPopupMenu id='speciesTablePopup'> <JMenuItem id='removeSpeciesProtocolButton'/> </JPopupMenu> 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 fd159ee..f0deebb 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 @@ -357,4 +357,14 @@ JTextField { enabled: {model.isMoveDownCaracteristicMappingEnabled()}; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.actions.MoveDownCaracteristicMappingAction.class}; _help: {"tutti.editProtocol.action.moveDownCaracteristicMapping.help"}; +} + +#editMaturityCaracteristicAction { + actionIcon: edit; + text: "tutti.editProtocol.action.editMaturityCaracteristic"; + toolTipText: "tutti.editProtocol.action.editMaturityCaracteristic.tip"; + i18nMnemonic: "tutti.editProtocol.action.editMaturityCaracteristic.mnemonic"; + enabled: false; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.actions.EditMaturityCaracteristicAction.class}; + _help: {"tutti.editProtocol.action.editMaturityCaracteristic.help"}; } \ No newline at end of file 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 ad11874..9883fdf 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 @@ -89,6 +89,8 @@ import org.nuiton.jaxx.application.swing.util.CloseableUI; import javax.swing.JComboBox; import javax.swing.JComponent; +import javax.swing.JList; +import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JTabbedPane; import javax.swing.JTable; @@ -522,10 +524,11 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI }); } + BeanDoubleList<Caracteristic> maturityList = this.ui.getMaturityList(); allDoubleLists = Lists.newArrayList( this.ui.getLengthClassesList(), this.ui.getIndividualObservationList(), - this.ui.getMaturityList() + maturityList ); initDoubleList(EditProtocolUIModel.PROPERTY_LENGTH_CLASSES_PMFM_ID, @@ -539,10 +542,19 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI model.getIndividualObservationPmfmId()); initDoubleList(EditProtocolUIModel.PROPERTY_MATURITY_PMFM_ID, - this.ui.getMaturityList(), + maturityList, model.getCaracteristics().stream().filter(caracteristic -> !caracteristic.isQualitativeValueEmpty()).collect(Collectors.toList()), model.getMaturityPmfmId()); + JMenuItem editMaturity = ui.getEditMaturityCaracteristicAction(); + maturityList.getSelectedListPopup().add(editMaturity); + // add listener to enable the maturity edition + maturityList.getSelectedList().addListSelectionListener(e -> { + JList maturitySelectedList = (JList) e.getSource(); + boolean editMaturityEnabled = maturitySelectedList.getSelectedIndices().length == 1; + editMaturity.setEnabled(editMaturityEnabled); + }); + // init caracteristics mappingtable { JXTable caracteristicsMappingTable = getCaracteristicsMappingTable(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/EditMaturityCaracteristicAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/EditMaturityCaracteristicAction.java new file mode 100644 index 0000000..fabb121 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/EditMaturityCaracteristicAction.java @@ -0,0 +1,61 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.actions; + +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; +import fr.ifremer.tutti.ui.swing.content.protocol.maturity.EditMaturityCaracteristicPopupUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class EditMaturityCaracteristicAction extends SimpleActionSupport<EditProtocolUI> { + + public EditMaturityCaracteristicAction(EditProtocolUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(EditProtocolUI ui) { + + EditMaturityCaracteristicPopupUI popupUI = new EditMaturityCaracteristicPopupUI(ui); + popupUI.open((Caracteristic) ui.getMaturityList().getSelectedList().getSelectedValue()); + +// JXTable cpsTable = ui.getCpsTable(); +// CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); +// +// int selectedRow = cpsTable.getSelectedRow(); +// +// 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; +// +// MinSizePopupUI minSizePopupUI = new MinSizePopupUI(ui); +// minSizePopupUI.open(minMinSize, maxMinSize); +// +// if (minSizePopupUI.getModel().isValid()) { +// +// Integer minSize = minSizePopupUI.getModel().getMinSize(); +// Integer exMaxSize = row.getMaxSize(); +// row.setMaxSize(minSize - 1); +// +// CalcifiedPiecesSamplingEditorRowModel newRow = ui.getHandler().createNewRow(row.getProtocolSpecies(), +// row.getMaturity(), +// row.isSex(), +// minSize, +// exMaxSize); +// 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/java/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUI.jaxx new file mode 100644 index 0000000..cf11700 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUI.jaxx @@ -0,0 +1,79 @@ +<!-- + #%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='editMaturityCaracteristicDialog' layout='{new BorderLayout()}' + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditMaturityCaracteristicPopupUIModel, EditMaturityCaracteristicPopupUIHandler>'> + + <import> + fr.ifremer.tutti.persistence.entities.referential.Caracteristic + fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue + + fr.ifremer.tutti.ui.swing.TuttiUIContext + fr.ifremer.tutti.ui.swing.util.TuttiUI + fr.ifremer.tutti.ui.swing.util.TuttiUIUtil + + </import> + + <script><![CDATA[ + +public EditMaturityCaracteristicPopupUI(TuttiUI<?,?> parentUI) { + super(parentUI.getHandler().getContext().getMainUI()); + TuttiUIUtil.setParentUI(this, parentUI); +} + +public void open(Caracteristic maturityCaracteristic) { + handler.open(maturityCaracteristic); +} + ]]></script> + + <EditMaturityCaracteristicPopupUIModel id="model" javaBean="new EditMaturityCaracteristicPopupUIModel()"/> + + <BeanValidator id='validator' bean='model' + uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> + <field name='qualitativeValues' component='maturityValuesEditor'/> + </BeanValidator> + + <Table id='mainPanel' fill='both'> + + <row> + <cell> + <JLabel id='message'/> + </cell> + </row> + + <row weighty="1"> + <cell weightx='1'> + <JList id='maturityValuesEditor' genericType="CaracteristicQualitativeValue"/> + </cell> + </row> + + <row> + <cell> + <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/maturity/EditMaturityCaracteristicPopupUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUI.jcss new file mode 100644 index 0000000..2f332c6 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUI.jcss @@ -0,0 +1,48 @@ +/* + * #%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% +*/ + +#editMaturityCaracteristicDialog { + modal: true; + title: "tutti.editProtocol.maturityCaracteristic.dialog.title"; +} + +#message { + border: {BorderFactory.createEmptyBorder(5,10,5,10)}; +} + +#cancelButton { + actionIcon: cancel; + text: "tutti.common.cancel"; + toolTipText: "tutti.common.cancel"; + i18nMnemonic: "tutti.common.cancel.mnemonic"; + _skipAction: true; +} + +#validateButton { + actionIcon: validate; + text: "tutti.common.validate"; + 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/maturity/EditMaturityCaracteristicPopupUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUIHandler.java new file mode 100644 index 0000000..550baa8 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUIHandler.java @@ -0,0 +1,135 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.maturity; + +/* + * #%L + * Tutti :: UI + * %% + * Copyright (C) 2012 - 2014 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.validator.swing.SwingValidator; + +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JList; +import javax.swing.ListCellRenderer; +import java.awt.Component; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Map; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin - kmorin@codelutin.com + * @since 4.5 + */ +public class EditMaturityCaracteristicPopupUIHandler extends AbstractTuttiUIHandler<EditMaturityCaracteristicPopupUIModel, EditMaturityCaracteristicPopupUI> { + + @Override + public void afterInit(EditMaturityCaracteristicPopupUI ui) { + initUI(ui); + + JList<CaracteristicQualitativeValue> maturityValuesEditor = ui.getMaturityValuesEditor(); + maturityValuesEditor.setCellRenderer(new CheckboxListRenderer()); + maturityValuesEditor.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent event) { + JList<CaracteristicQualitativeValue> list = (JList<CaracteristicQualitativeValue>) event.getSource(); + + // Get index of item clicked + + int index = list.locationToIndex(event.getPoint()); + CaracteristicQualitativeValue item = list.getModel().getElementAt(index); + + // Toggle selected state + + getModel().setValueMature(item, !getModel().isMature(item)); + + // Repaint cell + + list.repaint(list.getCellBounds(index, index)); + } + }); + + getModel().addPropertyChangeListener(EditMaturityCaracteristicPopupUIModel.PROPERTY_QUALITATIVE_VALUES, evt -> { + Map<CaracteristicQualitativeValue, Boolean> newValue = (Map<CaracteristicQualitativeValue, Boolean>) evt.getNewValue(); + if (newValue != null) { + maturityValuesEditor.setListData(newValue.keySet().toArray(new CaracteristicQualitativeValue[newValue.size()])); + } else { + maturityValuesEditor.setListData(new CaracteristicQualitativeValue[0]); + } + }); + } + + @Override + public void onCloseUI() { + getUI().dispose(); + } + + @Override + public SwingValidator<EditMaturityCaracteristicPopupUIModel> getValidator() { + return ui.getValidator(); + } + + @Override + protected JComponent getComponentToFocus() { + return getUI().getMaturityValuesEditor(); + } + + public void open(Caracteristic maturityCaracteristic) { + getModel().setQualitativeValues(maturityCaracteristic.getQualitativeValue()); + getModel().setValid(false); + ui.getMessage().setText(t("tutti.editProtocol.maturityCaracteristic.dialog.message", decorate(maturityCaracteristic))); + getUI().pack(); + SwingUtil.center(getContext().getMainUI(), ui); + getUI().setVisible(true); + } + + public void validate() { + if (getValidator().isValid()) { + getModel().setValid(true); + onCloseUI(); + } + } + + public void cancel() { + getModel().setQualitativeValues(null); + onCloseUI(); + } + + class CheckboxListRenderer extends JCheckBox implements + ListCellRenderer<CaracteristicQualitativeValue> { + + @Override + public Component getListCellRendererComponent( + JList<? extends CaracteristicQualitativeValue> list, CaracteristicQualitativeValue value, + int index, boolean isSelected, boolean cellHasFocus) { + setEnabled(list.isEnabled()); + setSelected(EditMaturityCaracteristicPopupUIHandler.this.getModel().isMature(value)); + setFont(list.getFont()); + setBackground(list.getBackground()); + setForeground(list.getForeground()); + setText(decorate(value)); + return this; + } + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUIModel.java new file mode 100644 index 0000000..f9d0322 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUIModel.java @@ -0,0 +1,88 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.maturity; + +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; +import org.jdesktop.beans.AbstractSerializableBean; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class EditMaturityCaracteristicPopupUIModel extends AbstractSerializableBean { + + public static final String PROPERTY_QUALITATIVE_VALUES = "qualitativeValues"; + public static final String PROPERTY_MATURE_VALUES = "matureValues"; + public static final String PROPERTY_IMMATURE_VALUES = "immatureValues"; + + /** + * Is the model valid? + */ + protected boolean valid; + + protected final Map<CaracteristicQualitativeValue, Boolean> qualitativeValuesStates = new LinkedHashMap<>(); + + public Map<CaracteristicQualitativeValue, Boolean> getQualitativeValuesStates() { + return qualitativeValuesStates; + } + + public List<CaracteristicQualitativeValue> getQualitativeValues() { + return new ArrayList<>(qualitativeValuesStates.keySet()); + } + +// public void setQualitativeValues(TreeMap<Serializable, Boolean> qualitativeValues) { +// Object oldValue = getQualitativeValues(); +// +// this.qualitativeValues.clear(); +// if (qualitativeValues != null) { +// this.qualitativeValues.putAll(qualitativeValues); +// } +// firePropertyChange(PROPERTY_QUALITATIVE_VALUES, oldValue, qualitativeValues); +// } + + public void setQualitativeValues(List<CaracteristicQualitativeValue> qualitativeValues) { + Object oldMatureValues = hasMatureValues(); + Object oldImmatureValues = hasImmatureValues(); + + this.qualitativeValuesStates.clear(); + if (qualitativeValues != null) { + this.qualitativeValuesStates.putAll(qualitativeValues.stream().collect(Collectors.toMap(c -> c, c -> false))); + } + + firePropertyChange(PROPERTY_QUALITATIVE_VALUES, null, this.qualitativeValuesStates); + firePropertyChange(PROPERTY_MATURE_VALUES, oldMatureValues, hasMatureValues()); + firePropertyChange(PROPERTY_IMMATURE_VALUES, oldImmatureValues, hasImmatureValues()); + } + + public void setValueMature(CaracteristicQualitativeValue value, boolean mature) { + Object oldMatureValues = hasMatureValues(); + Object oldImmatureValues = hasImmatureValues(); + qualitativeValuesStates.put(value, mature); + firePropertyChange(PROPERTY_MATURE_VALUES, oldMatureValues, hasMatureValues()); + firePropertyChange(PROPERTY_IMMATURE_VALUES, oldImmatureValues, hasImmatureValues()); + } + + public boolean isMature(CaracteristicQualitativeValue value) { + return qualitativeValuesStates.get(value); + } + + public boolean hasMatureValues() { + return qualitativeValuesStates.containsValue(true); + } + + public boolean hasImmatureValues() { + return qualitativeValuesStates.containsValue(false); + } + + public boolean isValid() { + return valid; + } + + public void setValid(boolean valid) { + this.valid = valid; + } +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUIModel-error-validation.xml b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUIModel-error-validation.xml new file mode 100644 index 0000000..0db968d --- /dev/null +++ b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/maturity/EditMaturityCaracteristicPopupUIModel-error-validation.xml @@ -0,0 +1,41 @@ +<!-- + #%L + Tutti :: UI + $Id:$ + $HeadURL:$ + %% + Copyright (C) 2012 - 2016 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!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="qualitativeValues"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ hasMatureValues() && hasImmatureValues() ]]> + </param> + <message> + tutti.validator.error.maturityCaracteristicEditor.dialog.qualitativeValues.bithStates + </message> + </field-validator> + </field> + +</validators> \ No newline at end of file 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 8a568db..3e99b08 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 @@ -1080,6 +1080,9 @@ tutti.editProtocol.action.chooseProtocolSpeciesFile= tutti.editProtocol.action.closeEditProtocol= tutti.editProtocol.action.closeEditProtocol.mnemonic= tutti.editProtocol.action.closeEditProtocol.tip= +tutti.editProtocol.action.editMaturityCaracteristic= +tutti.editProtocol.action.editMaturityCaracteristic.mnemonic= +tutti.editProtocol.action.editMaturityCaracteristic.tip= tutti.editProtocol.action.exportProtocolAllCaracteristic= tutti.editProtocol.action.exportProtocolAllCaracteristic.mnemonic= tutti.editProtocol.action.exportProtocolAllCaracteristic.tip= @@ -1176,6 +1179,8 @@ tutti.editProtocol.field.protocol.name.tip= tutti.editProtocol.field.species.tip= tutti.editProtocol.field.useCalcifiedPieceSampling= tutti.editProtocol.field.useCalcifiedPieceSampling.tip= +tutti.editProtocol.maturityCaracteristic.dialog.message= +tutti.editProtocol.maturityCaracteristic.dialog.title= tutti.editProtocol.tab.algorithm= tutti.editProtocol.tab.benthos= tutti.editProtocol.tab.caracteristic= @@ -2551,6 +2556,7 @@ tutti.validator.error.longitude.end.required= tutti.validator.error.longitude.minute.outOfBounds= tutti.validator.error.longitude.second.outOfBounds= tutti.validator.error.longitude.start.required= +tutti.validator.error.maturityCaracteristicEditor.dialog.qualitativeValues.bithStates= tutti.validator.error.program.zone.required= tutti.validator.error.replaceTemporaryReferential.source.required= tutti.validator.error.replaceTemporaryReferential.target.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 1043a84..3ad657f 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 @@ -1025,6 +1025,9 @@ tutti.editProtocol.action.chooseColumnsFile.import=Importer tutti.editProtocol.action.closeEditProtocol=Fermer tutti.editProtocol.action.closeEditProtocol.mnemonic=F tutti.editProtocol.action.closeEditProtocol.tip=Fermer l'écran d'édition du protocole +tutti.editProtocol.action.editMaturityCaracteristic=Éditer la caractéristique de maturité +tutti.editProtocol.action.editMaturityCaracteristic.mnemonic=E +tutti.editProtocol.action.editMaturityCaracteristic.tip=Définir les états matures et immatures de la caractéristique de maturité tutti.editProtocol.action.exportProtocolAllCaracteristic=Exporter toutes les caractéristiques du référentiel tutti.editProtocol.action.exportProtocolAllCaracteristic.mnemonic=t tutti.editProtocol.action.exportProtocolAllCaracteristic.tip=Exporter toutes les caractéristiques du référentiel (sans les affecter à un écran) @@ -1117,6 +1120,8 @@ 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.maturityCaracteristic.dialog.message=<html><body>Veuillez cocher les états matures de la caractéristique<br/><strong>%s</strong><br/><em>(il faut au moins un état mature et un état immature)</em> \:</body></html> +tutti.editProtocol.maturityCaracteristic.dialog.title=États matures et immatures tutti.editProtocol.tab.algorithm=Algorithme tutti.editProtocol.tab.benthos=Benthos tutti.editProtocol.tab.caracteristic=Caractéristiques @@ -2341,6 +2346,7 @@ tutti.validator.error.longitude.end.required=La longitude de fin de traîne est tutti.validator.error.longitude.minute.outOfBounds=La minute de la longitude doit être comprise entre 0 et 59 tutti.validator.error.longitude.second.outOfBounds=La seconde de la longitude doit être comprise entre 0 et 59 tutti.validator.error.longitude.start.required=La longitude de début de traîne est obligatoire +tutti.validator.error.maturityCaracteristicEditor.dialog.qualitativeValues.bithStates= tutti.validator.error.program.zone.required=La zone de la série est obligatoire tutti.validator.error.replaceTemporaryReferential.source.required=Un référentiel temporaire doit être sélectionné tutti.validator.error.replaceTemporaryReferential.target.required=Un référentiel officiel doit être sélectionné -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm