Return-Path: X-Original-To: apmail-struts-commits-archive@minotaur.apache.org Delivered-To: apmail-struts-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 4E39BE568 for ; Thu, 3 Jan 2013 11:14:52 +0000 (UTC) Received: (qmail 56451 invoked by uid 500); 3 Jan 2013 11:14:51 -0000 Delivered-To: apmail-struts-commits-archive@struts.apache.org Received: (qmail 56395 invoked by uid 500); 3 Jan 2013 11:14:51 -0000 Mailing-List: contact commits-help@struts.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@struts.apache.org Delivered-To: mailing list commits@struts.apache.org Received: (qmail 56381 invoked by uid 99); 3 Jan 2013 11:14:51 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 03 Jan 2013 11:14:51 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 03 Jan 2013 11:14:48 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 60241238899C; Thu, 3 Jan 2013 11:14:27 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1428282 - in /struts/struts2/trunk/xwork-core/src: main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java Date: Thu, 03 Jan 2013 11:14:27 -0000 To: commits@struts.apache.org From: lukaszlenart@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130103111427.60241238899C@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: lukaszlenart Date: Thu Jan 3 11:14:26 2013 New Revision: 1428282 URL: http://svn.apache.org/viewvc?rev=1428282&view=rev Log: WW-3893 adds support to specify minLength, maxLength and trim params as expression Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java?rev=1428282&r1=1428281&r2=1428282&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java (original) +++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java Thu Jan 3 11:14:26 2013 @@ -31,10 +31,11 @@ import com.opensymphony.xwork2.validator * *
    *
  • fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required
  • - *
  • maxLength - The max length of the field value. Default ignore.
  • - *
  • minLength - The min length of the field value. Default ignore.
  • - *
  • trim - Trim the field value before evaluating its min/max length. Default true
  • + *
  • maxLength - The max length of the field value. Default ignore. Can be specified as OGNL expression when parse is set to true.
  • + *
  • minLength - The min length of the field value. Default ignore. Can be specified as OGNL expression when parse is set to true.
  • + *
  • trim - Trim the field value before evaluating its min/max length. Default true. Can be specified as OGNL expression when parse is set to true.
  • *
