This is an automated email from the git hooks/post-receive script. New commit to branch feature/7930 in repository tutti. See http://git.codelutin.com/tutti.git commit a82e69b1b10d98f1d1ce0c9a783b6c66b1f12e95 Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 9 18:16:23 2016 +0100 - ajout des lignes mature et immatue si la case maturité est cochee - renderer des maturités - cellule de min size 0 non editable - ajout de la suppression des lignes d'une espèce refs #7930 --- .../fr/ifremer/tutti/service/DecoratorService.java | 18 +----- .../CalcifiedPiecesSamplingEditorTableModel.java | 32 ++++++++++ .../CalcifiedPiecesSamplingEditorUI.jaxx | 3 +- .../CalcifiedPiecesSamplingEditorUI.jcss | 9 ++- .../CalcifiedPiecesSamplingEditorUIHandler.java | 10 +++- .../actions/AddSpeciesAction.java | 31 +++++++--- .../actions/DeleteSpeciesAction.java | 69 ++++++++++++++++++++++ .../actions/SplitSpeciesAction.java | 21 ++++--- .../resources/i18n/tutti-ui-swing_en_GB.properties | 3 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 13 ++-- 10 files changed, 168 insertions(+), 41 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java index e7aaf49..7108250 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java @@ -82,8 +82,6 @@ public class DecoratorService extends AbstractTuttiService { public static final String MATURITY = "maturity"; - public static final String SHORT_MATURITY = "shortMaturity"; - public static final Comparator<FishingOperation> FISHING_OPERATION_COMPARATOR_BY_GEAR_SHOOTING_START_DATE = new Comparator<FishingOperation>() { @Override public int compare(FishingOperation o1, FishingOperation o2) { @@ -161,8 +159,7 @@ public class DecoratorService extends AbstractTuttiService { } }); registerDecorator(SPACE_EVERY_3_DIGIT, new SpaceEvery3DigitDecorator()); - registerDecorator(MATURITY, new MaturityDecorator(false)); - registerDecorator(SHORT_MATURITY, new MaturityDecorator(true)); + registerDecorator(MATURITY, new MaturityDecorator()); registerDecorator(new VesselDecorator()); registerDecorator(new ProgramDecorator()); registerTuttiDecorator(Program.class, ONLY_NAME, "${name}$s", SEPARATOR, " - "); @@ -436,11 +433,8 @@ public class DecoratorService extends AbstractTuttiService { public static class MaturityDecorator extends Decorator<Boolean> { - protected boolean shortRendering; - - protected MaturityDecorator(boolean shortRendering) { + protected MaturityDecorator() { super(Boolean.class); - this.shortRendering = shortRendering; } @Override @@ -453,13 +447,7 @@ public class DecoratorService extends AbstractTuttiService { } else { Boolean maturity = (Boolean) bean; - - if (shortRendering) { - result = maturity ? t("tutti.maturity.mature.short") : t("tutti.maturity.immature.short"); - - } else { - result = maturity ? t("tutti.maturity.mature") : t("tutti.maturity.immature"); - } + result = maturity ? t("tutti.maturity.mature") : t("tutti.maturity.immature"); } return result; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java index 25c8064..1d8ffa4 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorTableModel.java @@ -46,6 +46,25 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication return new CalcifiedPiecesSamplingEditorRowModel(); } + public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, + Boolean maturity) { + return createNewRow(species, maturity, 0, null); + } + + public CalcifiedPiecesSamplingEditorRowModel createNewRow(Species species, + Boolean maturity, + int minSize, + Integer maxSize) { + + CalcifiedPiecesSamplingEditorRowModel newRow = createNewRow(); + newRow.setSpecies(species); + newRow.setMaturity(maturity); + newRow.setMinSize(minSize); + newRow.setMaxSize(maxSize); + + return newRow; + } + /** * Return the list of used species in the table (used to fill the * comparator cache for species sort) @@ -60,4 +79,17 @@ public class CalcifiedPiecesSamplingEditorTableModel extends AbstractApplication } return result; } + + @Override + protected boolean isCellEditable(int rowIndex, + int columnIndex, + ColumnIdentifier<CalcifiedPiecesSamplingEditorRowModel> propertyName) { + boolean result = super.isCellEditable(rowIndex, columnIndex, propertyName); + + if (result && MIN_SIZE.equals(propertyName)) { + int minSize = (int) getValueAt(rowIndex, columnIndex); + result = minSize > 0; + } + return result; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx index 7cffb53..44b86cf 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jaxx @@ -28,6 +28,7 @@ <JPopupMenu id='cpsTablePopup'> <JMenuItem id='splitCpsRowMenu'/> + <JMenuItem id='deleteSpeciesMenu'/> </JPopupMenu> <Table fill='both' constraints='BorderLayout.CENTER'> @@ -39,7 +40,7 @@ genericType='Species'/> </cell> <cell fill='both'> - <JComboBox id='maturityComboBox'/> + <JCheckBox id='maturityCheckBox'/> </cell> <cell fill='both'> <JButton id='addSpeciesButton'/> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss index d3207f3..ff9a4b8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUI.jcss @@ -8,7 +8,8 @@ BeanFilterableComboBox { _help: {"tutti.editCps.field.species.help"}; } -#maturityComboBox { +#maturityCheckBox { + text: "tutti.editCps.field.maturity"; toolTipText: "tutti.editCps.field.maturity.tip"; _help: {"tutti.editCps.field.maturity.help"}; } @@ -16,9 +17,15 @@ BeanFilterableComboBox { #addSpeciesButton { actionIcon: add; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.AddSpeciesAction.class}; + enabled: { speciesComboBox.getSelectedItem() != null }; } #splitCpsRowMenu { actionIcon: add; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.SplitSpeciesAction.class}; +} + +#deleteSpeciesMenu { + actionIcon: delete; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions.DeleteSpeciesAction.class}; } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java index dd67edf..4d64fe5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/CalcifiedPiecesSamplingEditorUIHandler.java @@ -6,6 +6,7 @@ import fr.ifremer.tutti.service.TuttiDecorator; import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.util.TuttiUI; import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; @@ -51,9 +52,12 @@ public class CalcifiedPiecesSamplingEditorUIHandler extends AbstractTuttiUIHandl speciesColumn.putClientProperty(SpeciesAbleBatchRowHelper.SPECIES_DECORATOR, speciesDecorator); speciesColumn.setCellRenderer(newTableCellRender(speciesDecorator)); - addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MATURITY); - addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MIN_SIZE); - addColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE); + addColumnToModel(columnModel, + null, + newTableCellRender(Boolean.class, DecoratorService.MATURITY), + CalcifiedPiecesSamplingEditorTableModel.MATURITY); + addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MIN_SIZE, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); + addIntegerColumnToModel(columnModel, CalcifiedPiecesSamplingEditorTableModel.MAX_SIZE, TuttiUI.INT_6_DIGITS_PATTERN, cpsTable); final CalcifiedPiecesSamplingEditorTableModel tableModel = new CalcifiedPiecesSamplingEditorTableModel(columnModel); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java index 0413981..aa807bd 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/AddSpeciesAction.java @@ -8,6 +8,9 @@ import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; +import java.util.ArrayList; +import java.util.List; + /** * @author Kevin Morin (Code Lutin) * @since 4.5 @@ -25,21 +28,31 @@ public class AddSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplin CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) ui.getCpsTable().getModel(); - CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(); - newRow.setSpecies(species); - newRow.setMaturity(null); - newRow.setMinSize(0); - newRow.setMaxSize(null); + List<CalcifiedPiecesSamplingEditorRowModel> newRows = new ArrayList<>(); + if (ui.getMaturityCheckBox().isSelected()) { + + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, true); + newRows.add(newRow); + + newRow = tableModel.createNewRow(species, false); + newRows.add(newRow); - ui.getModel().getCspRows().add(newRow); + } else { + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(species, null); + newRows.add(newRow); + } + + ui.getModel().getCspRows().addAll(newRows); speciesComboBox.removeItem(species); - tableModel.fireTableRowsInserted(newRow); + int firstRowIndex = tableModel.getRowIndex(newRows.get(0)); + int lastRowIndex = tableModel.getRowIndex(newRows.get(newRows.size() - 1)); + + tableModel.fireTableRowsInserted(firstRowIndex, lastRowIndex); // select this new row - int rowIndex = tableModel.getRowIndex(newRow); - SwingUtil.setSelectionInterval(ui.getCpsTable(), rowIndex); + SwingUtil.setSelectionInterval(ui.getCpsTable(), firstRowIndex); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java new file mode 100644 index 0000000..e409703 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/DeleteSpeciesAction.java @@ -0,0 +1,69 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.actions; + +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorTableModel; +import fr.ifremer.tutti.ui.swing.content.protocol.calcifiedpiecessampling.CalcifiedPiecesSamplingEditorUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXTable; + +import javax.swing.JOptionPane; +import java.util.List; +import java.util.TreeSet; +import java.util.stream.Collectors; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class DeleteSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSamplingEditorUI> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(DeleteSpeciesAction.class); + + public DeleteSpeciesAction(CalcifiedPiecesSamplingEditorUI ui) { + super(ui); + } + + @Override + protected void onActionPerformed(CalcifiedPiecesSamplingEditorUI ui) { + + JXTable cpsTable = ui.getCpsTable(); + CalcifiedPiecesSamplingEditorTableModel tableModel = (CalcifiedPiecesSamplingEditorTableModel) cpsTable.getModel(); + + int selectedRow = cpsTable.getSelectedRow(); + if (log.isInfoEnabled()) { + log.info("selected row " + selectedRow); + } + + List<CalcifiedPiecesSamplingEditorRowModel> cspRows = ui.getModel().getCspRows(); + + CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); + + Species speciesToDelete = row.getSpecies(); + String decoratedSpecies = ui.getHandler().getDecorator(Species.class, null).toString(speciesToDelete); + int confirmDeletion = JOptionPane.showConfirmDialog(ui, + t("tutti.editCps.deleteSpecies.message", decoratedSpecies), + t("tutti.editCps.deleteSpecies.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + + if (confirmDeletion == JOptionPane.YES_OPTION) { + + List<CalcifiedPiecesSamplingEditorRowModel> rowsToDelete = + cspRows.stream().filter(r -> r.getSpecies().equals(speciesToDelete)).collect(Collectors.toList()); + + TreeSet<Integer> indexesToDelete = + new TreeSet<>(rowsToDelete.stream().map(cspRows::indexOf).collect(Collectors.toSet())); + + cspRows.removeAll(rowsToDelete); + + tableModel.fireTableRowsDeleted(indexesToDelete.first(), indexesToDelete.last()); + } + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java index 2407855..a99d51f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/calcifiedpiecessampling/actions/SplitSpeciesAction.java @@ -9,6 +9,7 @@ import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; import javax.swing.JOptionPane; +import java.util.List; /** * @author Kevin Morin (Code Lutin) @@ -37,17 +38,23 @@ public class SplitSpeciesAction extends SimpleActionSupport<CalcifiedPiecesSampl log.info("selected row " + selectedRow); } - CalcifiedPiecesSamplingEditorRowModel row = ui.getModel().getCspRows().get(selectedRow); + List<CalcifiedPiecesSamplingEditorRowModel> cspRows = ui.getModel().getCspRows(); + + CalcifiedPiecesSamplingEditorRowModel row = cspRows.get(selectedRow); Integer exMaxSize = row.getMaxSize(); row.setMaxSize(minSize - 1); - CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(); - newRow.setSpecies(row.getSpecies()); - newRow.setMaturity(row.getMaturity()); - newRow.setMinSize(minSize); - newRow.setMaxSize(exMaxSize); + CalcifiedPiecesSamplingEditorRowModel newRow = tableModel.createNewRow(row.getSpecies(), + row.getMaturity(), + minSize, + exMaxSize); + +// newRow.addPropertyChangeListener(CalcifiedPiecesSamplingEditorRowModel.PROPERTY_MIN_SIZE, evt -> { +// row.setMaxSize(((int) evt.getNewValue()) - 1); +// tableModel.fireTableRowsInserted(row); +// }); - ui.getModel().getCspRows().add(newRow); + cspRows.add(selectedRow + 1, newRow); tableModel.fireTableRowsUpdated(selectedRow, selectedRow); tableModel.fireTableRowsInserted(newRow); diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 9a83634..f786128 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -721,6 +721,9 @@ tutti.editCatchBatch.legend.marineLitter= tutti.editCatchBatch.legend.species= tutti.editCatchBatch.legend.total= tutti.editCatchBatch.svgLoading.error= +tutti.editCps.deleteSpecies.message= +tutti.editCps.deleteSpecies.title= +tutti.editCps.field.maturity= tutti.editCps.field.maturity.tip= tutti.editCps.field.species.tip= tutti.editCps.table.header.maturity.field= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index e4c9229..58657bb 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -683,15 +683,18 @@ tutti.editCatchBatch.legend.marineLitter=Macro déchets tutti.editCatchBatch.legend.species=Espèces tutti.editCatchBatch.legend.total=Capture tutti.editCatchBatch.svgLoading.error=Erreur lors du chargement du diagramme du résumé +tutti.editCps.deleteSpecies.message= +tutti.editCps.deleteSpecies.title= +tutti.editCps.field.maturity=Maturité tutti.editCps.field.maturity.tip= -tutti.editCps.field.species.tip= -tutti.editCps.table.header.maturity.field= +tutti.editCps.field.species.tip=Espèce +tutti.editCps.table.header.maturity.field=Maturité tutti.editCps.table.header.maturity.field.tip= -tutti.editCps.table.header.maxSize.field= +tutti.editCps.table.header.maxSize.field=Taille max tutti.editCps.table.header.maxSize.field.tip= -tutti.editCps.table.header.minSize.field= +tutti.editCps.table.header.minSize.field=Taille min tutti.editCps.table.header.minSize.field.tip= -tutti.editCps.table.header.species.field= +tutti.editCps.table.header.species.field=Espèce tutti.editCps.table.header.species.field.tip= tutti.editCruise.action.closeEditCruise=Fermer tutti.editCruise.action.closeEditCruise.mnemonic=F -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.