Author: Bavencoff Date: 2013-07-16 15:00:38 +0200 (Tue, 16 Jul 2013) New Revision: 2582 Url: http://nuiton.org/projects/nuiton-utils/repository/revisions/2582 Log: refs #2761 : add Finess validator Added: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchFinessFieldValidator.java trunk/nuiton-validator/src/test/java/org/nuiton/validator/model/HealthEstablishment.java trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchFinessFieldValidatorTest.java trunk/nuiton-validator/src/test/resources/org/nuiton/validator/model/HealthEstablishment-error-validation.xml Modified: trunk/nuiton-validator/src/test/resources/validators.xml Added: trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchFinessFieldValidator.java =================================================================== --- trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchFinessFieldValidator.java (rev 0) +++ trunk/nuiton-validator/src/main/java/org/nuiton/validator/xwork2/field/FrenchFinessFieldValidator.java 2013-07-16 13:00:38 UTC (rev 2582) @@ -0,0 +1,68 @@ +package org.nuiton.validator.xwork2.field; + +import com.opensymphony.xwork2.validator.ValidationException; +import org.apache.commons.lang3.StringUtils; + +import java.lang.reflect.Array; +import java.util.Collection; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class FrenchFinessFieldValidator extends NuitonFieldValidatorSupport { + + protected static final String SIRET_REGEXP = "([0-9]{2}|2A|2B)0([0-9]{6})"; + + protected static final Pattern p = Pattern.compile(SIRET_REGEXP); + + @Override + protected void validateWhenNotSkip(Object object) throws ValidationException { + String fieldName = getFieldName(); + Object value = getFieldValue(fieldName, object); + + if (value == null) { + // no value defined + return; + } + String finess; + + if (value.getClass().isArray()) { + // le finess est stocker dans un tableau, par exemple un byte[] + finess = ""; + for (int i = 0; i < Array.getLength(value); i++) { + finess += String.valueOf(Array.get(value, i)); + } + } else if (value instanceof Collection<?>) { + // le finess est stocker dans une collection, + // ca doit pas arriver souvent :D, mais autant le gerer + finess = ""; + for (Object o : (Collection<?>) value) { + finess += String.valueOf(o); + } + } else { + // sinon dans tous les autres cas (String, int, long, BigInteger ...) + // on prend le toString + finess = String.valueOf(value); + } + + if (StringUtils.isEmpty(finess)) { + // no value defined + return; + } + + // Remove any space + finess = finess.replaceAll(" ", ""); + + Matcher m = p.matcher(finess); + if (!m.matches()) { + addFieldError(fieldName, object); + } + } + + @Override + public String getValidatorType() { + return "frenchFiness"; + } +} Added: trunk/nuiton-validator/src/test/java/org/nuiton/validator/model/HealthEstablishment.java =================================================================== --- trunk/nuiton-validator/src/test/java/org/nuiton/validator/model/HealthEstablishment.java (rev 0) +++ trunk/nuiton-validator/src/test/java/org/nuiton/validator/model/HealthEstablishment.java 2013-07-16 13:00:38 UTC (rev 2582) @@ -0,0 +1,20 @@ +package org.nuiton.validator.model; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class HealthEstablishment { + + public static final String PROPERTY_FINESS = "finess"; + + protected String finess; + + public String getFiness() { + return finess; + } + + public void setFiness(String finess) { + this.finess = finess; + } + +} Added: trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchFinessFieldValidatorTest.java =================================================================== --- trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchFinessFieldValidatorTest.java (rev 0) +++ trunk/nuiton-validator/src/test/java/org/nuiton/validator/xwork2/field/FrenchFinessFieldValidatorTest.java 2013-07-16 13:00:38 UTC (rev 2582) @@ -0,0 +1,61 @@ +package org.nuiton.validator.xwork2.field; + +import org.junit.Test; +import org.nuiton.validator.model.HealthEstablishment; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class FrenchFinessFieldValidatorTest extends AbstractFieldValidatorTest<HealthEstablishment> { + + public FrenchFinessFieldValidatorTest() { + super(HealthEstablishment.class); + } + + @Test + @Override + public void testValidator() throws Exception { + assertNull(bean.getFiness()); + + // Valid Finess + bean.setFiness("440123456"); + assertFieldInError(HealthEstablishment.PROPERTY_FINESS, "healthEstablishment.finess.format", + false); + + // Valid Finess + bean.setFiness("2B0483714"); + assertFieldInError(HealthEstablishment.PROPERTY_FINESS, "healthEstablishment.finess.format", + false); + + // not Valid Finess + bean.setFiness("2B01"); + assertFieldInError(HealthEstablishment.PROPERTY_FINESS, "healthEstablishment.finess.format", + true); + + // not Valid Finess + bean.setFiness("4402345636"); + assertFieldInError(HealthEstablishment.PROPERTY_FINESS, "healthEstablishment.finess.format", + true); + + // not Valid Finess + bean.setFiness("CC0123456"); + assertFieldInError(HealthEstablishment.PROPERTY_FINESS, "healthEstablishment.finess.format", + true); + + // not Valid Finess + bean.setFiness("441123456"); + assertFieldInError(HealthEstablishment.PROPERTY_FINESS, "healthEstablishment.finess.format", + true); + + // not Valid Finess + bean.setFiness("441B23456"); + assertFieldInError(HealthEstablishment.PROPERTY_FINESS, "healthEstablishment.finess.format", + true); + + // not Valid Finess + bean.setFiness("4402345F6"); + assertFieldInError(HealthEstablishment.PROPERTY_FINESS, "healthEstablishment.finess.format", + true); + + } +} Added: trunk/nuiton-validator/src/test/resources/org/nuiton/validator/model/HealthEstablishment-error-validation.xml =================================================================== --- trunk/nuiton-validator/src/test/resources/org/nuiton/validator/model/HealthEstablishment-error-validation.xml (rev 0) +++ trunk/nuiton-validator/src/test/resources/org/nuiton/validator/model/HealthEstablishment-error-validation.xml 2013-07-16 13:00:38 UTC (rev 2582) @@ -0,0 +1,36 @@ +<!-- + #%L + Nuiton Utils :: Nuiton Validator + + $Id: HealthEstablishment-error-validation.xml 2384 2013-07-16 10:40:40Z sbavencoff $ + $HeadURL: http://svn.nuiton.org/svn/nuiton-utils/trunk/nuiton-validator/src/test/resou... $ + %% + Copyright (C) 2013 CodeLutin + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser 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 Lesser Public License for more details. + + You should have received a copy of the GNU General Lesser Public + License along with this program. If not, see + <http://www.gnu.org/licenses/lgpl-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="finess"> + <field-validator type="frenchFiness"> + <message>healthEstablishment.finess.format</message> + </field-validator> + </field> + +</validators> \ No newline at end of file Modified: trunk/nuiton-validator/src/test/resources/validators.xml =================================================================== --- trunk/nuiton-validator/src/test/resources/validators.xml 2013-07-11 17:09:35 UTC (rev 2581) +++ trunk/nuiton-validator/src/test/resources/validators.xml 2013-07-16 13:00:38 UTC (rev 2582) @@ -68,6 +68,7 @@ <validator name="frenchLastName" class="org.nuiton.validator.xwork2.field.FrenchLastNameFieldValidator"/> <validator name="frenchPostCode" class="org.nuiton.validator.xwork2.field.FrenchPostCodeFieldValidator"/> <validator name="frenchSiret" class="org.nuiton.validator.xwork2.field.FrenchSiretFieldValidator"/> + <validator name="frenchFiness" class="org.nuiton.validator.xwork2.field.FrenchFinessFieldValidator"/> <!-- eu specific validators --> <validator name="vatIdentificationNumber" class="org.nuiton.validator.xwork2.field.VATIdentificationNumberFieldValidator"/>