This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 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>.