This is an automated email from the git hooks/post-receive script. New commit to branch feature/8013 in repository tutti. See http://git.codelutin.com/tutti.git commit d02928b2be096635de74f9be907949bbb2c1a0e3 Author: Kevin Morin <morin@codelutin.com> Date: Wed Feb 24 16:42:53 2016 +0100 Il faut n'autoriser que les taxons dont on a une méthode de mensuration renseigner et du coup il faut aussi demander une confirmation à l'utilisateur si il veut supprimer la méthode de mensuration dans l'onglet espèces (ou benthos) car cela va supprimer des lignes dans l'onglet algo (refs #8013) --- .../content/protocol/EditProtocolUIHandler.java | 96 ++++++++++++++++------ .../protocol/actions/AddBenthosProtocolAction.java | 3 +- .../protocol/actions/AddSpeciesProtocolAction.java | 3 +- .../actions/RemoveBenthosProtocolAction.java | 25 +----- .../actions/RemoveSpeciesProtocolAction.java | 26 +----- .../resources/i18n/tutti-ui-swing_en_GB.properties | 3 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 3 + 7 files changed, 82 insertions(+), 77 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 e22cfd2..5c48932 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 @@ -55,6 +55,7 @@ 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.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellEditor; import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellRenderer; @@ -79,16 +80,16 @@ import org.jdesktop.swingx.decorator.Highlighter; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import org.jdesktop.swingx.table.TableColumnExt; import org.nuiton.decorator.Decorator; +import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; import org.nuiton.jaxx.application.swing.util.CloseableUI; import javax.swing.JComboBox; import javax.swing.JComponent; +import javax.swing.JOptionPane; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; -import javax.swing.event.CellEditorListener; -import javax.swing.event.ChangeEvent; import javax.swing.event.ListSelectionListener; import javax.swing.event.TableModelEvent; import javax.swing.table.DefaultTableCellRenderer; @@ -106,6 +107,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeSet; import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.n; @@ -658,6 +660,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI if (speciesRows1 != null) { protocolSpecies.addAll(speciesRows1.stream() + .filter(sp -> sp.getLengthStepPmfm() != null) .map(EditProtocolSpeciesRowModel::toSpeciesWithSurveyCode) .collect(Collectors.toList())); @@ -667,16 +670,17 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI if (benthosRows1 != null) { protocolSpecies.addAll(benthosRows1.stream() + .filter(sp -> sp.getLengthStepPmfm() != null) .map(EditProtocolSpeciesRowModel::toSpeciesWithSurveyCode) .collect(Collectors.toList())); } protocolSpecies.removeAll(getModel().getCpsRows() - .stream() - .map(CalcifiedPiecesSamplingEditorRowModel::getProtocolSpecies) - .map(EditProtocolSpeciesRowModel::getSpecies) - .collect(Collectors.toList())); + .stream() + .map(CalcifiedPiecesSamplingEditorRowModel::getProtocolSpecies) + .map(EditProtocolSpeciesRowModel::getSpecies) + .collect(Collectors.toList())); // Si on ne vide pas la liste et que les espèces sont égales (sur l'id), rien n'est changé calcifiedPiecesSamplingEditorUI.getSpeciesComboBox().setData(null); @@ -806,7 +810,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI Preconditions.checkNotNull(species, "Espèce inconnue : " + taxonIdStr); speciesSet.add(species); - EditProtocolSpeciesRowModel row = EditProtocolSpeciesTableModel.newRow(sampleCategoryModel); + EditProtocolSpeciesRowModel row = createNewProtocolSpeciesRow(); row.setSpecies(species); String lengthStepPmfmId = speciesProtocol.getLengthStepPmfmId(); @@ -862,6 +866,67 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI return result; } + public EditProtocolSpeciesRowModel createNewProtocolSpeciesRow() { + EditProtocolSpeciesRowModel result = EditProtocolSpeciesTableModel.newRow(sampleCategoryModel); + + result.addPropertyChangeListener(EditProtocolSpeciesRowModel.PROPERTY_LENGTH_STEP_PMFM, evt -> { + + Caracteristic newValue = (Caracteristic) evt.getNewValue(); + if (newValue == null) { + + result.setIndividualObservationEnabled(false); + + List<CalcifiedPiecesSamplingEditorRowModel> speciesCpsRows = + getModel().getCpsRows() + .stream() + .filter(row -> row.getProtocolSpecies().equals(result)) + .collect(Collectors.toList()); + + if (!speciesCpsRows.isEmpty()) { + String htmlMessage = String.format( + AbstractApplicationUIHandler.CONFIRMATION_FORMAT, + t("tutti.editProtocol.action.removeLengthStepPmfm.removeCpsRows.message"), + t("jaxx.application.common.askBeforeDelete.help")); + int i = JOptionPane.showConfirmDialog( + getUI(), + htmlMessage, + t("tutti.editProtocol.action.removeLengthStepPmfm.removeCpsRows.title"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + + boolean deleteCpsRows = i == JOptionPane.OK_OPTION; + + if (deleteCpsRows) { + + deleteCpsRows(speciesCpsRows); + + } else { + + result.setLengthStepPmfm((Caracteristic) evt.getOldValue()); + + } + } + } + }); + return result; + } + + public void deleteCpsRows(Collection<CalcifiedPiecesSamplingEditorRowModel> cpsRowsToDelete) { + + CalcifiedPiecesSamplingEditorUI cpsEditor = getUI().getCalcifiedPiecesSamplingEditorUI(); + + List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = getModel().getCpsRows(); + + TreeSet<Integer> indexesToDelete = + new TreeSet<>(cpsRowsToDelete.stream().map(cpsRows::indexOf).collect(Collectors.toSet())); + + cpsRows.removeAll(cpsRowsToDelete); + + CalcifiedPiecesSamplingEditorTableModel cpsTableModel = + (CalcifiedPiecesSamplingEditorTableModel) cpsEditor.getCpsTable().getModel(); + cpsTableModel.fireTableRowsDeleted(indexesToDelete.first(), indexesToDelete.last()); + } + public List<EditProtocolCaracteristicsRowModel> toProtocolCaracteristicRows(List<CaracteristicMappingRow> caracteristicMappingRows) { BeanFilterableComboBox<Caracteristic> caracteristicMappingComboBox = ui.getCaracteristicMappingComboBox(); Preconditions.checkNotNull(caracteristicMappingComboBox.getData()); @@ -1095,23 +1160,6 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI ObjectToStringConverter converter = BeanUIUtil.newDecoratedObjectToStringConverter(decorator); BeanUIUtil.decorate(comboBox, converter); ComboBoxCellEditor editor = new ComboBoxCellEditor(comboBox); - editor.addCellEditorListener(new CellEditorListener() { - - @Override - public void editingStopped(ChangeEvent e) { - EditProtocolSpeciesTableModel tableModel = (EditProtocolSpeciesTableModel) table.getModel(); - EditProtocolSpeciesRowModel selectedRow = tableModel.getRows().get(table.convertRowIndexToModel(table.getSelectedRow())); - Caracteristic lengthStepPmfm = selectedRow.getLengthStepPmfm(); - if (lengthStepPmfm == null) { - selectedRow.setIndividualObservationEnabled(false); - } - } - - @Override - public void editingCanceled(ChangeEvent e) { - - } - }); addColumnToModel(model, editor, 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 0679e29..f111cfa 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 @@ -60,7 +60,6 @@ public class AddBenthosProtocolAction extends LongActionSupport<EditProtocolUIMo EditProtocolUI ui = getUI(); - EditProtocolSpeciesTableModel tableModel = handler.getBenthosTableModel(); BeanFilterableComboBox<Species> benthosComboBox = ui.getBenthosComboBox(); species = (Species) benthosComboBox.getSelectedItem(); @@ -77,7 +76,7 @@ public class AddBenthosProtocolAction extends LongActionSupport<EditProtocolUIMo getModel().getAllSynonyms().removeAll(allSynonyms); // add new row to model (do it after combo stuff for ui best display) - newRow = tableModel.createNewRow(); + newRow = handler.createNewProtocolSpeciesRow(); newRow.setSpecies(species); getModel().getBenthosRow().add(newRow); } 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 0c73a65..9428894 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 @@ -58,7 +58,6 @@ public class AddSpeciesProtocolAction extends LongActionSupport<EditProtocolUIMo EditProtocolUI ui = getUI(); - EditProtocolSpeciesTableModel tableModel = handler.getSpeciesTableModel(); BeanFilterableComboBox<Species> speciesComboBox = ui.getSpeciesComboBox(); species = (Species) speciesComboBox.getSelectedItem(); @@ -75,7 +74,7 @@ public class AddSpeciesProtocolAction extends LongActionSupport<EditProtocolUIMo getModel().getAllSynonyms().removeAll(allSynonyms); // add new row to model (do it after combo stuff for ui best display) - newRow = tableModel.createNewRow(); + newRow = handler.createNewProtocolSpeciesRow(); newRow.setSpecies(species); getModel().getSpeciesRow().add(newRow); } 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 3152a8a..ea0a8d5 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 @@ -33,8 +33,6 @@ 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; @@ -43,7 +41,6 @@ import java.util.Collection; 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; @@ -158,8 +155,7 @@ public class RemoveBenthosProtocolAction extends LongActionSupport<EditProtocolU // remove the protocolSpecies from the cps table or combobox if (!cpsRowsToDelete.isEmpty()) { - updateCpsTable(); - updateCpsEditorCombo(); + handler.deleteCpsRows(cpsRowsToDelete); } // fire table data changed @@ -172,23 +168,4 @@ public class RemoveBenthosProtocolAction extends LongActionSupport<EditProtocolU 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(); - - TreeSet<Integer> indexesToDelete = - new TreeSet<>(cpsRowsToDelete.stream().map(cpsRows::indexOf).collect(Collectors.toSet())); - - cpsRows.removeAll(cpsRowsToDelete); - - 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 4d5754d..e9bff10 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 @@ -33,8 +33,6 @@ 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; @@ -43,7 +41,6 @@ import java.util.Collection; 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; @@ -155,8 +152,7 @@ public class RemoveSpeciesProtocolAction extends LongActionSupport<EditProtocolU // remove the protocolSpecies from the cps table or combobox if (!cpsRowsToDelete.isEmpty()) { - updateCpsTable(); - updateCpsEditorCombo(); + handler.deleteCpsRows(cpsRowsToDelete); } // fire table data changed @@ -169,24 +165,4 @@ 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(); - - TreeSet<Integer> indexesToDelete = - new TreeSet<>(cpsRowsToDelete.stream().map(cpsRows::indexOf).collect(Collectors.toSet())); - - cpsRows.removeAll(cpsRowsToDelete); - - CalcifiedPiecesSamplingEditorTableModel cpsTableModel = - (CalcifiedPiecesSamplingEditorTableModel) cpsEditor.getCpsTable().getModel(); - cpsTableModel.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 1f79785..f717239 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 @@ -3,6 +3,7 @@ application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= +jaxx.application.common.askBeforeDelete.help= left= next= right= @@ -1116,6 +1117,8 @@ tutti.editProtocol.action.removeBenthosProtocol.tip= tutti.editProtocol.action.removeCaracteristicMapping= tutti.editProtocol.action.removeCaracteristicMapping.mnemonic= tutti.editProtocol.action.removeCaracteristicMapping.tip= +tutti.editProtocol.action.removeLengthStepPmfm.removeCpsRows.message= +tutti.editProtocol.action.removeLengthStepPmfm.removeCpsRows.title= tutti.editProtocol.action.removeSpeciesProtocol= tutti.editProtocol.action.removeSpeciesProtocol.mnemonic= tutti.editProtocol.action.removeSpeciesProtocol.removeCpsRows.message= 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 aff2d0e..3838522 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -1,6 +1,7 @@ application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= +jaxx.application.common.askBeforeDelete.help= swing.error.cannot.open.file=Aucun programme n'est défini pour ouvrir ce type de fichier. Enregistrez le fichier et ouvrez le en dehors de l'application tutti.about.bottomText=Copyright %s - %s - version %s tutti.about.message=<h3>Allegro Campagne</h3><p><strong>Outil de saisie de données d'opérations et de captures au cours des campagnes halieutiques.</strong></p><br/><p>Ce logiciel permettra la saisie en mer des données d'opération de pêche (positions, environnement, engin, etc) et des captures associées (composition de la capture en espèces scientifiques avec poids, nombres, tailles etc) pour l'ensemble des campagnes halieutiques réalisées par l'Ifremer.</p><p>Ce projet a été initiée en [...] @@ -1065,6 +1066,8 @@ tutti.editProtocol.action.removeBenthosProtocol.tip=Supprimer les les espèces d 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.removeLengthStepPmfm.removeCpsRows.message=Vous avez paramétré les prélèvement de pièces calcifiées pour cette espèce.<br/>Seules les espèces avec une méthode de mensurations peuvent être dans l'algorithme de prélèvement des pièces calcifiées.<br/>Si vous supprimer la méthode de mensuration de cette espèce, elle sera supprimée du tableau de prélèvement des pièces calcifiées. +tutti.editProtocol.action.removeLengthStepPmfm.removeCpsRows.title=Espèce présente dans les prélèvements de pièces calcifiées 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.<br/>Si vous les supprimer du protocole, elles seront également supprimées du tableau de prélèvement des pièces calcifiées. -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.