📄 annotationvalidationconfigurationbuilder.java
字号:
/* * Copyright (c) 2002-2006 by OpenSymphony * All rights reserved. */package com.opensymphony.xwork2.validator;import java.lang.annotation.Annotation;import java.lang.reflect.Method;import java.util.*;import java.util.regex.Pattern;import java.util.regex.Matcher;import java.text.SimpleDateFormat;import java.text.DateFormat;import java.text.ParseException;import com.opensymphony.xwork2.validator.annotations.*;/** * <code>AnnotationValidationConfigurationBuilder</code> * * @author Rainer Hermanns * @author jepjep * @version $Id: AnnotationValidationConfigurationBuilder.java 1408 2007-03-31 16:14:52Z rainerh $ */public class AnnotationValidationConfigurationBuilder { private static final Pattern SETTER_PATTERN = Pattern.compile("set([A-Z][A-Za-z0-9]*)$"); private static final Pattern GETTER_PATTERN = Pattern.compile("(get|is|has)([A-Z][A-Za-z0-9]*)$"); private static List<ValidatorConfig> processAnnotations(Object o) { List<ValidatorConfig> result = new ArrayList<ValidatorConfig>(); String fieldName = null; String methodName = null; Annotation[] annotations = null; if (o instanceof Class) { Class clazz = (Class) o; annotations = clazz.getAnnotations(); } if (o instanceof Method) { Method method = (Method) o; fieldName = resolvePropertyName(method); methodName = method.getName(); annotations = method.getAnnotations(); } if (annotations != null) { for (Annotation a : annotations) { // Process collection of custom validations if (a instanceof Validations) { processValidationAnnotation(a, fieldName, result); } // Process single custom validator if (a instanceof Validation) { Validation v = (Validation) a; if ( v.validations() != null ) { for ( Validations val: v.validations()) { processValidationAnnotation(val , fieldName, result); } } } // Process single custom validator else if (a instanceof ExpressionValidator) { ExpressionValidator v = (ExpressionValidator) a; ValidatorConfig temp = processExpressionValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } // Process single custom validator else if (a instanceof CustomValidator) { CustomValidator v = (CustomValidator) a; ValidatorConfig temp = processCustomValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } // Process ConversionErrorFieldValidator else if ( a instanceof ConversionErrorFieldValidator) { ConversionErrorFieldValidator v = (ConversionErrorFieldValidator) a; ValidatorConfig temp = processConversionErrorFieldValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } // Process DateRangeFieldValidator else if ( a instanceof DateRangeFieldValidator) { DateRangeFieldValidator v = (DateRangeFieldValidator) a; ValidatorConfig temp = processDateRangeFieldValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } // Process EmailValidator else if ( a instanceof EmailValidator) { EmailValidator v = (EmailValidator) a; ValidatorConfig temp = processEmailValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } // Process FieldExpressionValidator else if ( a instanceof FieldExpressionValidator) { FieldExpressionValidator v = (FieldExpressionValidator) a; ValidatorConfig temp = processFieldExpressionValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } // Process IntRangeFieldValidator else if ( a instanceof IntRangeFieldValidator) { IntRangeFieldValidator v = (IntRangeFieldValidator) a; ValidatorConfig temp = processIntRangeFieldValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } // Process DoubleRangeFieldValidator else if ( a instanceof DoubleRangeFieldValidator) { DoubleRangeFieldValidator v = (DoubleRangeFieldValidator) a; ValidatorConfig temp = processDoubleRangeFieldValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } // Process RequiredFieldValidator else if ( a instanceof RequiredFieldValidator) { RequiredFieldValidator v = (RequiredFieldValidator) a; ValidatorConfig temp = processRequiredFieldValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } // Process RequiredStringValidator else if ( a instanceof RequiredStringValidator) { RequiredStringValidator v = (RequiredStringValidator) a; ValidatorConfig temp = processRequiredStringValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } // Process StringLengthFieldValidator else if ( a instanceof StringLengthFieldValidator) { StringLengthFieldValidator v = (StringLengthFieldValidator) a; ValidatorConfig temp = processStringLengthFieldValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } // Process UrlValidator else if ( a instanceof UrlValidator) { UrlValidator v = (UrlValidator) a; ValidatorConfig temp = processUrlValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } // Process VisitorFieldValidator else if ( a instanceof VisitorFieldValidator) { VisitorFieldValidator v = (VisitorFieldValidator) a; ValidatorConfig temp = processVisitorFieldValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } // Process RegexFieldValidator else if ( a instanceof RegexFieldValidator) { RegexFieldValidator v = (RegexFieldValidator) a; ValidatorConfig temp = processRegexFieldValidatorAnnotation(v, fieldName); if ( temp != null) { result.add(temp); } } } if (methodName != null) { for (ValidatorConfig vc : result) { vc.getParams().put("methodName", methodName); } } } return result; } private static void processValidationAnnotation(Annotation a, String fieldName, List<ValidatorConfig> result) { Validations validations = (Validations) a; CustomValidator[] cv = validations.customValidators(); if ( cv != null ) { for (CustomValidator v : cv) { ValidatorConfig temp = processCustomValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } ExpressionValidator[] ev = validations.expressions(); if ( ev != null ) { for (ExpressionValidator v : ev) { ValidatorConfig temp = processExpressionValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } ConversionErrorFieldValidator[] cef = validations.conversionErrorFields(); if ( cef != null ) { for (ConversionErrorFieldValidator v : cef) { ValidatorConfig temp = processConversionErrorFieldValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } DateRangeFieldValidator[] drfv = validations.dateRangeFields(); if ( drfv != null ) { for (DateRangeFieldValidator v : drfv) { ValidatorConfig temp = processDateRangeFieldValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } EmailValidator[] emv = validations.emails(); if ( emv != null ) { for (EmailValidator v : emv) { ValidatorConfig temp = processEmailValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } FieldExpressionValidator[] fev = validations.fieldExpressions(); if ( fev != null ) { for (FieldExpressionValidator v : fev) { ValidatorConfig temp = processFieldExpressionValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } IntRangeFieldValidator[] irfv = validations.intRangeFields(); if ( irfv != null ) { for (IntRangeFieldValidator v : irfv) { ValidatorConfig temp = processIntRangeFieldValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } RegexFieldValidator[] rfv = validations.regexFields(); if ( rfv != null ) { for (RegexFieldValidator v : rfv) { ValidatorConfig temp = processRegexFieldValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } RequiredFieldValidator[] rv = validations.requiredFields(); if ( rv != null ) { for (RequiredFieldValidator v : rv) { ValidatorConfig temp = processRequiredFieldValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } RequiredStringValidator[] rsv = validations.requiredStrings(); if ( rsv != null ) { for (RequiredStringValidator v : rsv) { ValidatorConfig temp = processRequiredStringValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } StringLengthFieldValidator[] slfv = validations.stringLengthFields(); if ( slfv != null ) { for (StringLengthFieldValidator v : slfv) { ValidatorConfig temp = processStringLengthFieldValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } UrlValidator[] uv = validations.urls(); if ( uv != null ) { for (UrlValidator v : uv) { ValidatorConfig temp = processUrlValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } VisitorFieldValidator[] vfv = validations.visitorFields(); if ( vfv != null ) { for (VisitorFieldValidator v : vfv) { ValidatorConfig temp = processVisitorFieldValidatorAnnotation(v, fieldName); if (temp != null) { result.add(temp); } } } } private static ValidatorConfig processExpressionValidatorAnnotation(ExpressionValidator v, String fieldName) { String validatorType = "expression"; Map<String, Object> params = new HashMap<String, Object>(); if (fieldName != null) { params.put("fieldName", fieldName); } params.put("expression", v.expression()); ValidatorFactory.lookupRegisteredValidatorType(validatorType); ValidatorConfig vCfg = new ValidatorConfig(validatorType, params); vCfg.setShortCircuit(v.shortCircuit()); vCfg.setDefaultMessage(v.message()); String key = v.key(); if ((key != null) && (key.trim().length() > 0)) { vCfg.setMessageKey(key); } return vCfg; } private static ValidatorConfig processCustomValidatorAnnotation(CustomValidator v, String fieldName) { Map<String, Object> params = new HashMap<String, Object>(); if (fieldName != null) { params.put("fieldName", fieldName); } else if (v.fieldName() != null && v.fieldName().length() > 0 ) { params.put("fieldName", v.fieldName()); } String validatorType = v.type(); ValidatorFactory.lookupRegisteredValidatorType(validatorType); Annotation[] recursedAnnotations = v.parameters(); if ( recursedAnnotations != null ) { for (Annotation a2 : recursedAnnotations) { if (a2 instanceof ValidationParameter) { ValidationParameter parameter = (ValidationParameter) a2; String parameterName = parameter.name(); String parameterValue = parameter.value(); params.put(parameterName, parameterValue); } } } ValidatorConfig vCfg = new ValidatorConfig(validatorType, params); vCfg.setShortCircuit(v.shortCircuit()); vCfg.setDefaultMessage(v.message()); String key = v.key(); if ((key != null) && (key.trim().length() > 0)) { vCfg.setMessageKey(key); } return vCfg; } private static ValidatorConfig processRegexFieldValidatorAnnotation(RegexFieldValidator v, String fieldName) { String validatorType = "regex"; Map<String, Object> params = new HashMap<String, Object>(); if (fieldName != null) { params.put("fieldName", fieldName); } else if (v.fieldName() != null && v.fieldName().length() > 0 ) { params.put("fieldName", v.fieldName()); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -