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 19c1e50226b3b75ed81798f70b8c55504a78142a Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Apr 25 20:18:27 2016 +0200 Amélioration du code d'interaction des modèles, mais il resterait tellement à revoire :) (See #8237) --- .../IndividualObservationBatchTableHandler.java | 123 +++++++++++---------- .../IndividualObservationBatchUIModel.java | 49 ++++++-- .../frequency/SpeciesFrequencyTableModel.java | 25 +++++ .../species/frequency/SpeciesFrequencyUIModel.java | 49 ++++---- 4 files changed, 155 insertions(+), 91 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchTableHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchTableHandler.java index 17f1169..a442060 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchTableHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchTableHandler.java @@ -198,6 +198,7 @@ public class IndividualObservationBatchTableHandler implements Closeable { onSamplingRowChanged(source, oldState, newState); onRowChangedForFrequencies(source, oldState, newState); + individualObservationsModel.recomputeRowValidState(source); model.recomputeCanEditLengthStep(); model.setModify(true); @@ -207,25 +208,29 @@ public class IndividualObservationBatchTableHandler implements Closeable { this.individualObservationRowWeightChangedListener = event -> { IndividualObservationBatchRowModel source = (IndividualObservationBatchRowModel) event.getSource(); - if (!source.withSize()) { - return; - } + if (source.withSize()) { - Float oldWeight = (Float) event.getOldValue(); - Float size = source.getSize(); + Float oldWeight = (Float) event.getOldValue(); + Float size = source.getSize(); - CaracteristicQualitativeValue maturity = individualObservationsModel.getMaturityValue(source); - CaracteristicQualitativeValue gender = individualObservationsModel.getGender(source); + CaracteristicQualitativeValue maturity = individualObservationsModel.getMaturityValue(source); + CaracteristicQualitativeValue gender = individualObservationsModel.getGender(source); - String samplingCode = source.getSamplingCode(); + String samplingCode = source.getSamplingCode(); - boolean oldValid = source.computeValid(size != null, oldWeight != null); - boolean newValid = source.computeValid(); + boolean oldValid = source.computeValid(size != null, oldWeight != null); + boolean newValid = source.computeValid(); - IndividualObservationBatchRowState oldState = new IndividualObservationBatchRowState(size, oldWeight, maturity, gender, samplingCode, oldValid); - IndividualObservationBatchRowState newState = new IndividualObservationBatchRowState(size, source.getWeight(), maturity, gender, samplingCode, newValid); - onSamplingRowChanged(source, oldState, newState); - onRowChangedForFrequencies(source, oldState, newState); + IndividualObservationBatchRowState oldState = new IndividualObservationBatchRowState(size, oldWeight, maturity, gender, samplingCode, oldValid); + IndividualObservationBatchRowState newState = new IndividualObservationBatchRowState(size, source.getWeight(), maturity, gender, samplingCode, newValid); + onSamplingRowChanged(source, oldState, newState); + onRowChangedForFrequencies(source, oldState, newState); + + } else { + + individualObservationsModel.recomputeRowValidState(source); + + } model.recomputeCanEditLengthStep(); model.setModify(true); @@ -236,22 +241,26 @@ public class IndividualObservationBatchTableHandler implements Closeable { this.individualObservationRowSamplingCodeChangedListener = event -> { IndividualObservationBatchRowModel source = (IndividualObservationBatchRowModel) event.getSource(); - if (!source.withSize()) { - return; - } + if (source.withSize()) { - String oldSamplingCode = (String) event.getOldValue(); + String oldSamplingCode = (String) event.getOldValue(); - Float size = source.getSize(); - Float weight = source.getWeight(); - CaracteristicQualitativeValue maturity = individualObservationsModel.getMaturityValue(source); - CaracteristicQualitativeValue gender = individualObservationsModel.getGender(source); + Float size = source.getSize(); + Float weight = source.getWeight(); + CaracteristicQualitativeValue maturity = individualObservationsModel.getMaturityValue(source); + CaracteristicQualitativeValue gender = individualObservationsModel.getGender(source); - boolean validState = source.computeValid(); + boolean validState = source.computeValid(); - IndividualObservationBatchRowState oldState = new IndividualObservationBatchRowState(size, weight, maturity, gender, oldSamplingCode, validState); - IndividualObservationBatchRowState newState = new IndividualObservationBatchRowState(size, weight, maturity, gender, source.getSamplingCode(), validState); - onSamplingRowChanged(source, oldState, newState); + IndividualObservationBatchRowState oldState = new IndividualObservationBatchRowState(size, weight, maturity, gender, oldSamplingCode, validState); + IndividualObservationBatchRowState newState = new IndividualObservationBatchRowState(size, weight, maturity, gender, source.getSamplingCode(), validState); + onSamplingRowChanged(source, oldState, newState); + + } else { + + individualObservationsModel.recomputeRowValidState(source); + + } model.setModify(true); @@ -261,53 +270,56 @@ public class IndividualObservationBatchTableHandler implements Closeable { this.individualObservationRowCaracteristicsChangedListener = event -> { IndividualObservationBatchRowModel source = (IndividualObservationBatchRowModel) event.getSource(); + if (source.withSize()) { - if (!source.withSize()) { - return; - } + CaracteristicMap oldCaracteristicMap = (CaracteristicMap) event.getOldValue(); - CaracteristicMap oldCaracteristicMap = (CaracteristicMap) event.getOldValue(); + CaracteristicQualitativeValue oldGender = individualObservationsModel.getGender(oldCaracteristicMap); + CaracteristicQualitativeValue newGender = individualObservationsModel.getGender(source); - CaracteristicQualitativeValue oldGender = individualObservationsModel.getGender(oldCaracteristicMap); - CaracteristicQualitativeValue newGender = individualObservationsModel.getGender(source); + if (!Objects.equals(oldGender, newGender)) { - if (!Objects.equals(oldGender, newGender)) { + // Le sexe a changé - // Le sexe a changé + Float size = source.getSize(); + Float weight = source.getWeight(); + CaracteristicQualitativeValue maturity = individualObservationsModel.getMaturityValue(source); + String samplingCode = source.getSamplingCode(); - Float size = source.getSize(); - Float weight = source.getWeight(); - CaracteristicQualitativeValue maturity = individualObservationsModel.getMaturityValue(source); - String samplingCode = source.getSamplingCode(); + boolean validState = source.computeValid(); - boolean validState = source.computeValid(); + IndividualObservationBatchRowState oldState = new IndividualObservationBatchRowState(size, weight, maturity, oldGender, samplingCode, validState); + IndividualObservationBatchRowState newState = new IndividualObservationBatchRowState(size, weight, maturity, newGender, samplingCode, validState); + onSamplingRowChanged(source, oldState, newState); - IndividualObservationBatchRowState oldState = new IndividualObservationBatchRowState(size, weight, maturity, oldGender, samplingCode, validState); - IndividualObservationBatchRowState newState = new IndividualObservationBatchRowState(size, weight, maturity, newGender, samplingCode, validState); - onSamplingRowChanged(source, oldState, newState); + } else if (individualObservationsModel.withMaturityCaracteristic()) { - } else if (individualObservationsModel.withMaturityCaracteristic()) { + CaracteristicQualitativeValue oldMaturity = individualObservationsModel.getMaturityValue(oldCaracteristicMap); + CaracteristicQualitativeValue newMaturity = individualObservationsModel.getMaturityValue(source); - CaracteristicQualitativeValue oldMaturity = individualObservationsModel.getMaturityValue(oldCaracteristicMap); - CaracteristicQualitativeValue newMaturity = individualObservationsModel.getMaturityValue(source); + if (!Objects.equals(oldMaturity, newMaturity)) { - if (!Objects.equals(oldMaturity, newMaturity)) { + // La maturité a changée - // La maturité a changée + Float size = source.getSize(); + Float weight = source.getWeight(); + CaracteristicQualitativeValue gender = individualObservationsModel.getGender(source); + String samplingCode = source.getSamplingCode(); - Float size = source.getSize(); - Float weight = source.getWeight(); - CaracteristicQualitativeValue gender = individualObservationsModel.getGender(source); - String samplingCode = source.getSamplingCode(); + boolean validState = source.computeValid(); - boolean validState = source.computeValid(); + IndividualObservationBatchRowState oldState = new IndividualObservationBatchRowState(size, weight, oldMaturity, gender, samplingCode, validState); + IndividualObservationBatchRowState newState = new IndividualObservationBatchRowState(size, weight, newMaturity, gender, samplingCode, validState); + onSamplingRowChanged(source, oldState, newState); - IndividualObservationBatchRowState oldState = new IndividualObservationBatchRowState(size, weight, oldMaturity, gender, samplingCode, validState); - IndividualObservationBatchRowState newState = new IndividualObservationBatchRowState(size, weight, newMaturity, gender, samplingCode, validState); - onSamplingRowChanged(source, oldState, newState); + } } + } else { + + individualObservationsModel.recomputeRowValidState(source); + } model.setModify(true); @@ -492,7 +504,6 @@ public class IndividualObservationBatchTableHandler implements Closeable { // Recalcul des mensurations à partir des observations individuelles frequencyTableModel.reloadRowsFromIndividualObservations(); - frequencyTableModel.fireTableDataChanged(); individualObservationTableModel.fireTableDataChanged(); }); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchUIModel.java index 6ae66a2..f1eba2b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationBatchUIModel.java @@ -29,7 +29,6 @@ import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.service.sampling.SamplingCodePrefix; -import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; import org.apache.commons.logging.Log; @@ -57,9 +56,25 @@ public class IndividualObservationBatchUIModel extends AbstractTuttiTableUIModel public static final String PROPERTY_NOT_EDITABLE_CARACTERISTIC = "notEditableCaracteristic"; - private final WeightUnit individualObservationWeightUnit; - + /** + * Global screen model. + * + * @since 4.5 + */ private final SpeciesFrequencyUIModel parentModel; + + /** + * Samping notification model. + * + * @since 4.5 + */ + private final SamplingNotificationZoneModel samplingNotificationZoneModel; + + /** + * Sexe caracteristic. + * + * @since 4.5 + */ private final Caracteristic sexCaracteristic; /** @@ -88,7 +103,11 @@ public class IndividualObservationBatchUIModel extends AbstractTuttiTableUIModel */ protected SamplingCodePrefix samplingCodePrefix; - private final SamplingNotificationZoneModel samplingNotificationZoneModel; + /** + * Table model. + * + * @since 4.5 + */ private IndividualObservationBatchTableModel individualObservationTableModel; @Override @@ -98,12 +117,10 @@ public class IndividualObservationBatchUIModel extends AbstractTuttiTableUIModel public IndividualObservationBatchUIModel(SpeciesFrequencyUIModel parentModel, Caracteristic sexCaracteristic, - WeightUnit individualObservationWeightUnit, List<Caracteristic> defaultCaracteristic) { super(SpeciesBatchRowModel.class, null, null); this.parentModel = parentModel; this.sexCaracteristic = sexCaracteristic; - this.individualObservationWeightUnit = individualObservationWeightUnit; this.defaultCaracteristic = defaultCaracteristic == null ? new ArrayList<>() : new ArrayList<>(defaultCaracteristic); this.samplingNotificationZoneModel = new SamplingNotificationZoneModel(); } @@ -216,7 +233,21 @@ public class IndividualObservationBatchUIModel extends AbstractTuttiTableUIModel log.info("Revalidate all individual observation rows"); } - rows.forEach(this::recomputeRowValidState); + rowsInError.clear(); + + rows.forEach(row -> { + // recompute row valid state + boolean valid = row.computeValid(); + + // apply it to row + row.setValid(valid); + if (!valid) { + rowsInError.add(row); + } + + }); + + firePropertyChange(PROPERTY_ROWS_IN_ERROR, null, rowsInError); } @@ -294,8 +325,10 @@ public class IndividualObservationBatchUIModel extends AbstractTuttiTableUIModel rowsInError.clear(); individualObservationTableModel.clear(); + firePropertyChange(PROPERTY_ROWS_IN_ERROR, null, rowsInError); + recomputeCanEditLengthStep(); - recomputeRowsValidateState(); +// recomputeRowsValidateState(); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java index 1aeb3d3..f241916 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java @@ -223,6 +223,29 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp } + public boolean recomputeCanEditLengthStep() { + boolean result = true; + if (rows != null) { + for (SpeciesFrequencyRowModel row : rows) { + + if (row.isEmpty()) { + // la ligne est vide + continue; + } + if (row.getLengthStep() == null || row.getNumber() == null) { + // la ligne n'est pas complete + continue; + } + + // une ligne non vide et complete a ete trouvee + // on ne peut plus editer + result = false; + break; + } + } + return result; + } + public void decrementNumberForLengthStep(Float lengthStep) { SpeciesFrequencyRowModel row = modelCache.getRowCache().get(lengthStep); @@ -503,6 +526,8 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp uiModel.reloadRows(); + fireTableDataChanged(); + } 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 1617359..93e738e 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 @@ -278,7 +278,6 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa private final boolean protocolFilled; private final boolean protocolUseCalcifiedPieceSampling; - private boolean speciesDefinedInCalcifiedPiecesSampling; public SpeciesFrequencyUIModel(SpeciesOrBenthosBatchUISupport speciesOrBenthosBatchUISupport, WeightUnit individualObservationWeightUnit, @@ -303,7 +302,7 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa this.frequenciesConfigurationMode = FrequencyConfigurationMode.AUTO_GEN; setEmptyRows(new HashSet<>()); - this.individualObservationModel = new IndividualObservationBatchUIModel(this, sexCaracteristic, individualObservationWeightUnit, defaultCaracteristic); + this.individualObservationModel = new IndividualObservationBatchUIModel(this, sexCaracteristic, defaultCaracteristic); this.averageWeightsHistogramModel = new AverageWeightsHistogramModel(weightUnit); this.frequenciesHistogramModel = new FrequenciesHistogramModel(); @@ -776,26 +775,7 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public void recomputeCanEditLengthStep() { - boolean result = true; - - if (rows != null) { - for (SpeciesFrequencyRowModel row : rows) { - - if (row.isEmpty()) { - // la ligne est vide - continue; - } - if (row.getLengthStep() == null || row.getNumber() == null) { - // la ligne n'est pas complete - continue; - } - - // une ligne non vide et complete a ete trouvee - // on ne peut plus editer - result = false; - break; - } - } + boolean result = frequencyTableModel.recomputeCanEditLengthStep(); if (result) { result = individualObservationModel.recomputeCanEditLengthStep(); @@ -834,10 +814,24 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public void recomputeRowsValidateState() { if (log.isInfoEnabled()) { - log.info("Revalidate all rows"); + log.info("Revalidate all frequency rows"); } - rows.forEach(this::recomputeRowValidState); + rowsInError.clear(); + + rows.forEach(row -> { + // recompute row valid state + boolean valid = isRowValid(row); + + // apply it to row + row.setValid(valid); + if (!valid) { + rowsInError.add(row); + } + + }); + + firePropertyChange(PROPERTY_ROWS_IN_ERROR, null, rowsInError); } @@ -878,17 +872,18 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa // Ne pas supprimer utiliser par la validation public void setNonEmptyIndividualObservationRowsInError(boolean nonEmptyIndividualObservationRowsInError) { - boolean oldValue = this.nonEmptyIndividualObservationRowsInError; + boolean oldValue = isNonEmptyIndividualObservationRowsInError(); this.nonEmptyIndividualObservationRowsInError = nonEmptyIndividualObservationRowsInError; firePropertyChanged(PROPERTY_NON_EMPTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, oldValue, nonEmptyIndividualObservationRowsInError); } public void clear() { - rowsInError.clear(); frequencyTableModel.clear(); recomputeCanEditLengthStep(); - recomputeRowsValidateState(); + + rowsInError.clear(); + firePropertyChange(PROPERTY_ROWS_IN_ERROR, null, rowsInError); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.