This is an automated email from the git hooks/post-receive script. New commit to branch feature/8113-v2 in repository tutti. See http://git.codelutin.com/tutti.git commit 68c21b763088199c9f9c89dcd2a6d8aa8c4ced10 Author: Kevin Morin <morin@codelutin.com> Date: Mon Mar 14 18:23:08 2016 +0100 le modele n'est valide que si les poids sont tous saisis en mode de recopie "tout" (fixes #8113) --- .../species/frequency/SpeciesFrequencyUI.jaxx | 1 + .../frequency/SpeciesFrequencyUIHandler.java | 13 ------------- .../species/frequency/SpeciesFrequencyUIModel.java | 21 +++++++++++++++++++++ .../SpeciesFrequencyUIModel-error-validation.xml | 9 +++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 +- 6 files changed, 33 insertions(+), 14 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx index d43e850..9bbb08f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx @@ -69,6 +69,7 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { <field name='step' component='stepField'/> <field name='rows' component='tableScrollPane'/> <field name='totalWeight' component='totalWeightField'/> + <field name='nonEmptyIndividualObservationRowsInError' component='obsPanel'/> </BeanValidator> <TuttiHelpBroker id='broker' constructorParams='"tutti.editSpeciesFrequencies.help"'/> 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 bf798b1..bd221a5 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 @@ -522,19 +522,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci getObsTableModel().setRows((List<IndividualObservationBatchRowModel>) evt.getNewValue()); }); -// model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, evt -> { -// Set<IndividualObservationBatchRowModel> obsRowsInError = -// (Set<IndividualObservationBatchRowModel>) evt.getNewValue(); -// -// model.getRows().clear(); -// model.getRowsInError().clear(); -// model.reloadRows(); -// -// reloadRowsFromIndividualObservations(); -// -// getTableModel().fireTableDataChanged(); -// }); - model.addVetoableChangeListener(SpeciesFrequencyUIModel.PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, evt -> { CopyIndividualObservationMode oldCopyMode = (CopyIndividualObservationMode) evt.getOldValue(); 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 3ddc475..1c1995c 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 @@ -118,6 +118,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR = "individualObservationRowsInError"; + public static final String PROPERTY_NON_EMPTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR = "nonEmptyIndividualObservationRowsInError"; + /** * Fill mode. * @@ -860,22 +862,41 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa } public void setIndividualObservationRowsInError(Set<IndividualObservationBatchRowModel> individualObservationRowsInError) { + Object nonEmptyIndividualObservationInError = isNonEmptyIndividualObservationRowsInError(); this.individualObservationRowsInError = individualObservationRowsInError; firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, null, individualObservationRowsInError); + firePropertyChange(PROPERTY_NON_EMPTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, + nonEmptyIndividualObservationInError, + isNonEmptyIndividualObservationRowsInError()); } public void addIndividualObservationRowInError(IndividualObservationBatchRowModel row) { + Object nonEmptyIndividualObservationInError = isNonEmptyIndividualObservationRowsInError(); Object oldValue = new HashSet<>(individualObservationRowsInError); individualObservationRowsInError.add(row); firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, oldValue, individualObservationRowsInError); + firePropertyChange(PROPERTY_NON_EMPTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, + nonEmptyIndividualObservationInError, + isNonEmptyIndividualObservationRowsInError()); } public void removeIndividualObservationRowInError(IndividualObservationBatchRowModel row) { + Object nonEmptyIndividualObservationInError = isNonEmptyIndividualObservationRowsInError(); Object oldValue = new HashSet<>(individualObservationRowsInError); individualObservationRowsInError.remove(row); firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, oldValue, individualObservationRowsInError); + firePropertyChange(PROPERTY_NON_EMPTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, + nonEmptyIndividualObservationInError, + isNonEmptyIndividualObservationRowsInError()); + } + + public boolean isNonEmptyIndividualObservationRowsInError() { + return individualObservationRowsInError != null && + individualObservationRowsInError.stream().anyMatch(row -> !row.isEmpty()); } + public void setNonEmptyIndividualObservationRowsInError(boolean nonEmptyIndividualObservationInError) { } + public void recomputeRowsValidateState() { if (log.isInfoEnabled()) { diff --git a/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel-error-validation.xml b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel-error-validation.xml index 040977d..de1d3fb 100644 --- a/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel-error-validation.xml +++ b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel-error-validation.xml @@ -70,4 +70,13 @@ </field-validator> </field> + <field name="nonEmptyIndividualObservationRowsInError"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ !mustCopyIndividualObservationWeight() || !isNonEmptyIndividualObservationRowsInError() ]]> + </param> + <message>tutti.validator.error.speciesFrequency.individualObservationsWithoutWeights</message> + </field-validator> + </field> + </validators> 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 28567e9..bb309af 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 @@ -2541,6 +2541,7 @@ tutti.validator.error.rtpEditor.rtpMaleB.required= tutti.validator.error.rtpEditor.rtpUndefinedA.required= tutti.validator.error.rtpEditor.rtpUndefinedB.required= tutti.validator.error.speciesFrequency.incoherentTotalWeights= +tutti.validator.error.speciesFrequency.individualObservationsWithoutWeights= tutti.validator.error.speciesFrequency.lengthStepCaracteristic.required= tutti.validator.error.speciesFrequency.oneRowRequired= tutti.validator.error.speciesFrequency.step.positiveValue= 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 e016f5b..546aab6 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,4 +1,3 @@ -Pr\\u00e9l\\u00e8vement= application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= @@ -2332,6 +2331,7 @@ tutti.validator.error.rtpEditor.rtpMaleB.required= tutti.validator.error.rtpEditor.rtpUndefinedA.required= tutti.validator.error.rtpEditor.rtpUndefinedB.required= tutti.validator.error.speciesFrequency.incoherentTotalWeights=Le poids total est différent de la somme des poids des poids observés +tutti.validator.error.speciesFrequency.individualObservationsWithoutWeights=Tous les poids des observations individuelles nes ont pas renseignés tutti.validator.error.speciesFrequency.lengthStepCaracteristic.required=La classe de taille est obligatoire tutti.validator.error.speciesFrequency.oneRowRequired=Au moins une classe de taille doit être observée tutti.validator.error.speciesFrequency.step.positiveValue=Le pas de la classe de taille doit être strictement positif -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.