You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by ro...@apache.org on 2010/12/09 15:02:32 UTC
svn commit: r1043968 - in /incubator/bval/trunk:
bval-core/src/main/java/org/apache/bval/
bval-jsr303/src/main/java/org/apache/bval/jsr303/
bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/
Author: romanstumm
Date: Thu Dec 9 14:02:32 2010
New Revision: 1043968
URL: http://svn.apache.org/viewvc?rev=1043968&view=rev
Log:
BVAL-83 Support groups on @Valid in method/return validation:
Validate annotation + groups
no behavior during validation implemented yet
Modified:
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/Validate.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303Features.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorMetaBeanFactory.java
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/Validate.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/Validate.java?rev=1043968&r1=1043967&r2=1043968&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/Validate.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/Validate.java Thu Dec 9 14:02:32 2010
@@ -16,18 +16,26 @@
*/
package org.apache.bval;
-import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
/**
* Description: Annotate an element (parameter) to be validated.
* <br>
*/
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.PARAMETER, ElementType.METHOD})
+@Target({METHOD, FIELD, CONSTRUCTOR, PARAMETER})
+@Retention(RUNTIME)
public @interface Validate {
- /** (optional) the MetaBean.id to use */
+ /**
+ * (optional) the MetaBean.id to use
+ */
String value() default "";
+
+ /**
+ * to Support groups on @Valid(ate) in method/return validation
+ */
+ Class<?>[] groups() default {};
}
Modified: incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java?rev=1043968&r1=1043967&r2=1043968&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java Thu Dec 9 14:02:32 2010
@@ -18,15 +18,6 @@
*/
package org.apache.bval.jsr303;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import javax.validation.ConstraintViolation;
-import javax.validation.ValidationException;
-import javax.validation.Validator;
-import javax.validation.groups.Default;
-import javax.validation.metadata.BeanDescriptor;
import org.apache.bval.MetaBeanFinder;
import org.apache.bval.jsr303.groups.Group;
import org.apache.bval.jsr303.groups.Groups;
@@ -42,6 +33,16 @@ import org.apache.bval.util.AccessStrate
import org.apache.bval.util.ValidationHelper;
import org.apache.commons.lang.ClassUtils;
+import javax.validation.ConstraintViolation;
+import javax.validation.ValidationException;
+import javax.validation.Validator;
+import javax.validation.groups.Default;
+import javax.validation.metadata.BeanDescriptor;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
// TODO: centralize treatMapsLikeBeans
/**
@@ -514,6 +515,8 @@ public class ClassValidator implements V
// save old values from context
final Object bean = context.getBean();
final MetaBean mbean = context.getMetaBean();
+ // TODO implement Validation.groups support on related bean
+// Class[] groups = prop.getFeature(Jsr303Features.Property.REF_GROUPS);
for (AccessStrategy each : access) {
if (isCascadable(context, prop, each)) {
// modify context state for relationship-target bean
Modified: incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303Features.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303Features.java?rev=1043968&r1=1043967&r2=1043968&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303Features.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303Features.java Thu Dec 9 14:02:32 2010
@@ -34,6 +34,10 @@ public interface Jsr303Features {
interface Property extends Features.Property {
/** INFO: cached PropertyDescriptorImpl of the property */
String PropertyDescriptor = "PropertyDescriptor";
+ /**
+ * INFO: Class[] with the groups to validate a REF_CASCADE
+ */
+ String REF_GROUPS = "refGroups";
}
/**
Modified: incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java?rev=1043968&r1=1043967&r2=1043968&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java Thu Dec 9 14:02:32 2010
@@ -20,6 +20,7 @@ package org.apache.bval.jsr303;
import org.apache.bval.MetaBeanFactory;
+import org.apache.bval.Validate;
import org.apache.bval.jsr303.groups.Group;
import org.apache.bval.jsr303.util.ClassHelper;
import org.apache.bval.jsr303.util.ConstraintDefinitionValidator;
@@ -289,6 +290,8 @@ public class Jsr303MetaBeanFactory imple
throws IllegalAccessException, InvocationTargetException {
if (annotation instanceof Valid) {
return processValid(prop, access);
+ } else if (annotation instanceof Validate) {
+ return processValid(prop, access, ((Validate)annotation).groups());
} else {
/**
* An annotation is considered a constraint definition if its retention
@@ -350,9 +353,10 @@ public class Jsr303MetaBeanFactory imple
return validatorClasses;
}
- private boolean processValid(MetaProperty prop, AccessStrategy access) {
+ private boolean processValid(MetaProperty prop, AccessStrategy access, Class<?>... groups) {
if (prop != null/* && prop.getMetaBean() == null*/) {
AccessStrategy[] strategies = prop.getFeature(Features.Property.REF_CASCADE);
+ prop.putFeature(Jsr303Features.Property.REF_GROUPS, groups);
if (strategies == null) {
strategies = new AccessStrategy[]{access};
prop.putFeature(Features.Property.REF_CASCADE, strategies);
Modified: incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorMetaBeanFactory.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorMetaBeanFactory.java?rev=1043968&r1=1043967&r2=1043968&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorMetaBeanFactory.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorMetaBeanFactory.java Thu Dec 9 14:02:32 2010
@@ -16,6 +16,7 @@
*/
package org.apache.bval.jsr303.extensions;
+import org.apache.bval.Validate;
import org.apache.bval.jsr303.ApacheFactoryContext;
import org.apache.bval.jsr303.AppendValidation;
import org.apache.bval.jsr303.Jsr303MetaBeanFactory;
@@ -107,7 +108,7 @@ public class MethodValidatorMetaBeanFact
AppendValidationToList validations = new AppendValidationToList();
ReturnAccess returnAccess = new ReturnAccess(method.getReturnType());
for (Annotation anno : method.getAnnotations()) {
- if (anno instanceof Valid) {
+ if (anno instanceof Valid || anno instanceof Validate) {
methodDesc.setCascaded(true);
} else {
processAnnotation(anno, methodDesc, returnAccess, validations);
@@ -132,7 +133,7 @@ public class MethodValidatorMetaBeanFact
AppendValidationToList validations = new AppendValidationToList();
boolean cascaded = false;
for (Annotation anno : paramAnnos) {
- if (anno instanceof Valid) {
+ if (anno instanceof Valid || anno instanceof Validate) {
cascaded = true;
} else {
processAnnotation(anno, methodDesc, access, validations);
@@ -149,7 +150,7 @@ public class MethodValidatorMetaBeanFact
private <A extends Annotation> void processAnnotation(A annotation, ProcedureDescriptor desc,
AccessStrategy access, AppendValidation validations) throws InvocationTargetException, IllegalAccessException {
- if (annotation instanceof Valid) {
+ if (annotation instanceof Valid || annotation instanceof Validate) {
desc.setCascaded(true);
} else {
Constraint vcAnno = annotation.annotationType().getAnnotation(Constraint.class);