Author: jcouteau Date: 2011-08-30 12:48:22 +0200 (Tue, 30 Aug 2011) New Revision: 2197 Url: http://nuiton.org/repositories/revision/nuiton-utils/2197 Log: Validator validate null and empty values (use required or requiredstring validators for those cases) Add a SkipableRequired and SkipableRequiredString validators Added: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/SkipableRequiredFieldValidator.java trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/SkipableRequiredStringFieldValidator.java Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/EmailFieldValidator.java trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchCityNameFieldValidator.java trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchLastNameFieldValidator.java trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchPhoneNumberFieldValidator.java trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchPostCodeFieldValidator.java trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchSiretFieldValidator.java trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/VATIdentificationNumberFieldValidator.java trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/EmailFieldValidatorTest.java trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchCityNameFieldValidatorTest.java trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchLastNameFieldValidatorTest.java trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchPhoneNumberFieldValidatorTest.java trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchPostCodeFieldValidatorTest.java trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchSiretFieldValidatorTest.java trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/VATIdentificationNumberFieldValidatorTest.java Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/EmailFieldValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/EmailFieldValidator.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/EmailFieldValidator.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -25,6 +25,7 @@ package org.nuiton.validator.xwork2.field; import com.opensymphony.xwork2.validator.ValidationException; +import org.apache.commons.lang.StringUtils; import org.nuiton.util.StringUtil; /** @@ -47,6 +48,10 @@ return; } if (value instanceof String) { + if (StringUtils.isEmpty((String)value)){ + // no value defined + return; + } if (!StringUtil.isEmail((String) value)) { addFieldError(fieldName, object); } Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchCityNameFieldValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchCityNameFieldValidator.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchCityNameFieldValidator.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -56,6 +56,10 @@ return; } if (value instanceof String) { + if ("".equals(value)) { + // no value defined + return; + } Matcher m = p.matcher((String) value); if (!m.matches()) { addFieldError(fieldName, object); Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchLastNameFieldValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchLastNameFieldValidator.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchLastNameFieldValidator.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -54,6 +54,10 @@ return; } if (value instanceof String) { + if ("".equals(value)) { + // no value defined + return; + } Matcher m = p.matcher((String) value); if (!m.matches()) { addFieldError(fieldName, object); Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchPhoneNumberFieldValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchPhoneNumberFieldValidator.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchPhoneNumberFieldValidator.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -57,6 +57,10 @@ return; } if (value instanceof String) { + if ("".equals(value)) { + // no value defined + return; + } Matcher m = p.matcher((String) value); if (!m.matches()) { addFieldError(fieldName, object); Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchPostCodeFieldValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchPostCodeFieldValidator.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchPostCodeFieldValidator.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -57,6 +57,10 @@ return; } if (value instanceof String) { + if ("".equals(value)){ + // no value defined + return; + } Matcher m = p.matcher((String) value); if (!m.matches()) { addFieldError(fieldName, object); Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchSiretFieldValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchSiretFieldValidator.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchSiretFieldValidator.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -30,6 +30,7 @@ import java.util.Collection; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang.StringUtils; /** * Validator for French SIRET numbers @@ -80,6 +81,11 @@ siret = String.valueOf(value); } + if (StringUtils.isEmpty(siret)) { + // no value defined + return; + } + Matcher m = p.matcher(siret); if (!m.matches() || !luhnChecksum(siret)) { addFieldError(fieldName, object); Added: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/SkipableRequiredFieldValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/SkipableRequiredFieldValidator.java (rev 0) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/SkipableRequiredFieldValidator.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -0,0 +1,20 @@ +package org.nuiton.validator.xwork2.field; + +import com.opensymphony.xwork2.validator.ValidationException; + +/** + * @author jcouteau <couteau@codelutin.com> + * @since 2.3 + */ +public class SkipableRequiredFieldValidator extends NuitonFieldValidatorSupport { + + @Override + protected void validateWhenNotSkip(Object object) throws ValidationException { + String fieldName = getFieldName(); + Object value = getFieldValue(fieldName, object); + + if (value == null) { + addFieldError(fieldName, object); + } + } +} Added: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/SkipableRequiredStringFieldValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/SkipableRequiredStringFieldValidator.java (rev 0) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/SkipableRequiredStringFieldValidator.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -0,0 +1,20 @@ +package org.nuiton.validator.xwork2.field; + +import com.opensymphony.xwork2.validator.ValidationException; + +/** + * @author jcouteau <couteau@codelutin.com> + * @since 2.3 + */ +public class SkipableRequiredStringFieldValidator extends NuitonFieldValidatorSupport { + + @Override + protected void validateWhenNotSkip(Object object) throws ValidationException { + String fieldName = getFieldName(); + Object value = getFieldValue(fieldName, object); + + if (value == null || !(value instanceof String) || "".equals(value)) { + addFieldError(fieldName, object); + } + } +} Modified: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/VATIdentificationNumberFieldValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/VATIdentificationNumberFieldValidator.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/VATIdentificationNumberFieldValidator.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -28,6 +28,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang.StringUtils; /** * Validator for EU VAT number. @@ -52,6 +53,10 @@ return; } if (value instanceof String) { + if (StringUtils.isEmpty((String) value)) { + // no value defined + return; + } Matcher m = p.matcher((String) value); if (!m.matches()) { addFieldError(fieldName, object); Modified: trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/EmailFieldValidatorTest.java =================================================================== --- trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/EmailFieldValidatorTest.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/EmailFieldValidatorTest.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -55,5 +55,15 @@ bean.setEmail("toto"); assertFieldInError(Contact.PROPERTY_EMAIL, "contact.email.format", true); + // use requiredstring for that case + bean.setEmail(""); + assertFieldInError(Contact.PROPERTY_EMAIL, "contact.email.format", + false); + + // use required for that case + bean.setEmail(null); + assertFieldInError(Contact.PROPERTY_EMAIL, "contact.email.format", + false); + } } Modified: trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchCityNameFieldValidatorTest.java =================================================================== --- trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchCityNameFieldValidatorTest.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchCityNameFieldValidatorTest.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -93,5 +93,15 @@ assertFieldInError(Contact.PROPERTY_CITY, "contact.city.format", true); + // Use requiredstring validator for this case + bean.setCity(""); + assertFieldInError(Contact.PROPERTY_CITY, "contact.city.format", + false); + + // Use required validator for this case + bean.setCity(null); + assertFieldInError(Contact.PROPERTY_CITY, "contact.city.format", + false); + } } Modified: trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchLastNameFieldValidatorTest.java =================================================================== --- trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchLastNameFieldValidatorTest.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchLastNameFieldValidatorTest.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -29,7 +29,6 @@ /** * @author jcouteau <couteau@codelutin.com> - * Date: 18/08/11 * @since 2.3 */ public class FrenchLastNameFieldValidatorTest extends AbstractFieldValidatorTest<Contact> { @@ -74,6 +73,16 @@ assertFieldInError(Contact.PROPERTY_LAST_NAME, "contact.name.format", true); + // Use requiredstring validator for that case + bean.setName(""); + assertFieldInError(Contact.PROPERTY_LAST_NAME, "contact.name.format", + false); + // Use required validator for that case + bean.setName(null); + assertFieldInError(Contact.PROPERTY_LAST_NAME, "contact.name.format", + false); + + } } Modified: trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchPhoneNumberFieldValidatorTest.java =================================================================== --- trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchPhoneNumberFieldValidatorTest.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchPhoneNumberFieldValidatorTest.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -29,7 +29,6 @@ /** * @author jcouteau <couteau@codelutin.com> - * Date: 18/08/11 * @since 2.3 */ public class FrenchPhoneNumberFieldValidatorTest extends AbstractFieldValidatorTest<Contact> { @@ -123,6 +122,14 @@ bean.setPhone("00-00-ab-00-00"); assertFieldInError(Contact.PROPERTY_PHONE, "contact.phoneNumber.format", true); + //Use required string validator for this case + bean.setPhone(""); + assertFieldInError(Contact.PROPERTY_PHONE, "contact.phoneNumber.format", + false); + //Use required validator for this case + bean.setPhone(null); + assertFieldInError(Contact.PROPERTY_PHONE, "contact.phoneNumber.format", + false); } } Modified: trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchPostCodeFieldValidatorTest.java =================================================================== --- trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchPostCodeFieldValidatorTest.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchPostCodeFieldValidatorTest.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -78,5 +78,17 @@ assertFieldInError(Contact.PROPERTY_POSTCODE, "contact.postCode.format", true); + // postCode can be empty (use a requiredstring validator for this check) + bean.setPostCode(""); + assertFieldInError(Contact.PROPERTY_POSTCODE, "contact.postCode.format", + false); + + // postCode can be null (use a requiredstring validator for this check) + bean.setPostCode(null); + assertFieldInError(Contact.PROPERTY_POSTCODE, "contact.postCode.format", + false); + + + } } Modified: trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchSiretFieldValidatorTest.java =================================================================== --- trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchSiretFieldValidatorTest.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchSiretFieldValidatorTest.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -29,7 +29,6 @@ /** * @author jcouteau <couteau@codelutin.com> - * Date: 19/08/11 * @since 2.3 */ public class FrenchSiretFieldValidatorTest extends AbstractFieldValidatorTest<Company> { @@ -85,5 +84,15 @@ bean.setSiret("4421bf1670300038"); assertFieldInError(Company.PROPERTY_SIRET, "company.siret.format", true); + + // Use requiredString for empty siret + bean.setSiret(""); + assertFieldInError(Company.PROPERTY_SIRET, "company.siret.format", + false); + + // Use required for null siret + bean.setSiret(null); + assertFieldInError(Company.PROPERTY_SIRET, "company.siret.format", + false); } } Modified: trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/VATIdentificationNumberFieldValidatorTest.java =================================================================== --- trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/VATIdentificationNumberFieldValidatorTest.java 2011-08-29 14:19:18 UTC (rev 2196) +++ trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/VATIdentificationNumberFieldValidatorTest.java 2011-08-30 10:48:22 UTC (rev 2197) @@ -62,5 +62,15 @@ bean.setVat("FR 57 442116703"); assertFieldInError(Company.PROPERTY_VAT_NUMBER, "company.vat.format", true); + + // Use required string validator for that + bean.setVat(""); + assertFieldInError(Company.PROPERTY_VAT_NUMBER, "company.vat.format", + false); + + // Use required validator for that + bean.setVat(null); + assertFieldInError(Company.PROPERTY_VAT_NUMBER, "company.vat.format", + false); } }