Author: kmorin Date: 2013-03-29 16:01:19 +0100 (Fri, 29 Mar 2013) New Revision: 712 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/712 Log: - use last jaxx snapshot - separate fatal and error in fishing operation (to be able to save a fishing operation even if there are errors in validation mode) Added: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-fatal-validation.xml trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-fatal-validation.xml Modified: trunk/pom.xml trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-03-29 10:51:23 UTC (rev 711) +++ trunk/pom.xml 2013-03-29 15:01:19 UTC (rev 712) @@ -135,7 +135,7 @@ <postgresqlVersion>9.1-901-1.jdbc4</postgresqlVersion> <licensePluginVersion>1.4</licensePluginVersion> - <jaxxVersion>2.5.15</jaxxVersion> + <jaxxVersion>2.5.16-SNAPSHOT</jaxxVersion> <swingXVersion>1.6.4</swingXVersion> <xworkVersion>2.3.7</xworkVersion> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-03-29 10:51:23 UTC (rev 711) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-03-29 15:01:19 UTC (rev 712) @@ -289,7 +289,7 @@ initBeanFilterableComboBox(ui.getLocationComboBox(), locations, location); changeValidatorContext(model.getValidationContext(), ui.getValidator()); - listenValidatorValid(ui.getValidator(), model); + listenValidationTableHasNoFatalError(ui.getValidator(), model); setCustomTab(0, model); listModelIsModify(model); @@ -307,32 +307,17 @@ vesselUseFeatureModel.setAvailableCaracteristics(getDataContext().getCaracteristics()); setCustomTab(2, vesselUseFeatureModel); - if (TuttiUIContext.VALIDATION_CONTEXT_VALIDATE.equals(model.getValidationContext())) { - PropertyChangeListener pcl = new PropertyChangeListener() { + model.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_VALID, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - boolean allModelsValid = areAllModelsValid(); - ui.getSaveButton().setEnabled(allModelsValid); + @Override + public void propertyChange(PropertyChangeEvent evt) { + Boolean valid = (Boolean) evt.getNewValue(); + if (valid != null) { + ui.getSaveButton().setEnabled(valid); } - }; - gearUseFeatureModel.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_VALID, pcl); - vesselUseFeatureModel.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_VALID, pcl); - model.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_VALID, pcl); + } + }); - } else { - model.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_VALID, new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent evt) { - Boolean valid = (Boolean) evt.getNewValue(); - if (valid != null) { - ui.getSaveButton().setEnabled(valid); - } - } - }); - } - // listen when id becones empty or not toupdate cancel action and button getModel().addPropertyChangeListener( EditFishingOperationUIModel.PROPERTY_ID, Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-03-29 10:51:23 UTC (rev 711) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-03-29 15:01:19 UTC (rev 712) @@ -84,6 +84,8 @@ import javax.swing.SwingUtilities; import javax.swing.border.LineBorder; import javax.swing.event.ListSelectionEvent; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; @@ -742,6 +744,21 @@ }); } + protected void listenValidationTableHasNoFatalError(final SimpleBeanValidator validator, + final AbstractTuttiBeanUIModel model) { + getContext().getMainUI().getValidatorMessageWidget().addTableModelListener(new TableModelListener() { + @Override + public void tableChanged(TableModelEvent e) { + boolean valid = !validator.hasFatalErrors(); + if (log.isDebugEnabled()) { + log.debug("Model [" + model + + "] pass to valid state [" + valid + "]"); + } + model.setValid(valid); + } + }); + } + protected void listModelIsModify(AbstractTuttiBeanUIModel model) { model.addPropertyChangeListener(new PropertyChangeListener() { Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml 2013-03-29 10:51:23 UTC (rev 711) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml 2013-03-29 15:01:19 UTC (rev 712) @@ -27,73 +27,8 @@ "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> - <field name="stationNumber"> - - <field-validator type="requiredstring" short-circuit="true"> - <message> - tutti.validator.error.fishingOperation.stationNumber.required - </message> - </field-validator> - - <field-validator type="stringlength" short-circuit="true"> - <param name="maxLength">40</param> - <message> - tutti.validator.error.fishingOperation.stationNumber.too.long##${maxLength} - </message> - </field-validator> - - <field-validator type="collectionUniqueKey" short-circuit="true"> - <param name="collectionFieldName">existingOperations</param> - <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> - <param name="againstMe">true</param> - <param name="nullValueSkipped">true</param> - <message>tutti.validator.error.fishingOperation.existingKey</message> - </field-validator> - - </field> - - <field name="fishingOperationNumber"> - - <field-validator type="required" short-circuit="true"> - <message> - tutti.validator.error.fishingOperation.fishingOperationNumber.required - </message> - </field-validator> - - <field-validator type="collectionUniqueKey" short-circuit="true"> - <param name="collectionFieldName">existingOperations</param> - <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> - <param name="againstMe">true</param> - <param name="nullValueSkipped">true</param> - <message>tutti.validator.error.fishingOperation.existingKey</message> - </field-validator> - - </field> - - <field name="multirigAggregation"> - - <field-validator type="required" short-circuit="true"> - <message> - tutti.validator.error.fishingOperation.trawlNetNumber.required - </message> - </field-validator> - - </field> - <field name="gearShootingStartDate"> - <field-validator type="required" short-circuit="true"> - <message>tutti.validator.error.fishingOperation.date.start.required</message> - </field-validator> - - <field-validator type="collectionUniqueKey" short-circuit="true"> - <param name="collectionFieldName">existingOperations</param> - <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> - <param name="againstMe">true</param> - <param name="nullValueSkipped">true</param> - <message>tutti.validator.error.fishingOperation.existingKey</message> - </field-validator> - <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> <![CDATA[ gearShootingEndDate == null || !gearShootingStartDate.after(gearShootingEndDate) ]]> Copied: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-fatal-validation.xml (from rev 711, trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml) =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-fatal-validation.xml (rev 0) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-fatal-validation.xml 2013-03-29 15:01:19 UTC (rev 712) @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 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="stationNumber"> + + <field-validator type="requiredstring" short-circuit="true"> + <message> + tutti.validator.error.fishingOperation.stationNumber.required + </message> + </field-validator> + + <field-validator type="stringlength" short-circuit="true"> + <param name="maxLength">40</param> + <message> + tutti.validator.error.fishingOperation.stationNumber.too.long##${maxLength} + </message> + </field-validator> + + <field-validator type="collectionUniqueKey" short-circuit="true"> + <param name="collectionFieldName">existingOperations</param> + <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> + <param name="againstMe">true</param> + <param name="nullValueSkipped">true</param> + <message>tutti.validator.error.fishingOperation.existingKey</message> + </field-validator> + + </field> + + <field name="fishingOperationNumber"> + + <field-validator type="required" short-circuit="true"> + <message> + tutti.validator.error.fishingOperation.fishingOperationNumber.required + </message> + </field-validator> + + <field-validator type="collectionUniqueKey" short-circuit="true"> + <param name="collectionFieldName">existingOperations</param> + <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> + <param name="againstMe">true</param> + <param name="nullValueSkipped">true</param> + <message>tutti.validator.error.fishingOperation.existingKey</message> + </field-validator> + + </field> + + <field name="multirigAggregation"> + + <field-validator type="required" short-circuit="true"> + <message> + tutti.validator.error.fishingOperation.trawlNetNumber.required + </message> + </field-validator> + + </field> + + <field name="gearShootingStartDate"> + + <field-validator type="required" short-circuit="true"> + <message>tutti.validator.error.fishingOperation.date.start.required</message> + </field-validator> + + <field-validator type="collectionUniqueKey" short-circuit="true"> + <param name="collectionFieldName">existingOperations</param> + <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> + <param name="againstMe">true</param> + <param name="nullValueSkipped">true</param> + <message>tutti.validator.error.fishingOperation.existingKey</message> + </field-validator> + + </field> +</validators> Property changes on: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-fatal-validation.xml ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-03-29 10:51:23 UTC (rev 711) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-03-29 15:01:19 UTC (rev 712) @@ -27,59 +27,6 @@ "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> - <field name="stationNumber"> - - <field-validator type="requiredstring" short-circuit="true"> - <message> - tutti.validator.error.fishingOperation.stationNumber.required - </message> - </field-validator> - - <field-validator type="stringlength" short-circuit="true"> - <param name="maxLength">40</param> - <message> - tutti.validator.error.fishingOperation.stationNumber.too.long##${maxLength} - </message> - </field-validator> - - <field-validator type="collectionUniqueKey" short-circuit="true"> - <param name="collectionFieldName">existingOperations</param> - <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> - <param name="againstMe">true</param> - <param name="nullValueSkipped">true</param> - <message>tutti.validator.error.fishingOperation.existingKey</message> - </field-validator> - - </field> - - <field name="fishingOperationNumber"> - - <field-validator type="required" short-circuit="true"> - <message> - tutti.validator.error.fishingOperation.fishingOperationNumber.required - </message> - </field-validator> - - <field-validator type="collectionUniqueKey" short-circuit="true"> - <param name="collectionFieldName">existingOperations</param> - <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> - <param name="againstMe">true</param> - <param name="nullValueSkipped">true</param> - <message>tutti.validator.error.fishingOperation.existingKey</message> - </field-validator> - - </field> - - <field name="multirigAggregation"> - - <field-validator type="required" short-circuit="true"> - <message> - tutti.validator.error.fishingOperation.trawlNetNumber.required - </message> - </field-validator> - - </field> - <field name='strata'> <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> @@ -109,18 +56,6 @@ <field name="gearShootingStartDate"> - <field-validator type="required" short-circuit="true"> - <message>tutti.validator.error.fishingOperation.date.start.required</message> - </field-validator> - - <field-validator type="collectionUniqueKey" short-circuit="true"> - <param name="collectionFieldName">existingOperations</param> - <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> - <param name="againstMe">true</param> - <param name="nullValueSkipped">true</param> - <message>tutti.validator.error.fishingOperation.existingKey</message> - </field-validator> - <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> <![CDATA[ gearShootingEndDate == null || gearShootingStartDate.before(gearShootingEndDate) ]]> Added: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-fatal-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-fatal-validation.xml (rev 0) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-fatal-validation.xml 2013-03-29 15:01:19 UTC (rev 712) @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + Tutti :: UI + $Id: EditFishingOperationUIModel-edit-error-validation.xml 553 2013-03-06 17:22:48Z kmorin $ + $HeadURL: http://svn.forge.codelutin.com/svn/tutti/trunk/tutti-ui-swing/src/main/resou... $ + %% + Copyright (C) 2012 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="stationNumber"> + + <field-validator type="requiredstring" short-circuit="true"> + <message> + tutti.validator.error.fishingOperation.stationNumber.required + </message> + </field-validator> + + <field-validator type="stringlength" short-circuit="true"> + <param name="maxLength">40</param> + <message> + tutti.validator.error.fishingOperation.stationNumber.too.long##${maxLength} + </message> + </field-validator> + + <field-validator type="collectionUniqueKey" short-circuit="true"> + <param name="collectionFieldName">existingOperations</param> + <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> + <param name="againstMe">true</param> + <param name="nullValueSkipped">true</param> + <message>tutti.validator.error.fishingOperation.existingKey</message> + </field-validator> + + </field> + + <field name="fishingOperationNumber"> + + <field-validator type="required" short-circuit="true"> + <message> + tutti.validator.error.fishingOperation.fishingOperationNumber.required + </message> + </field-validator> + + <field-validator type="collectionUniqueKey" short-circuit="true"> + <param name="collectionFieldName">existingOperations</param> + <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> + <param name="againstMe">true</param> + <param name="nullValueSkipped">true</param> + <message>tutti.validator.error.fishingOperation.existingKey</message> + </field-validator> + + </field> + + <field name="multirigAggregation"> + + <field-validator type="required" short-circuit="true"> + <message> + tutti.validator.error.fishingOperation.trawlNetNumber.required + </message> + </field-validator> + + </field> + + <field name="gearShootingStartDate"> + + <field-validator type="required" short-circuit="true"> + <message>tutti.validator.error.fishingOperation.date.start.required</message> + </field-validator> + + <field-validator type="collectionUniqueKey" short-circuit="true"> + <param name="collectionFieldName">existingOperations</param> + <param name="keys">stationNumber, fishingOperationNumber, gearShootingStartDate</param> + <param name="againstMe">true</param> + <param name="nullValueSkipped">true</param> + <message>tutti.validator.error.fishingOperation.existingKey</message> + </field-validator> + + </field> +</validators>