Author: tchemit Date: 2014-05-30 17:28:10 +0200 (Fri, 30 May 2014) New Revision: 1827 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1827 Log: fixes #5144 [CAPTURE] gestion de la saisie de la valeur 0 (z?\195?\169ro) dans le champ "Poids total non tri?\195?\169" (onglet r?\195?\169sum?\195?\169), qui ne doit pas emp?\195?\170cher le calcul dans les autres champs Added: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/CatchBatch-edit-fatal-validation.xml trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/CatchBatch-validate-error-validation.xml Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/ValidationService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/EditFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2014-05-30 15:26:24 UTC (rev 1826) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2014-05-30 15:28:10 UTC (rev 1827) @@ -25,6 +25,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import fr.ifremer.tutti.TuttiConfiguration; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.Program; @@ -906,6 +907,10 @@ return DateUtil.between(date, getCruise().getBeginDate(), getCruise().getEndDate()); } + public boolean isNotWeightZeroValue(Float weight) { + return TuttiEntities.isNotEqualWeight(weight, 0f); + } + public boolean isMutiRegNumberValid(String numberAsString) { boolean result = false; if (numberAsString.matches("\\d+")) { Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/ValidationService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/ValidationService.java 2014-05-30 15:26:24 UTC (rev 1826) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/ValidationService.java 2014-05-30 15:28:10 UTC (rev 1827) @@ -24,6 +24,7 @@ import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; @@ -71,6 +72,12 @@ return result; } + public NuitonValidatorResult validateCatchBatch(CatchBatch catchBatch, String context) { + NuitonValidator<CatchBatch> validator = NuitonValidatorFactory.newValidator(CatchBatch.class, context); + NuitonValidatorResult result = validator.validate(catchBatch); + return result; + } + public NuitonValidatorResult validateSpeciesBatch(SpeciesBatch speciesBatch) { NuitonValidator<SpeciesBatch> validator = NuitonValidatorFactory.newValidator(SpeciesBatch.class); NuitonValidatorResult result = validator.validate(speciesBatch); Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java 2014-05-30 15:26:24 UTC (rev 1826) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java 2014-05-30 15:28:10 UTC (rev 1827) @@ -241,6 +241,17 @@ boolean error = !isCatchBatch; if (isCatchBatch) { + + NuitonValidatorResult catchBatchValidatorResult = validationService.validateCatchBatch(catchBatch, ValidationService.VALIDATION_CONTEXT_VALIDATE); + + if (catchBatchValidatorResult.hasFatalMessages()) { + errors.addAll(catchBatchValidatorResult.getMessagesForScope(NuitonValidatorScope.FATAL)); + } + + if (catchBatchValidatorResult.hasErrorMessagess()) { + errors.addAll(catchBatchValidatorResult.getMessagesForScope(NuitonValidatorScope.ERROR)); + } + rootSpeciesBatch = persistenceService.getRootSpeciesBatch(fishingOperationId, true); if (rootSpeciesBatch != null) { Added: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/CatchBatch-edit-fatal-validation.xml =================================================================== --- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/CatchBatch-edit-fatal-validation.xml (rev 0) +++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/CatchBatch-edit-fatal-validation.xml 2014-05-30 15:28:10 UTC (rev 1827) @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + Tutti :: Service + $Id$ + $HeadURL: https://svn.codelutin.com/tutti/trunk/tutti-service/src/main/resources/fr/if... $ + %% + Copyright (C) 2012 - 2014 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="catchTotalRejectedWeight"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ catchTotalRejectedWeight == null || isNotWeightZeroValue(catchTotalRejectedWeight) ]]> + </param> + <message>tutti.validator.error.catchBatch.catchTotalRejectedWeight.zeroValue</message> + </field-validator> + </field> + +</validators> Property changes on: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/CatchBatch-edit-fatal-validation.xml ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/CatchBatch-validate-error-validation.xml =================================================================== --- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/CatchBatch-validate-error-validation.xml (rev 0) +++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/CatchBatch-validate-error-validation.xml 2014-05-30 15:28:10 UTC (rev 1827) @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + Tutti :: Service + $Id$ + $HeadURL: https://svn.codelutin.com/tutti/trunk/tutti-service/src/main/resources/fr/if... $ + %% + Copyright (C) 2012 - 2014 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="catchTotalRejectedWeight"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ catchTotalRejectedWeight == null || isNotWeightZeroValue(catchTotalRejectedWeight) ]]> + </param> + <message>tutti.validator.error.catchBatch.catchTotalRejectedWeight.zeroValue</message> + </field-validator> + </field> + +</validators> Property changes on: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/CatchBatch-validate-error-validation.xml ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2014-05-30 15:26:24 UTC (rev 1826) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2014-05-30 15:28:10 UTC (rev 1827) @@ -214,6 +214,7 @@ tutti.service.validateCruise.operations.progress= tutti.validator.error.accidental.species.required= tutti.validator.error.benthosBatch.species.required= +tutti.validator.error.catchBatch.catchTotalRejectedWeight.zeroValue= tutti.validator.error.comment.too.long= tutti.validator.error.cruise.beginDate.required= tutti.validator.error.cruise.dates.endBeforeStart= Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2014-05-30 15:26:24 UTC (rev 1826) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2014-05-30 15:28:10 UTC (rev 1827) @@ -199,6 +199,7 @@ tutti.service.validateCruise.operations.progress=Vérification du trait %s tutti.validator.error.accidental.species.required=L'espèce est obligatoire tutti.validator.error.benthosBatch.species.required=L'espèce est obligatoire +tutti.validator.error.catchBatch.catchTotalRejectedWeight.zeroValue=Le poids total NON TRIÉ ne peut pas valoir 0 tutti.validator.error.comment.too.long=Taille de commentaire trop longue (limitée à %s caractères) tutti.validator.error.cruise.beginDate.required=La date de début est obligatoire tutti.validator.error.cruise.dates.endBeforeStart=La date de fin doit être après la date de début Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/EditFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/EditFishingOperationAction.java 2014-05-30 15:26:24 UTC (rev 1826) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/EditFishingOperationAction.java 2014-05-30 15:28:10 UTC (rev 1827) @@ -614,6 +614,7 @@ handler.installStartDateListener(); handler.installCoordinatesListener(); + } public void loadCatchBatch(FishingOperation bean) { @@ -621,6 +622,9 @@ boolean empty = bean == null || TuttiEntities.isNew(bean); EditCatchesUI ui = getUI().getCatchesTabContent(); + + ui.getHandler().uninstallTotalRejectWeightListener(); + TuttiBeanMonitor<EditCatchesUIModel> catchBatchMonitor = ui.getHandler().getCatchBatchMonitor(); @@ -720,7 +724,6 @@ batch, catchEnabled); - // 4) Propagate new selected fishingoperation to others tabs FishingOperation operationToLoad = batch == null ? null : bean; @@ -789,6 +792,8 @@ false); } + ui.getHandler().installTotalRejectWeightListener(); + catchesUIModel.setLoadingData(false); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css 2014-05-30 15:26:24 UTC (rev 1826) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css 2014-05-30 15:28:10 UTC (rev 1827) @@ -155,6 +155,7 @@ bean: {model.getCatchTotalRejectedComputedOrNotWeight()}; model: {model.getCatchTotalRejectedWeight()}; _help: {"tutti.editCatchBatch.field.catchTotalRejectedWeight.help"}; + _validatorLabel: {t("tutti.editCatchBatch.field.catchTotalRejectedWeight")}; } #catchTotalUnsortedWeightLabel { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx 2014-05-30 15:26:24 UTC (rev 1826) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx 2014-05-30 15:28:10 UTC (rev 1827) @@ -65,7 +65,7 @@ <EditCatchesUIModel id='model' initializer='getContextValue(EditCatchesUIModel.class)'/> - <BeanValidator id='validator' bean='model' + <BeanValidator id='validator' context='validate' bean='model' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> <field name='catchTotalWeight' component='catchTotalWeightField'/> @@ -169,7 +169,7 @@ <JTextField id='catchTotalUnsortedWeightField'/> </cell> </row> - <!-- Poids total rejeté --> + <!-- Poids total NON TRIÉ (rejeté) --> <row> <cell> <JLabel id='catchTotalRejectedWeightLabel'/> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2014-05-30 15:26:24 UTC (rev 1826) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2014-05-30 15:28:10 UTC (rev 1827) @@ -23,6 +23,7 @@ */ import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.BenthosBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.frequency.BenthosFrequencyCellComponent; @@ -48,6 +49,8 @@ import javax.swing.JPanel; import javax.swing.JTabbedPane; import java.awt.Color; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.Set; import static org.nuiton.i18n.I18n.n; @@ -87,6 +90,28 @@ */ private TuttiBeanMonitor<EditCatchesUIModel> catchBatchMonitor; + /** + * To remove {@code 0} value of total rejected weight. + * + * @since 3.5 + */ + private final PropertyChangeListener totalWeightRejectedListener = new PropertyChangeListener() { + + public void propertyChange(PropertyChangeEvent evt) { + + EditCatchesUIModel source = (EditCatchesUIModel) evt.getSource(); + + Float totalWeight = (Float) evt.getNewValue(); + + if (totalWeight != null && TuttiEntities.isEqualWeight(totalWeight, 0.f)) { + + // remove the totalWeight (see https://forge.codelutin.com/issues/5144) + source.setCatchTotalRejectedWeight(null); + + } + } + }; + //------------------------------------------------------------------------// //-- AbstractTuttiUIHandler methods --// //------------------------------------------------------------------------// @@ -106,6 +131,8 @@ EditCatchesUIModel model = ui.getContextValue(EditCatchesUIModel.class); + model.setValidationContext(getContext().getValidationContext()); + listModelIsModify(model); catchBatchMonitor.setBean(model); @@ -124,7 +151,10 @@ EditCatchesUIModel model = getModel(); - listenValidatorValid(getValidator(), model); +// clearValidators(); + changeValidatorContext(model.getValidationContext(), getValidator()); + listenValidationTableHasNoFatalError(getValidator(), model); +// listenValidatorValid(getValidator(), model); setCustomTab(0, model); setCustomTab(1, ui.getSpeciesTabContent().getModel()); @@ -288,6 +318,14 @@ //-- Public methods --// //------------------------------------------------------------------------// + public void uninstallTotalRejectWeightListener() { + getModel().removePropertyChangeListener(EditCatchesUIModel.PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT, totalWeightRejectedListener); + } + + public void installTotalRejectWeightListener() { + getModel().addPropertyChangeListener(EditCatchesUIModel.PROPERTY_CATCH_TOTAL_REJECTED_WEIGHT, totalWeightRejectedListener); + } + public TuttiBeanMonitor<EditCatchesUIModel> getCatchBatchMonitor() { return catchBatchMonitor; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java 2014-05-30 15:26:24 UTC (rev 1826) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java 2014-05-30 15:28:10 UTC (rev 1827) @@ -55,6 +55,8 @@ private static final long serialVersionUID = 1L; + public static final String PROPERTY_VALIDATION_CONTEXT = "validationContext"; + public static final String PROPERTY_CATCH_BATCH = "catchBatch"; public static final String PROPERTY_BATCH_UPDATED = "batchUpdated"; @@ -109,6 +111,8 @@ protected FishingOperation fishingOperation; + protected String validationContext; + protected final CatchBatch editObject = CatchBatchs.newCatchBatch(); protected final List<Attachment> attachment = Lists.newArrayList(); @@ -364,6 +368,16 @@ return false; } + public String getValidationContext() { + return validationContext; + } + + public void setValidationContext(String validationContext) { + Object oldValue = getValidationContext(); + this.validationContext = validationContext; + firePropertyChange(PROPERTY_VALIDATION_CONTEXT, oldValue, validationContext); + } + public Multimap<CaracteristicQualitativeValue, Species> getSpeciesUsed() { return speciesUsed; }