This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit d26a5b9897d5549f187eebb7f080655b2298588d Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 1 18:57:28 2016 +0100 - validation des lignes d'observations - correction de l'ouverture de l'editeur de caracteristiques refs #8019 --- .../content/operation/catches/EditCatchesUI.jaxx | 6 + .../operation/catches/EditCatchesUIHandler.java | 49 +++++- .../accidental/AccidentalBatchUIHandler.java | 5 +- .../frequency/SpeciesFrequencyUIHandler.java | 185 ++++++++++++++------- .../species/frequency/SpeciesFrequencyUIModel.java | 121 ++++++++++++-- .../frequency/actions/RemoveObservationAction.java | 1 + .../CaracteristicMapCellComponent.java | 2 +- .../CaracteristicMapColumnUIHandler.java | 4 +- .../caracteristics/CaracteristicMapEditorUI.jaxx | 2 +- 9 files changed, 294 insertions(+), 81 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx index 6a8ff08..0bd414d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx @@ -142,6 +142,12 @@ public EditCatchesUI(FishingOperationsUI parentUI) { <SpeciesFrequencyUI id='speciesTabFrequencyEditor' constructorParams='speciesTabContent'/> </JXTitledPanel> + <JXTitledPanel id='speciesIndividualObservationCaracteristicMapEditorReminderLabel' + constraints='EditCatchesUIHandler.EDIT_CARACTERISTICS_CARD'> + <CaracteristicMapEditorUI + id='speciesIndividualObservationCaracteristicMapEditor' + constructorParams='speciesTabContent'/> + </JXTitledPanel> </JPanel> </tab> <tab id='benthosTab'> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java index e1a96ea..1938c07 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java @@ -49,6 +49,8 @@ import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTabbedPane; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import javax.swing.table.TableColumn; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -76,9 +78,9 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi public static final String EDIT_CARACTERISTICS_CARD = "caracteristicsCard"; -// public static final String CAROUSSEL_TREMIE_VESSEL = "carousselTremieVessel"; + public static final String CAROUSSEL_TREMIE_VESSEL = "carousselTremieVessel"; -// public static final String CLASSIC_VESSEL = "classicVessel"; + public static final String CLASSIC_VESSEL = "classicVessel"; /** Logger. */ private static final Log log = LogFactory.getLog(EditCatchesUIHandler.class); @@ -127,7 +129,7 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi public void beforeInit(EditCatchesUI ui) { super.beforeInit(ui); - this.catchBatchMonitor = new TuttiBeanMonitor<>( + this.catchBatchMonitor = new TuttiBeanMonitor<EditCatchesUIModel>( EditCatchesUIModel.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT, EditCatchesUIModel.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT, EditCatchesUIModel.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT, @@ -535,6 +537,10 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi } else if (EDIT_FREQUENCY_CARD.equals(card)) { tuttiUi = ui.getSpeciesTabFrequencyEditor(); + + } else if (EDIT_CARACTERISTICS_CARD.equals(card)) { + titlePanel = ui.getSpeciesIndividualObservationCaracteristicMapEditorReminderLabel(); + title = n("tutti.editCaracteristics.title"); } if (tuttiUi != null) { @@ -547,6 +553,43 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi } } +// public void setIndividualObservationSelectedCard(String card, Species species) { +// JPanel panel = ui.getIndividualObservationTabPanel(); +// CardLayout2Ext layout = (CardLayout2Ext) panel.getLayout(); +// if (!card.equals(layout.getSelected())) { +// layout.setSelected(card); +// +// JPanel actionPanel = getUI().getCreateFishingOperationActions(); +// if (MAIN_CARD.equals(card)) { +// registerValidators(); +// actionPanel.setVisible(true); +// +// } else { +// actionPanel.setVisible(false); +// TuttiUI tuttiUi = null; +// JXTitledPanel titlePanel = null; +// String title = ""; +// +// if (CREATE_BATCH_CARD.equals(card)) { +// tuttiUi = ui.getIndividualObservationTabCreateBatch(); +// titlePanel = ui.getIndividualObservationTabCreateBatchReminderLabel(); +// title = n("tutti.createIndividualObservationBatch.title"); +// +// } else if (EDIT_CARACTERISTICS_CARD.equals(card)) { +// titlePanel = ui.getIndividualObservationCaracteristicMapEditorReminderLabel(); +// title = n("tutti.editCaracteristics.title"); +// } +// +// if (tuttiUi != null) { +// registerValidators(tuttiUi.getHandler().getValidator()); +// } +// if (titlePanel != null) { +// titlePanel.setTitle(ui.getIndividualObservationTabFishingOperationReminderLabel().getTitle() + " - " + t(title, decorate(species))); +// } +// } +// } +// } + public void editBenthosFrequencies(int rowIndex) { JXTable benthosTable = ui.getBenthosTabContent().getTable(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java index 379437b..b2df417 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java @@ -45,6 +45,7 @@ import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer; import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapCellComponent; +import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapColumnRowModel; import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapColumnUIHandler; import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapEditorUI; import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor; @@ -368,9 +369,9 @@ public class AccidentalBatchUIHandler } @Override - public void showCaracteristicMapEditor(Species species) { + public void showCaracteristicMapEditor(CaracteristicMapColumnRowModel editRow) { EditCatchesUI parent = getParentContainer(EditCatchesUI.class); - parent.getHandler().setAccidentalSelectedCard(EditCatchesUIHandler.EDIT_CARACTERISTICS_CARD, species); + parent.getHandler().setAccidentalSelectedCard(EditCatchesUIHandler.EDIT_CARACTERISTICS_CARD, editRow.getSpecies()); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index bb4b4b5..defb56e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -59,6 +59,9 @@ import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer; import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapCellComponent; +import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapColumnRowModel; +import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapColumnUIHandler; +import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapEditorUI; import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor; import fr.ifremer.tutti.ui.swing.util.comment.CommentCellRenderer; import fr.ifremer.tutti.ui.swing.util.computable.ComputableDataTableCell; @@ -102,6 +105,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.beans.PropertyVetoException; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -115,7 +119,8 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 0.2 */ -public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<SpeciesFrequencyRowModel, SpeciesFrequencyUIModel, SpeciesFrequencyUI> { +public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<SpeciesFrequencyRowModel, SpeciesFrequencyUIModel, SpeciesFrequencyUI> + implements CaracteristicMapColumnUIHandler { /** Logger. */ private static final Log log = LogFactory.getLog(SpeciesFrequencyUIHandler.class); @@ -218,6 +223,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci updateFrequencyRowsWeights(row.getSize(), weightToAdd); } } + + getModel().recomputeIndividualObservationRowValidState(row); } }; @@ -247,6 +254,33 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } @Override + public CaracteristicMapEditorUI getCaracteristicMapEditor() { + EditCatchesUI parent = getParentContainer(EditCatchesUI.class); + return parent.getSpeciesIndividualObservationCaracteristicMapEditor(); + } + + @Override + public void showCaracteristicMapEditor(CaracteristicMapColumnRowModel editRow) { + EditCatchesUI parent = getParentContainer(EditCatchesUI.class); + + parent.getHandler().setSpeciesSelectedCard(EditCatchesUIHandler.EDIT_CARACTERISTICS_CARD); + + //FIXME title + IndividualObservationBatchRowModel row = (IndividualObservationBatchRowModel) editRow; + WeightUnit individualObservationWeightUnit = getConfig().getIndividualObservationWeightUnit(); + String title = parent.getSpeciesTabFrequencyEditorReminderLabel().getTitle() + " - " + + row.getSize() + " - " + + individualObservationWeightUnit.renderWeight(row.getWeight()); + parent.getSpeciesIndividualObservationCaracteristicMapEditorReminderLabel().setTitle(title); + } + + @Override + public void hideCaracteristicMapEditor() { + EditCatchesUI parent = getParentContainer(EditCatchesUI.class); + parent.getHandler().setSpeciesSelectedCard(EditCatchesUIHandler.EDIT_FREQUENCY_CARD); + } + + @Override protected void onModelRowsChanged(List<SpeciesFrequencyRowModel> rows) { SpeciesFrequencyUIModel model = getModel(); @@ -391,7 +425,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } SpeciesFrequencyUIHandler.this.ui.getValidator().doValidate(); - ((IndividualObservationBatchTableModel) ui.getObsTable().getModel()).setLengthstepCaracteristic(newValue); + getObsTableModel().setLengthstepCaracteristic(newValue); }); // when lengthStepCaracteristicUnit changed, let's updates the label of some fields @@ -439,23 +473,38 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci }); model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_INDIVIDUAL_OBSERVATION_ROWS, evt -> { - IndividualObservationBatchTableModel obsTableModel = - (IndividualObservationBatchTableModel) getUI().getObsTable().getModel(); - obsTableModel.setRows((List<IndividualObservationBatchRowModel>) evt.getNewValue()); + getObsTableModel().setRows((List<IndividualObservationBatchRowModel>) evt.getNewValue()); }); - model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, evt -> { + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, evt -> { + Set<IndividualObservationBatchRowModel> obsRowsInError = + (Set<IndividualObservationBatchRowModel>) evt.getNewValue(); + + if (obsRowsInError.isEmpty()) { + + reloadRowsFromIndividualObservations(); + + } else { + + model.getRows().clear(); + model.getRowsInError().clear(); + model.reloadRows(); + } + + getTableModel().fireTableDataChanged(); + }); + + model.addVetoableChangeListener(SpeciesFrequencyUIModel.PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, evt -> { - CopyIndividualObservationMode newCopyMode = (CopyIndividualObservationMode) evt.getNewValue(); CopyIndividualObservationMode oldCopyMode = (CopyIndividualObservationMode) evt.getOldValue(); if (oldCopyMode == CopyIndividualObservationMode.NOTHING) { long rowsWithData = model.getRows().stream() - .filter(row -> row.getLengthStep() != null - || row.getNumber() != null - || row.getWeight() != null) - .count(); + .filter(row -> row.getLengthStep() != null + || row.getNumber() != null + || row.getWeight() != null) + .count(); if (rowsWithData > 0) { @@ -471,52 +520,30 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci JOptionPane.QUESTION_MESSAGE); if (i == JOptionPane.CANCEL_OPTION) { - return; + ui.getCopyNothingButton().setSelected(true); + throw new PropertyVetoException("The user does not want to erase his data.", evt); } } } + }); - model.getRows().clear(); - model.reloadRows(); - - if (newCopyMode != null) { - if (newCopyMode != CopyIndividualObservationMode.NOTHING) { - - Caracteristic lengthStepCaracteristic = model.getLengthStepCaracteristic(); - for (IndividualObservationBatchRowModel obsRow : model.getIndividualObservationRows()) { + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, evt -> { - Float size = obsRow.getSize(); - if (size != null) { - size = model.getLengthStep(size); - if (log.isInfoEnabled()) { - log.info("size : " + size); - } - SpeciesFrequencyRowModel row = model.getRowCache().get(size); - if (row == null) { - row = getTableModel().createNewRow(); - row.setLengthStep(size); - row.setLengthStepCaracteristic(lengthStepCaracteristic); - model.getRows().add(row); - model.getRowCache().put(size, row); - } - row.incNumber(); - if (newCopyMode == CopyIndividualObservationMode.ALL && obsRow.getWeight() != null) { - row.addToWeight(obsRow.getWeight()); - } - } - } + CopyIndividualObservationMode newCopyMode = (CopyIndividualObservationMode) evt.getNewValue(); - Collections.sort(model.getRows()); + model.getRows().clear(); + model.getRowsInError().clear(); + model.reloadRows(); - } else { - getTableModel().addNewRow(); - } + model.recomputeIndividualObservationRowsValidateState(); - model.reloadRows(); + if (newCopyMode != null && model.getIndividualObservationRowsInError().isEmpty()) { + reloadRowsFromIndividualObservations(); } getTableModel().fireTableDataChanged(); + getObsTableModel().fireTableDataChanged(); }); @@ -543,6 +570,10 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } + protected IndividualObservationBatchTableModel getObsTableModel() { + return (IndividualObservationBatchTableModel) ui.getObsTable().getModel(); + } + public void showAverageWeightsHistogram() { averageWeightsHistogramPopup.setVisible(true); } @@ -605,15 +636,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.setMaxStep(null); model.setRtp(null); - IndividualObservationBatchTableModel obsTableModel = (IndividualObservationBatchTableModel) ui.getObsTable().getModel(); - obsTableModel.setSpecies(speciesBatch.getSpecies()); - - ArrayList<IndividualObservationBatchRowModel> individualObservationRows = new ArrayList<>(); - model.setIndividualObservationRows(individualObservationRows); - IndividualObservationBatchRowModel emptyRow = obsTableModel.createNewRow(); - emptyRow.addPropertyChangeListener(obsChangedListener); - obsTableModel.addNewRow(emptyRow); - frequencyEditor = editor; Caracteristic lengthStepCaracteristic = null; @@ -779,6 +801,14 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.setLengthStepCaracteristic(lengthStepCaracteristic); model.setRows(rows); + IndividualObservationBatchTableModel obsTableModel = getObsTableModel(); + obsTableModel.setSpecies(speciesBatch.getSpecies()); + + ArrayList<IndividualObservationBatchRowModel> individualObservationRows = new ArrayList<>(); + model.setIndividualObservationRows(individualObservationRows); + obsTableModel.addNewRow(); + model.recomputeIndividualObservationRowsValidateState(); + // keep batch (will be used to push back editing entry) model.setBatch(speciesBatch); @@ -1074,11 +1104,13 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci obsTable); } + WeightUnit individualObservationWeightUnit = getConfig().getIndividualObservationWeightUnit(); + { // Weight column addFloatColumnToModel(columnModel, IndividualObservationBatchTableModel.WEIGHT, - weightUnit, + individualObservationWeightUnit, obsTable); } @@ -1152,7 +1184,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // create obsTable model IndividualObservationBatchTableModel tableModel = - new IndividualObservationBatchTableModel(weightUnit, + new IndividualObservationBatchTableModel(individualObservationWeightUnit, columnModel); obsTable.setModel(tableModel); @@ -1182,6 +1214,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci if (getModel().mustCopyIndividualObservationSize()) { updateFrequencyRowsNumbers(null, newRow.getSize()); } + + getModel().recomputeIndividualObservationRowValidState(newRow); } } }); @@ -1317,6 +1351,45 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci return row; } + protected void reloadRowsFromIndividualObservations() { + SpeciesFrequencyUIModel model = getModel(); + CopyIndividualObservationMode copyMode = model.getCopyIndividualObservationMode(); + + if (copyMode != CopyIndividualObservationMode.NOTHING) { + + Caracteristic lengthStepCaracteristic = model.getLengthStepCaracteristic(); + for (IndividualObservationBatchRowModel obsRow : model.getIndividualObservationRows()) { + + Float size = obsRow.getSize(); + if (size != null) { + size = model.getLengthStep(size); + if (log.isInfoEnabled()) { + log.info("size : " + size); + } + SpeciesFrequencyRowModel row = model.getRowCache().get(size); + if (row == null) { + row = getTableModel().createNewRow(); + row.setLengthStep(size); + row.setLengthStepCaracteristic(lengthStepCaracteristic); + model.getRows().add(row); + model.getRowCache().put(size, row); + } + row.incNumber(); + if (copyMode == CopyIndividualObservationMode.ALL && obsRow.getWeight() != null) { + row.addToWeight(obsRow.getWeight()); + } + } + } + + Collections.sort(model.getRows()); + + } else if (getTableModel().getRowCount() == 0) { + getTableModel().addNewRow(); + } + + model.reloadRows(); + } + @Override public <E> void initBeanFilterableComboBox(BeanFilterableComboBox<E> comboBox, List<E> data, E selectedData) { super.initBeanFilterableComboBox(comboBox, data, selectedData); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 6997915..e093548 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -41,6 +41,8 @@ import org.apache.commons.logging.LogFactory; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; +import java.beans.PropertyVetoException; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -108,6 +110,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_INDIVIDUAL_OBSERVATION_ROWS = "individualObservationRows"; + public static final String PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR = "individualObservationRowsInError"; + /** * Fill mode. * @@ -272,6 +276,13 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa */ protected List<IndividualObservationBatchRowModel> individualObservationRows; + /** + * Individual observations in error + * + * @since 4.5 + */ + protected Set<IndividualObservationBatchRowModel> individualObservationRowsInError; + public SpeciesFrequencyUIModel(WeightUnit weightUnit, SampleCategoryModel sampleCategoryModel, List<Caracteristic> defaultCaracteristic) { @@ -296,6 +307,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa this.defaultCaracteristic = defaultCaracteristic == null ? Lists.<Caracteristic>newArrayList() : Lists.newArrayList(defaultCaracteristic); + + setIndividualObservationRowsInError(new HashSet<>()); } public void reloadRows() { @@ -596,17 +609,28 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa } public void setCopyIndividualObservationMode(CopyIndividualObservationMode copyIndividualObservationMode) { - Object oldValue = getCopyIndividualObservationMode(); + CopyIndividualObservationMode oldValue = getCopyIndividualObservationMode(); this.copyIndividualObservationMode = copyIndividualObservationMode; - firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, oldValue, copyIndividualObservationMode); + + try { + fireVetoableChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, oldValue, copyIndividualObservationMode); + firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, oldValue, copyIndividualObservationMode); + + } catch (PropertyVetoException e) { + if (log.isErrorEnabled()) { + log.error("error in setting copyIndividualObservationMode", e); + } + this.copyIndividualObservationMode = oldValue; + } } public boolean mustCopyIndividualObservationSize() { - return isCopyIndividualObservationAll() || isCopyIndividualObservationSize(); + return getIndividualObservationRowsInError().isEmpty() + && (isCopyIndividualObservationAll() || isCopyIndividualObservationSize()); } public boolean mustCopyIndividualObservationWeight() { - return isCopyIndividualObservationAll(); + return getIndividualObservationRowsInError().isEmpty() && isCopyIndividualObservationAll(); } public boolean isCopyIndividualObservationAll() { @@ -780,22 +804,35 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa Object oldValue = getIndividualObservationRows(); this.individualObservationRows = individualObservationRows; firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS, oldValue, individualObservationRows); - } - protected final void recomputeRowValidState(SpeciesFrequencyRowModel row) { + individualObservationRowsInError.clear(); + for (IndividualObservationBatchRowModel row : individualObservationRows) { + if (!row.isValid()) { + individualObservationRowsInError.add(row); + } + } + setIndividualObservationRowsInError(individualObservationRowsInError); + } - // recompute row valid state - boolean valid = isRowValid(row); + public Set<IndividualObservationBatchRowModel> getIndividualObservationRowsInError() { + return individualObservationRowsInError; + } - // apply it to row - row.setValid(valid); + public void setIndividualObservationRowsInError(Set<IndividualObservationBatchRowModel> individualObservationRowsInError) { + this.individualObservationRowsInError = individualObservationRowsInError; + firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, null, individualObservationRowsInError); + } - if (valid) { - removeRowInError(row); - } else { - addRowInError(row); - } + public void addIndividualObservationRowInError(IndividualObservationBatchRowModel row) { + Object oldValue = new HashSet<>(individualObservationRowsInError); + individualObservationRowsInError.add(row); + firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, oldValue, individualObservationRowsInError); + } + public void removeIndividualObservationRowInError(IndividualObservationBatchRowModel row) { + Object oldValue = new HashSet<>(individualObservationRowsInError); + individualObservationRowsInError.remove(row); + firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, oldValue, individualObservationRowsInError); } public void recomputeRowsValidateState() { @@ -810,6 +847,27 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa } + public void recomputeIndividualObservationRowsValidateState() { + + if (log.isInfoEnabled()) { + log.info("Revalidate all individual observation rows"); + } + + for (IndividualObservationBatchRowModel r : individualObservationRows) { + recomputeIndividualObservationRowValidState(r); + } + + } + + public boolean isIndividualObservationRowValid(IndividualObservationBatchRowModel row) { + return copyIndividualObservationMode == CopyIndividualObservationMode.NOTHING + || copyIndividualObservationMode == CopyIndividualObservationMode.SIZE + && row.getSize() != null + || copyIndividualObservationMode == CopyIndividualObservationMode.ALL + && row.getSize() != null + && row.getWeight() != null; + } + public void setDataSetIntervalWidth(float step) { frequenciesDataset.setIntervalWidth(step); averageWeightsDataset.setIntervalWidth(step); @@ -818,4 +876,37 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public List<Caracteristic> getDefaultCaracteristic() { return defaultCaracteristic; } + + protected final void recomputeRowValidState(SpeciesFrequencyRowModel row) { + + // recompute row valid state + boolean valid = isRowValid(row); + + // apply it to row + row.setValid(valid); + + if (valid) { + removeRowInError(row); + } else { + addRowInError(row); + } + + } + + protected final void recomputeIndividualObservationRowValidState(IndividualObservationBatchRowModel row) { + + // recompute row valid state + boolean valid = isIndividualObservationRowValid(row); + + // apply it to row + row.setValid(valid); + + if (valid) { + removeIndividualObservationRowInError(row); + } else { + addIndividualObservationRowInError(row); + } + + } + } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java index 61bb6fc..ac7e997 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java @@ -59,6 +59,7 @@ public class RemoveObservationAction extends SimpleActionSupport<SpeciesFrequenc if (model.mustCopyIndividualObservationSize()) { handler.updateFrequencyRowsNumbers(row.getSize(), null); } + model.removeIndividualObservationRowInError(row); }); int minSelection = obsTable.getSelectionModel().getMinSelectionIndex(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java index ff27c94..331143f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java @@ -209,7 +209,7 @@ public class CaracteristicMapCellComponent extends DefaultTableCellRenderer { // remove all default caracteristics (caracteristicsToSkip) caracteristicMapEditor.getModel().getAvailableCaracteristics().removeAll(caracteristicsToSkip); caracteristicMapEditor.getHandler().editBatch(editRow, this, caracteristicsUsed); - handler.showCaracteristicMapEditor(editRow.getSpecies()); + handler.showCaracteristicMapEditor(editRow); } public void validateEdition(CaracteristicMapEditorUIModel caracteristicMapEditorModel) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapColumnUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapColumnUIHandler.java index 87a72eb..043e79f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapColumnUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapColumnUIHandler.java @@ -22,8 +22,6 @@ package fr.ifremer.tutti.ui.swing.util.caracteristics; * #L% */ -import fr.ifremer.tutti.persistence.entities.referential.Species; - /** * @author Kevin Morin - kmorin@codelutin.com * @since 2.0 @@ -32,7 +30,7 @@ public interface CaracteristicMapColumnUIHandler { CaracteristicMapEditorUI getCaracteristicMapEditor(); - void showCaracteristicMapEditor(Species species); + void showCaracteristicMapEditor(CaracteristicMapColumnRowModel editRow); void hideCaracteristicMapEditor(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUI.jaxx index c82c7d1..b7b6115 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUI.jaxx @@ -69,7 +69,7 @@ public CaracteristicMapEditorUI(TuttiUI parentUI) { <!-- Form Actions --> <row fill='both'> <cell fill='both' columns='2'> - <JPanel layout='{new GridLayout(1, 0)}'> + <JPanel layout='{new GridLayout(1, 0)}' styleClass="buttonPanel"> <JButton id='cancelButton'/> <JButton id='saveButton'/> </JPanel> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.