1 16 package org.apache.cocoon.forms.datatype.validationruleimpl; 17 18 import org.apache.cocoon.forms.FormsConstants; 19 import org.apache.cocoon.forms.formmodel.CannotYetResolveWarning; 20 import org.apache.cocoon.forms.util.I18nMessage; 21 import org.apache.cocoon.forms.validation.ValidationError; 22 import org.outerj.expression.ExpressionContext; 23 import org.outerj.expression.Expression; 24 25 import java.math.BigDecimal ; 26 27 40 public class LengthValidationRule extends AbstractValidationRule { 41 private Expression exactExpr; 42 private Expression minExpr; 43 private Expression maxExpr; 44 45 public void setExactExpr(Expression exactExpr) { 46 this.exactExpr = exactExpr; 47 } 48 49 public void setMinExpr(Expression minExpr) { 50 this.minExpr = minExpr; 51 } 52 53 public void setMaxExpr(Expression maxExpr) { 54 this.maxExpr = maxExpr; 55 } 56 57 public ValidationError validate(Object value, ExpressionContext expressionContext) { 58 String string = (String )value; 59 60 if (exactExpr != null) { 61 Object result = evaluateNumeric(exactExpr, expressionContext, "exact", "length"); 62 if (result instanceof ValidationError) { 63 return (ValidationError)result; 64 } else if (result instanceof CannotYetResolveWarning) { 65 return null; 66 } 67 int length = ((BigDecimal )result).intValue(); 68 if (string.length() != length) { 69 return hasFailMessage() ? getFailMessage() : new ValidationError(new I18nMessage("validation.string.exact-length", new String [] {String.valueOf(length)}, FormsConstants.I18N_CATALOGUE)); 70 } 71 return null; 72 } else if (minExpr != null && maxExpr != null) { 73 Object result = evaluateNumeric(minExpr, expressionContext, "min", "length"); 74 if (result instanceof ValidationError) { 75 return (ValidationError)result; 76 } else if (result instanceof CannotYetResolveWarning) { 77 return null; 78 } 79 int minLength = ((BigDecimal )result).intValue(); 80 81 result = evaluateNumeric(maxExpr, expressionContext, "max", "length"); 82 if (result instanceof ValidationError) { 83 return (ValidationError)result; 84 } else if (result instanceof CannotYetResolveWarning) { 85 return null; 86 } 87 int maxLength = ((BigDecimal )result).intValue(); 88 89 if (string.length() < minLength || string.length() > maxLength) { 90 return hasFailMessage() ? getFailMessage() : new ValidationError(new I18nMessage("validation.string.range-length", new String [] {String.valueOf(minLength), String.valueOf(maxLength)}, FormsConstants.I18N_CATALOGUE)); 91 } 92 return null; 93 } else if (minExpr != null) { 94 Object result = evaluateNumeric(minExpr, expressionContext, "min", "length"); 95 if (result instanceof ValidationError) { 96 return (ValidationError)result; 97 } else if (result instanceof CannotYetResolveWarning) { 98 return null; 99 } 100 int length = ((BigDecimal )result).intValue(); 101 if (string.length() < length) { 102 return hasFailMessage() ? getFailMessage() : new ValidationError(new I18nMessage("validation.string.min-length", new String [] {String.valueOf(length)}, FormsConstants.I18N_CATALOGUE)); 103 } 104 return null; 105 } else if (maxExpr != null) { 106 Object result = evaluateNumeric(maxExpr, expressionContext, "max", "length"); 107 if (result instanceof ValidationError) { 108 return (ValidationError)result; 109 } else if (result instanceof CannotYetResolveWarning) { 110 return null; 111 } 112 int length = ((BigDecimal )result).intValue(); 113 if (string.length() > length) { 114 return hasFailMessage() ? getFailMessage() : new ValidationError(new I18nMessage("validation.string.max-length", new String [] {String.valueOf(length)}, FormsConstants.I18N_CATALOGUE)); 115 } 116 return null; 117 } 118 return null; 119 } 120 121 public boolean supportsType(Class clazz, boolean arrayType) { 122 return clazz.isAssignableFrom(String .class) && !arrayType; 123 } 124 } 125 | Popular Tags |