This is an automated email from the git hooks/post-receive script. New commit to branch feature/8034 in repository tutti. See http://git.codelutin.com/tutti.git commit 7ced4017bea9423cbae2a9e7c84f8896d486a87e Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 1 20:03:30 2016 +0100 Suppression de plusieurs espèces (See #8034) --- .../CalcifiedPiecesSamplingEditorUI.jcss | 2 +- .../CalcifiedPiecesSamplingEditorUIHandler.java | 49 ++++++++++++---- .../actions/DeleteSpeciesAction.java | 65 +++++++++++++++++----- .../resources/i18n/tutti-ui-swing_en_GB.properties | 8 +++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 12 ++-- 5 files changed, 106 insertions(+), 30 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 cf1bf8d..4ff73b5 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 @@ -60,5 +60,5 @@ BeanFilterableComboBox { } #cpsTable { - selectionMode: {javax.swing.ListSelectionModel.SINGLE_SELECTION}; + selectionMode: {javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_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 879c675..38bb1e6 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 @@ -41,6 +41,7 @@ import org.jdesktop.swingx.table.TableColumnExt; import javax.swing.JComponent; import javax.swing.JLabel; +import javax.swing.JMenuItem; import javax.swing.SwingConstants; import javax.swing.border.LineBorder; import javax.swing.event.CellEditorListener; @@ -57,6 +58,8 @@ 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 @@ -270,26 +273,52 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl 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; + boolean speciesDeletable; + boolean splitEnabled; + boolean rowDeletable; + + JMenuItem deleteSpeciesMenu = getUI().getDeleteSpeciesMenu(); + + int selectedRowCount = getUI().getCpsTable().getSelectedRowCount(); + + if (selectedRowCount > 1) { + + // multi sélection + speciesDeletable = true; + splitEnabled = false; + rowDeletable = false; + + deleteSpeciesMenu.setText(t("tutti.editCps.deleteMoreThanOneSpecies")); + deleteSpeciesMenu.setToolTipText(t("tutti.editCps.deleteMoreThanOneSpecies.tip")); - if (rowSelected) { + } else { - CalcifiedPiecesSamplingEditorRowModel selectedRow = getModel().getCpsRows().get(modelRowIndex); + speciesDeletable = modelRowIndex >= 0 && modelRowIndex < getModel().getCpsRows().size(); + splitEnabled = speciesDeletable; + rowDeletable = speciesDeletable; + + if (speciesDeletable) { + + CalcifiedPiecesSamplingEditorRowModel selectedRow = getModel().getCpsRows().get(modelRowIndex); + + Integer minSize = selectedRow.getMinSize(); + + splitEnabled = selectedRow.getMaxSize() == null + || selectedRow.getMaxSize() - minSize > 1; + rowDeletable = minSize > 0; + + } - Integer minSize = selectedRow.getMinSize(); + deleteSpeciesMenu.setText(t("tutti.editCps.deleteOneSpecies")); + deleteSpeciesMenu.setToolTipText(t("tutti.editCps.deleteOneSpecies.tip")); - splitEnabled = selectedRow.getMaxSize() == null - || selectedRow.getMaxSize() - minSize > 1; - rowDeletable = minSize > 0; } getUI().getSplitCpsRowMenu().setEnabled(splitEnabled); getUI().getDeleteCpsRowMenu().setEnabled(rowDeletable); - getUI().getDeleteSpeciesMenu().setEnabled(rowSelected); + deleteSpeciesMenu.setEnabled(speciesDeletable); } 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 535822f..78c4dcb 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 @@ -32,9 +32,12 @@ import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.Calcif import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; import org.jdesktop.swingx.JXTable; +import org.nuiton.decorator.Decorator; import javax.swing.JOptionPane; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; import java.util.TreeSet; import java.util.stream.Collectors; @@ -56,35 +59,67 @@ public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamp JXTable cpsTable = ui.getCpsTable(); CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); - int selectedRow = cpsTable.getSelectedRow(); + int[] selectedRows = cpsTable.getSelectedRows(); List<CalcifiedPiecesSamplingEditorRowModel> cpsRows = ui.getModel().getCpsRows(); - CalcifiedPiecesSamplingEditorRowModel row = cpsRows.get(selectedRow); + Set<Species> speciesToDelete = new LinkedHashSet<>(); + for (int selectedRow : selectedRows) { - 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"), + CalcifiedPiecesSamplingEditorRowModel row = cpsRows.get(selectedRow); + EditProtocolSpeciesRowModel speciesRowToDelete = row.getProtocolSpecies(); + speciesToDelete.add(speciesRowToDelete.getSpecies()); + + } + + int confirmDeletion; + + Decorator<Species> speciesDecorator = ui.getHandler().getDecorator(Species.class, DecoratorService.WITH_SURVEY_CODE); + + if (speciesToDelete.size() == 1) { + + confirmDeletion = JOptionPane.showConfirmDialog(ui, + t("tutti.editCps.deleteOneSpecies.message", speciesDecorator.toString(speciesToDelete.iterator().next())), + t("tutti.editCps.deleteOneSpecies.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + } else { + + StringBuilder builder = new StringBuilder(); + for (Species species : speciesToDelete) { + builder.append("<li>").append(speciesDecorator.toString(species)).append("</li>"); + } + confirmDeletion = JOptionPane.showConfirmDialog(ui, + t("tutti.editCps.deleteMoreThanOneSpecies.message", builder.toString()), + t("tutti.editCps.deleteMoreThanOneSpecies.title"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + } + if (confirmDeletion == JOptionPane.YES_OPTION) { - List<CalcifiedPiecesSamplingEditorRowModel> rowsToDelete = - cpsRows.stream().filter(r -> r.getProtocolSpecies().equals(speciesToDelete)).collect(Collectors.toList()); + for (Species species : speciesToDelete) { + + List<CalcifiedPiecesSamplingEditorRowModel> rowsToDelete + = cpsRows + .stream() + .filter(r -> r.getProtocolSpecies().getSpecies().equals(species)) + .collect(Collectors.toList()); - TreeSet<Integer> indexesToDelete = - new TreeSet<>(rowsToDelete.stream().map(cpsRows::indexOf).collect(Collectors.toSet())); + TreeSet<Integer> indexesToDelete = + new TreeSet<>(rowsToDelete.stream().map(cpsRows::indexOf).collect(Collectors.toSet())); - cpsRows.removeAll(rowsToDelete); + cpsRows.removeAll(rowsToDelete); - tableModel.fireTableRowsDeleted(indexesToDelete.first(), indexesToDelete.last()); + tableModel.fireTableRowsDeleted(indexesToDelete.first(), indexesToDelete.last()); + + ui.getSpeciesComboBox().addItem(species); + + } - ui.getSpeciesComboBox().addItem(speciesToDelete.getSpecies()); } + } } 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 f717239..5b42237 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 @@ -730,6 +730,14 @@ tutti.editCps.changeSex.noSex= tutti.editCps.changeSex.noSex.tip= tutti.editCps.changeSex.sex= tutti.editCps.changeSex.sex.tip= +tutti.editCps.deleteMoreThanOneSpecies= +tutti.editCps.deleteMoreThanOneSpecies.message= +tutti.editCps.deleteMoreThanOneSpecies.tip= +tutti.editCps.deleteMoreThanOneSpecies.title= +tutti.editCps.deleteOneSpecies= +tutti.editCps.deleteOneSpecies.message= +tutti.editCps.deleteOneSpecies.tip= +tutti.editCps.deleteOneSpecies.title= tutti.editCps.deleteRow= tutti.editCps.deleteRow.message= tutti.editCps.deleteRow.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 af0844e..0f62712 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 @@ -688,14 +688,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.deleteMoreThanOneSpecies=Supprimer les espèces +tutti.editCps.deleteMoreThanOneSpecies.message=<html><body>Êtes-vous sûr de vouloir supprimer toutes les lignes pour les espèces suivantes ? <ul>%s</ul></body></html> +tutti.editCps.deleteMoreThanOneSpecies.tip=Supprimer toutes les lignes des espèces sélectionnées +tutti.editCps.deleteMoreThanOneSpecies.title=Suppression des lignes des espèces +tutti.editCps.deleteOneSpecies=Supprimer l'espèce +tutti.editCps.deleteOneSpecies.message=Êtes-vous sûr de vouloir supprimer toutes les lignes pour l'espèce %s ? +tutti.editCps.deleteOneSpecies.tip=Supprimer toutes les lignes de l'espèce sélectionnée +tutti.editCps.deleteOneSpecies.title=Suppression des lignes d'une espèce 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=Prendre en compte la maturité pour l'espèce sélectionnée tutti.editCps.field.species.tip=Espèce -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.