WW-3952 Extends existing logic to handle credit card validation

This commit is contained in:
Lukasz Lenart
2017-04-19 18:07:16 +02:00
parent 743d27f841
commit 0813eaa0c8
5 changed files with 53 additions and 3 deletions
@@ -122,6 +122,14 @@ public class AnnotationValidationConfigurationBuilder {
result.add(temp);
}
}
// Process CrediCardValidator
else if (a instanceof CreditCardValidator) {
CreditCardValidator v = (CreditCardValidator) a;
ValidatorConfig temp = processCreditCardValidatorAnnotation(v, fieldName, methodName);
if (temp != null) {
result.add(temp);
}
}
// Process FieldExpressionValidator
else if (a instanceof FieldExpressionValidator) {
FieldExpressionValidator v = (FieldExpressionValidator) a;
@@ -263,6 +271,15 @@ public class AnnotationValidationConfigurationBuilder {
}
}
}
CreditCardValidator[] ccv = validations.creditCards();
if (ccv != null) {
for (CreditCardValidator v : ccv) {
ValidatorConfig temp = processCreditCardValidatorAnnotation(v, fieldName, methodName);
if (temp != null) {
result.add(temp);
}
}
}
FieldExpressionValidator[] fev = validations.fieldExpressions();
if (fev != null) {
for (FieldExpressionValidator v : fev) {
@@ -786,6 +803,28 @@ public class AnnotationValidationConfigurationBuilder {
.build();
}
private ValidatorConfig processCreditCardValidatorAnnotation(CreditCardValidator v, String fieldName, String methodName) {
String validatorType = "creditcard";
Map<String, Object> params = new HashMap<>();
if (fieldName != null) {
params.put("fieldName", fieldName);
} else if (StringUtils.isNotEmpty(v.fieldName())) {
params.put("fieldName", v.fieldName());
}
validatorFactory.lookupRegisteredValidatorType(validatorType);
return new ValidatorConfig.Builder(validatorType)
.addParams(params)
.addParam("methodName", methodName)
.shortCircuit(v.shortCircuit())
.defaultMessage(v.message())
.messageKey(v.key())
.messageParams(v.messageParams())
.build();
}
private ValidatorConfig processDateRangeFieldValidatorAnnotation(DateRangeFieldValidator v, String fieldName, String methodName) {
String validatorType = "date";
@@ -167,6 +167,8 @@ public @interface Validations {
EmailValidator[] emails() default {};
CreditCardValidator[] creditCards() default {};
FieldExpressionValidator[] fieldExpressions() default {};
IntRangeFieldValidator[] intRangeFields() default {};
@@ -148,9 +148,14 @@ public class RegexFieldValidator extends FieldValidatorSupport {
compare = compare.trim();
}
Matcher matcher = pattern.matcher(compare);
if (!matcher.matches()) {
addFieldError(fieldName, object);
try {
setCurrentValue(compare);
Matcher matcher = pattern.matcher(compare);
if (!matcher.matches()) {
addFieldError(fieldName, object);
}
} finally {
setCurrentValue(null);
}
}
@@ -3,6 +3,7 @@ package com.opensymphony.xwork2.validator;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.ConditionalVisitorFieldValidator;
import com.opensymphony.xwork2.validator.annotations.ConversionErrorFieldValidator;
import com.opensymphony.xwork2.validator.annotations.CreditCardValidator;
import com.opensymphony.xwork2.validator.annotations.CustomValidator;
import com.opensymphony.xwork2.validator.annotations.DateRangeFieldValidator;
import com.opensymphony.xwork2.validator.annotations.DoubleRangeFieldValidator;
@@ -45,6 +46,8 @@ public class AnnotationValidationAction extends ActionSupport {
messageParams = {"one", "two", "three"})
@EmailValidator(message = "Foo isn't a valid e-mail!", fieldName = "foo", key = "email.key",
messageParams = {"one", "two", "three"}, shortCircuit = true)
@CreditCardValidator(message = "Foo isn't a valid credit card!", fieldName = "foo", key = "creditCard.key",
messageParams = {"one", "two", "three"}, shortCircuit = true)
@ExpressionValidator(expression = "true", message = "Is not true!", key = "expression.key",
messageParams = {"one", "two", "three"}, shortCircuit = true)
@FieldExpressionValidator(expression = "true", fieldName = "foo", key = "fieldexpression.key", message = "It is not true!",
+1
View File
@@ -11,6 +11,7 @@
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="creditcard" class="com.opensymphony.xwork2.validator.validators.CreditCardValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>