You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2011/05/28 01:04:47 UTC
svn commit: r1128505 - in
/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src:
main/java/org/apache/bval/jsr303/dynamic/
test/java/org/apache/bval/jsr303/dynamic/
Author: mbenson
Date: Fri May 27 23:04:47 2011
New Revision: 1128505
URL: http://svn.apache.org/viewvc?rev=1128505&view=rev
Log:
finish/refactor basic dynamic bean validation extval validation integration
Modified:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/DynamicValidatorContext.java
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/NestedValidator.java
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/test/java/org/apache/bval/jsr303/dynamic/NestedValidatorTest.java
Modified: incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/DynamicValidatorContext.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/DynamicValidatorContext.java?rev=1128505&r1=1128504&r2=1128505&view=diff
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/DynamicValidatorContext.java (original)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/DynamicValidatorContext.java Fri May 27 23:04:47 2011
@@ -80,7 +80,19 @@ public class DynamicValidatorContext ext
}
- private final DynamicMetaGraphManagerImpl metaGraphManager;
+ private static class CustomizableContext extends DynamicValidatorContext {
+
+ /**
+ * Create a new NestedContext instance.
+ *
+ * @param factory
+ * @param metaBeanFinder
+ */
+ CustomizableContext(DynamicValidatorFactory factory, MetaBeanFinder metaBeanFinder) {
+ super(factory, metaBeanFinder);
+ }
+
+ }
/**
* Create a new {@link DynamicValidatorContext} instance.
@@ -89,7 +101,16 @@ public class DynamicValidatorContext ext
*/
public DynamicValidatorContext(DynamicValidatorFactory validatorFactory) {
super(validatorFactory);
- this.metaGraphManager = ((DynamicMetaBeanFinder) getMetaBeanFinder()).metaGraphManager;
+ }
+
+ /**
+ * Create a new DynamicValidatorContext instance.
+ *
+ * @param factory
+ * @param metaBeanFinder
+ */
+ protected DynamicValidatorContext(DynamicValidatorFactory factory, MetaBeanFinder metaBeanFinder) {
+ super(factory, metaBeanFinder);
}
/**
@@ -120,28 +141,28 @@ public class DynamicValidatorContext ext
* @return whether applying the specified annotation resulted in a change
*/
public boolean constrain(Class<?> beanType, String propertyPath, Annotation annotation) {
- return metaGraphManager.constrain(beanType, propertyPath, annotation);
+ return getDynamicMetaBeanFinder().metaGraphManager.constrain(beanType, propertyPath, annotation);
}
/**
* {@inheritDoc}
*/
public DynamicMetaGraphManager.Interface writable() {
- return metaGraphManager.writable();
+ return getDynamicMetaBeanFinder().metaGraphManager.writable();
}
/**
* {@inheritDoc}
*/
public DynamicMetaGraphManager.Interface readOnly() {
- return metaGraphManager.readOnly();
+ return getDynamicMetaBeanFinder().metaGraphManager.readOnly();
}
/**
* {@inheritDoc}
*/
public void clear() {
- metaGraphManager.clear();
+ getDynamicMetaBeanFinder().metaGraphManager.clear();
}
/**
@@ -153,6 +174,16 @@ public class DynamicValidatorContext ext
}
/**
+ * Get a customizable copy of this context; i.e. with the same backing store, but permitting the customizations of
+ * the {@code ValidatorContext} interface.
+ *
+ * @return DynamicValidatorContext
+ */
+ public DynamicValidatorContext customizable() {
+ return new CustomizableContext(getFactory(), getMetaBeanFinder());
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
@@ -160,4 +191,12 @@ public class DynamicValidatorContext ext
return new DynamicMetaBeanFinder(getFactory().metaBeanFinder);
}
+ /**
+ * Get this {@code DynamicValidatorContext}'s {@code DynamicMetaBeanFinder}.
+ *
+ * @return DynamicMetaBeanFinder
+ */
+ protected DynamicMetaBeanFinder getDynamicMetaBeanFinder() {
+ return (DynamicMetaBeanFinder) getMetaBeanFinder();
+ }
}
Modified: incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/NestedValidator.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/NestedValidator.java?rev=1128505&r1=1128504&r2=1128505&view=diff
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/NestedValidator.java (original)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/NestedValidator.java Fri May 27 23:04:47 2011
@@ -25,12 +25,14 @@ import javax.validation.metadata.BeanDes
import org.apache.bval.DynamicMetaBean;
import org.apache.bval.jsr303.GroupValidationContext;
+import org.apache.bval.jsr303.UnknownPropertyException;
import org.apache.bval.jsr303.util.PathImpl;
import org.apache.bval.jsr303.util.PathNavigation;
import org.apache.bval.jsr303.util.ValidationContextTraversal;
import org.apache.bval.model.MetaBean;
import org.apache.bval.model.MetaProperty;
import org.apache.bval.util.AccessStrategy;
+import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
@@ -88,42 +90,51 @@ public class NestedValidator extends Dyn
*/
protected GroupValidationContext createContext(MetaBean metaBean, final Object object, Class objectClass,
Class... groups) {
- if (StringUtils.isEmpty(path)) {
- return super.createContext(metaBean, object, objectClass, groups);
- }
- GroupValidationContext result = super.createContext(rootBean, null, rootBean.getBeanClass(), groups);
- ValidationContextTraversal validationContextTraversal = createValidationContextTraversal(result);
- PathNavigation.navigate(path, validationContextTraversal);
- final MetaProperty prop = result.getMetaProperty();
- if (prop != null) {
- result.moveDown(prop, new AccessStrategy() {
-
- @Override
- public String getPropertyName() {
- return prop.getName();
- }
-
- @Override
- public Type getJavaType() {
- return prop.getType();
+ if (StringUtils.isNotEmpty(path)) {
+ try {
+ GroupValidationContext result = super.createContext(rootBean, null, rootBean.getBeanClass(), groups);
+ ValidationContextTraversal validationContextTraversal = createValidationContextTraversal(result);
+ PathNavigation.navigate(path, validationContextTraversal);
+ final MetaProperty prop = result.getMetaProperty();
+ if (prop != null) {
+ if (prop.getMetaBean() == null) {
+ // should we do this here, or is there a better place?
+ prop.setMetaBean(new DynamicMetaBean(getMetaBeanFinder()));
+ }
+ result.moveDown(prop, new AccessStrategy() {
+
+ @Override
+ public String getPropertyName() {
+ return prop.getName();
+ }
+
+ @Override
+ public Type getJavaType() {
+ return prop.getType();
+ }
+
+ @Override
+ public ElementType getElementType() {
+ return ElementType.LOCAL_VARIABLE;
+ }
+
+ @Override
+ public Object get(Object arg0) {
+ return object;
+ }
+ });
+ } else {
+ result.setBean(object);
}
-
- @Override
- public ElementType getElementType() {
- return ElementType.LOCAL_VARIABLE;
+ if (result.getMetaBean() instanceof DynamicMetaBean) {
+ result.setMetaBean(((DynamicMetaBean) result.getMetaBean()).resolveMetaBean(ObjectUtils
+ .defaultIfNull(object, objectClass)));
}
+ return result;
+ } catch (UnknownPropertyException e) {
- @Override
- public Object get(Object arg0) {
- return object;
- }
- });
- } else {
- result.setBean(object);
- }
- if (result.getMetaBean() instanceof DynamicMetaBean) {
- result.setMetaBean(((DynamicMetaBean) result.getMetaBean()).resolveMetaBean(object));
+ }
}
- return result;
+ return super.createContext(metaBean, object, objectClass, groups);
}
}
Modified: incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/test/java/org/apache/bval/jsr303/dynamic/NestedValidatorTest.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/test/java/org/apache/bval/jsr303/dynamic/NestedValidatorTest.java?rev=1128505&r1=1128504&r2=1128505&view=diff
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/test/java/org/apache/bval/jsr303/dynamic/NestedValidatorTest.java (original)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/provider/src/test/java/org/apache/bval/jsr303/dynamic/NestedValidatorTest.java Fri May 27 23:04:47 2011
@@ -19,7 +19,6 @@ package org.apache.bval.jsr303.dynamic;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import java.beans.PropertyDescriptor;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Set;
@@ -29,7 +28,6 @@ import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
-import javax.validation.metadata.BeanDescriptor;
import org.apache.bval.jsr303.ApacheValidationProvider;
import org.apache.bval.jsr303.ApacheValidatorConfiguration;