r164 - in trunk/coser-business/src: main/java/fr/ifremer/coser/validators main/resources main/resources/fr/ifremer/coser/data test/java/fr/ifremer/coser/services
Author: chatellier Date: 2010-11-04 10:15:16 +0000 (Thu, 04 Nov 2010) New Revision: 164 Log: Fix test. Add custom validator to catch exception. Added: trunk/coser-business/src/main/java/fr/ifremer/coser/validators/CoserExpressionValidator.java Modified: trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-error-validation.xml trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Haul-error-validation.xml trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Length-error-validation.xml trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Strata-error-validation.xml trunk/coser-business/src/main/resources/validators.xml trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java Added: trunk/coser-business/src/main/java/fr/ifremer/coser/validators/CoserExpressionValidator.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/validators/CoserExpressionValidator.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/validators/CoserExpressionValidator.java 2010-11-04 10:15:16 UTC (rev 164) @@ -0,0 +1,79 @@ +package fr.ifremer.coser.validators; + +import com.opensymphony.xwork2.util.ValueStack; +import com.opensymphony.xwork2.validator.ValidationException; +import com.opensymphony.xwork2.validator.validators.ExpressionValidator; + +/** + * Modification de {@link ExpressionValidator} pour avoir les exceptions. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class CoserExpressionValidator extends ExpressionValidator { + + private ValueStack localStack; + + public void setValueStack(ValueStack localStack) { + super.setValueStack(localStack); + this.localStack = localStack; + } + + public void validate(Object object) throws ValidationException { + Boolean answer = Boolean.FALSE; + Object obj = null; + + try { + obj = getFieldValue(getExpression(), object, true); + } catch (ValidationException e) { + throw e; + } catch (Exception e) { + + // arrive si des valeurs NA sont comparée par exemple + // le test lance une exception, mais on le considere + // valide pour la suite + obj = Boolean.TRUE; + } + + if ((obj != null) && (obj instanceof Boolean)) { + answer = (Boolean) obj; + } else { + log.warn("Got result of " + obj + " when trying to get Boolean."); + } + + if (!answer.booleanValue()) { + if (log.isDebugEnabled()) log.debug("Validation failed on expression " + getExpression() + " with validated object "+ object); + addActionError(object); + } + } + + /** + * Return the field value named <code>name</code> from <code>object</code>, + * <code>object</code> should have the appropriate getter/setter. + * + * @param name + * @param object + * @return Object as field value + * @throws ValidationException + */ + protected Object getFieldValue(String name, Object object, boolean throwExceptionOnFailure) throws ValidationException { + + boolean pop = false; + + if (!localStack.getRoot().contains(object)) { + localStack.push(object); + pop = true; + } + + Object retVal = localStack.findValue(name, throwExceptionOnFailure); + + if (pop) { + localStack.pop(); + } + + return retVal; + } +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/validators/CoserExpressionValidator.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-error-validation.xml =================================================================== --- trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-error-validation.xml 2010-11-04 10:09:36 UTC (rev 163) +++ trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Catch-error-validation.xml 2010-11-04 10:15:16 UTC (rev 164) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2010 Ifremer, Codelutin + Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric %% This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -51,18 +51,18 @@ </field-validator> </field> <field name="numberAsString"> - <field-validator type="checkDouble" short-circuit="true"> + <field-validator type="checkDouble"> <param name="notAvailable">NA</param> <message>Number attribute is not a valid double</message> </field-validator> </field> <field name="weightAsString"> - <field-validator type="checkDouble" short-circuit="true"> + <field-validator type="checkDouble"> <param name="notAvailable">NA</param> <message>Weight attribute is not a valid double</message> </field-validator> </field> - <validator type="expression"> + <validator type="coserExpression"> <param name="expression"><![CDATA[ (weight > 0 && number > 0) || weight == 0]]></param> <message><![CDATA[coser.business.control.error.noCatchNumberWithWeight]]></message> </validator> Modified: trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Haul-error-validation.xml =================================================================== --- trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Haul-error-validation.xml 2010-11-04 10:09:36 UTC (rev 163) +++ trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Haul-error-validation.xml 2010-11-04 10:15:16 UTC (rev 164) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2010 Ifremer, Codelutin + Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric %% This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as Modified: trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Length-error-validation.xml =================================================================== --- trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Length-error-validation.xml 2010-11-04 10:09:36 UTC (rev 163) +++ trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Length-error-validation.xml 2010-11-04 10:15:16 UTC (rev 164) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2010 Ifremer, Codelutin + Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric %% This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -51,34 +51,34 @@ </field-validator> </field> <field name="sex"> - <field-validator type="requiredstring" short-circuit="true"> + <field-validator type="requiredstring"> <message>Sex is mandatory</message> </field-validator> </field> <field name="maturity"> - <field-validator type="requiredstring" short-circuit="true"> + <field-validator type="requiredstring"> <message>Maturity attribute is required</message> </field-validator> </field> <field name="length"> - <field-validator type="checkDouble" short-circuit="true"> + <field-validator type="checkDouble"> <message>length attribute is not a valid double</message> </field-validator> </field> <field name="number"> - <field-validator type="checkDouble" short-circuit="true"> + <field-validator type="checkDouble"> <param name="notAvailable">NA</param> <message>number attribute is not a valid double</message> </field-validator> </field> <field name="weight"> - <field-validator type="checkDouble" short-circuit="true"> + <field-validator type="checkDouble"> <param name="notAvailable">NA</param> <message>Weight attribute is not a valid double</message> </field-validator> </field> <field name="age"> - <field-validator type="requiredstring" short-circuit="true"> + <field-validator type="requiredstring"> <message>Age attribute is required</message> </field-validator> </field> Modified: trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Strata-error-validation.xml =================================================================== --- trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Strata-error-validation.xml 2010-11-04 10:09:36 UTC (rev 163) +++ trunk/coser-business/src/main/resources/fr/ifremer/coser/data/Strata-error-validation.xml 2010-11-04 10:15:16 UTC (rev 164) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2010 Ifremer, Codelutin + Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric %% This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as Modified: trunk/coser-business/src/main/resources/validators.xml =================================================================== --- trunk/coser-business/src/main/resources/validators.xml 2010-11-04 10:09:36 UTC (rev 163) +++ trunk/coser-business/src/main/resources/validators.xml 2010-11-04 10:15:16 UTC (rev 164) @@ -47,5 +47,6 @@ <validator name="checkDouble" class="fr.ifremer.coser.validators.CoserCheckDoubleValidator"/> <validator name="coserDouble" class="fr.ifremer.coser.validators.CoserDoubleValidator"/> + <validator name="coserExpression" class="fr.ifremer.coser.validators.CoserExpressionValidator"/> </validators> Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java =================================================================== --- trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java 2010-11-04 10:09:36 UTC (rev 163) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/ValidationServiceTest.java 2010-11-04 10:15:16 UTC (rev 164) @@ -66,12 +66,12 @@ myCatch.setData(new String[]{"1", "","","","","",""}); List<ValidationError> errors = validationService.validate(myCatch); Assert.assertNotNull(errors); - Assert.assertEquals(4, errors.size()); + Assert.assertEquals(3, errors.size()); myCatch.setData(new String[]{"1", "Toto","","","","999",""}); errors = validationService.validate(myCatch); Assert.assertNotNull(errors); - Assert.assertEquals(3, errors.size()); + Assert.assertEquals(2, errors.size()); } /**
participants (1)
-
chatellier@users.labs.libre-entreprise.org