+ * WARNING! Do not use ${minLength}, ${maxLength} and ${trim} as an expression as this will turn into infinitive loop! * * * @@ -59,6 +60,16 @@ import com.opensymphony.xwork2.validator * <message>Your purchase code needs to be 10 characters long</message> * </field-validator> * </field> + * + * <!-- Field Validator Syntax with expression --> + * <field name="myPurchaseCode"> + * <field-validator type="stringlength"> + * <param name="minLength">${minLengthValue}</param> <!-- will be evaluated as: Integer getMinLengthValue() --> + * <param name="maxLength">${maxLengthValue}</param> <!-- will be evaluated as: Integer getMaxLengthValue() --> + * <param name="trim">${trimValue}</param> <!-- will be evaluated as: boolean getTrimValue() --> + * <message>Your purchase code needs to be 10 characters long</message> + * </field-validator> + * </field> * </validators> * * @@ -71,33 +82,44 @@ import com.opensymphony.xwork2.validator */ public class StringLengthFieldValidator extends FieldValidatorSupport { - private boolean doTrim = true; + private boolean trim = true; private int maxLength = -1; private int minLength = -1; - - public void setMaxLength(int maxLength) { - this.maxLength = maxLength; + public void setMaxLength(String maxLength) { + if (parse) { + this.maxLength = (Integer) parse(maxLength, Integer.class); + } else { + this.maxLength = Integer.valueOf(maxLength); + } } public int getMaxLength() { return maxLength; } - public void setMinLength(int minLength) { - this.minLength = minLength; + public void setMinLength(String minLength) { + if (parse) { + this.minLength = (Integer) parse(minLength, Integer.class); + } else { + this.minLength = Integer.parseInt(minLength); + } } public int getMinLength() { return minLength; } - public void setTrim(boolean trim) { - doTrim = trim; + public void setTrim(String trim) { + if (parse) { + this.trim = (Boolean) parse(trim, Boolean.class); + } else { + this.trim = Boolean.parseBoolean(trim); + } } - public boolean getTrim() { - return doTrim; + public boolean isTrim() { + return trim; } public void validate(Object object) throws ValidationException { @@ -108,11 +130,11 @@ public class StringLengthFieldValidator // use a required validator for these return; } - if (doTrim) { + if (trim) { val = val.trim(); - if (val.length() <= 0) { - // use a required validator - return; + if (val.length() <= 0) { + // use a required validator + return; } } @@ -122,4 +144,5 @@ public class StringLengthFieldValidator addFieldError(fieldName, object); } } + } Modified: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java?rev=1428282&r1=1428281&r2=1428282&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java (original) +++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java Thu Jan 3 11:14:26 2013 @@ -18,6 +18,7 @@ package com.opensymphony.xwork2.validato import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.XWorkTestCase; +import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator; /** @@ -33,7 +34,7 @@ public class StringLengthFieldValidatorT public void testStringLengthEmptyNoTrim1() throws Exception { action.setMyField(""); - validator.setTrim(false); + validator.setTrim("false"); validator.validate(action); assertEquals(action.getMyField(), ""); @@ -43,7 +44,7 @@ public class StringLengthFieldValidatorT public void testStringLengthNullNoTrim() throws Exception { action.setMyField(null); - validator.setTrim(false); + validator.setTrim("false"); validator.validate(action); assertEquals(action.getMyField(), null); @@ -53,7 +54,7 @@ public class StringLengthFieldValidatorT public void testStringLengthEmptyTrim1() throws Exception { action.setMyField(" "); - validator.setTrim(true); + validator.setTrim("true"); validator.validate(action); assertEquals(action.getMyField(), " "); @@ -63,7 +64,7 @@ public class StringLengthFieldValidatorT public void testStringLengthEmptyNoTrim2() throws Exception { action.setMyField(" "); - validator.setTrim(false); + validator.setTrim("false"); validator.validate(action); assertEquals(action.getMyField(), " "); @@ -74,7 +75,7 @@ public class StringLengthFieldValidatorT public void testStringLengthNullTrim() throws Exception { action.setMyField(null); - validator.setTrim(true); + validator.setTrim("true"); validator.validate(action); assertEquals(action.getMyField(), null); @@ -84,7 +85,7 @@ public class StringLengthFieldValidatorT public void testInvalidStringLengthNoTrim() throws Exception { action.setMyField("abcdefghijklmn"); - validator.setTrim(false); + validator.setTrim("false"); validator.validate(action); assertEquals(action.getMyField(), "abcdefghijklmn"); @@ -94,7 +95,7 @@ public class StringLengthFieldValidatorT public void testInvalidStringLengthTrim() throws Exception { action.setMyField("abcdefghijklmn "); - validator.setTrim(true); + validator.setTrim("true"); validator.validate(action); assertEquals(action.getMyField(), "abcdefghijklmn "); @@ -104,7 +105,7 @@ public class StringLengthFieldValidatorT public void testValidStringLengthNoTrim() throws Exception { action.setMyField(" "); - validator.setTrim(false); + validator.setTrim("false"); validator.validate(action); assertEquals(action.getMyField(), " "); @@ -114,25 +115,58 @@ public class StringLengthFieldValidatorT public void testValidStringLengthTrim() throws Exception { action.setMyField("asd "); - validator.setTrim(true); + validator.setTrim("true"); validator.validate(action); assertEquals(action.getMyField(), "asd "); assertFalse(action.hasFieldErrors()); } - - - @Override + + public void testMinLengthViaExpression() throws Exception { + assertEquals(2, validator.getMinLength()); + action.setMinLengthValue(10); + + validator.setParse(true); + validator.setMinLength("${minLengthValue}"); + + assertEquals(10, validator.getMinLength()); + } + + public void testMaxLengthViaExpression() throws Exception { + assertEquals(5, validator.getMaxLength()); + action.setMaxLengthValue(100); + + validator.setParse(true); + validator.setMaxLength("${maxLengthValue}"); + + assertEquals(100, validator.getMaxLength()); + } + + public void testTrimViaExpression() throws Exception { + assertTrue(validator.isTrim()); + action.setTrimValue(false); + + validator.setParse(true); + validator.setTrim("${trimValue}"); + + assertFalse(validator.isTrim()); + } + + @Override protected void setUp() throws Exception { super.setUp(); - action = new InternalActionSupport(); + + action = new InternalActionSupport(); + ValueStack valueStack = ActionContext.getContext().getValueStack(); + valueStack.push(action); + validator = new StringLengthFieldValidator(); validator.setFieldName("myField"); validator.setMessageKey("error"); validator.setValidatorContext(new DelegatingValidatorContext(action)); - validator.setMaxLength(5); - validator.setMinLength(2); - validator.setValueStack(ActionContext.getContext().getValueStack()); + validator.setMaxLength("5"); + validator.setMinLength("2"); + validator.setValueStack(valueStack); } @@ -146,9 +180,44 @@ public class StringLengthFieldValidatorT public static class InternalActionSupport extends ActionSupport { private static final long serialVersionUID = 1L; - - private String myField; - public String getMyField() { return this.myField; } - public void setMyField(String myField) { this.myField = myField; } - } + + private String myField; + private boolean trimValue; + private int minLengthValue; + private int maxLengthValue; + + public String getMyField() { + return this.myField; + } + + public void setMyField(String myField) { + this.myField = myField; + } + + public boolean isTrimValue() { + return trimValue; + } + + public void setTrimValue(boolean trimValue) { + this.trimValue = trimValue; + } + + public int getMinLengthValue() { + return minLengthValue; + } + + public void setMinLengthValue(int minLengthValue) { + this.minLengthValue = minLengthValue; + } + + public int getMaxLengthValue() { + return maxLengthValue; + } + + public void setMaxLengthValue(int maxLengthValue) { + this.maxLengthValue = maxLengthValue; + } + + } + }