WICKET-6313 updating wicket-bean-validation project to use the new property 
resolution api


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/fa0f1262
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/fa0f1262
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/fa0f1262

Branch: refs/heads/WICKET-6318-configurable-property-expression-resolver
Commit: fa0f12624c97e99a37f2fbe0f9b8e41215bedb1f
Parents: ede069b
Author: Pedro Henrique Oliveira dos Santos <[email protected]>
Authored: Mon Feb 13 03:15:44 2017 -0200
Committer: Pedro Henrique Oliveira dos Santos <[email protected]>
Committed: Mon Feb 13 03:15:44 2017 -0200

----------------------------------------------------------------------
 .../validation/DefaultPropertyResolver.java     | 26 ++++++++----
 .../bean/validation/IPropertyResolver.java      |  1 -
 .../bean/validation/PropertyValidator.java      |  2 +-
 .../validation/ValidationModelResolver.java     |  8 ++--
 .../validation/ValidationModelResolverTest.java | 44 --------------------
 5 files changed, 23 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/fa0f1262/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java
----------------------------------------------------------------------
diff --git 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java
 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java
index 527a24f..174598a 100644
--- 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java
+++ 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java
@@ -1,13 +1,16 @@
 package org.apache.wicket.bean.validation;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.apache.wicket.Application;
 import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.core.util.lang.IPropertyExpressionResolver;
+import org.apache.wicket.core.util.reflection.ObjectWithGetAndSet;
 import org.apache.wicket.markup.html.form.FormComponent;
-import org.apache.wicket.model.IPropertyReflectionAwareModel;
+import org.apache.wicket.model.AbstractPropertyModel;
 import org.apache.wicket.model.PropertyModel;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
 /**
  * Default property resolver. This resolver supports common Wicket models like 
the
  * {@link PropertyModel}, and other implementations of {@link 
IPropertyReflectionAwareModel}
@@ -21,16 +24,23 @@ public class DefaultPropertyResolver implements 
IPropertyResolver
        @Override
        public Property resolveProperty(FormComponent<?> component)
        {
-               IPropertyReflectionAwareModel<?> delegate = 
ValidationModelResolver.resolvePropertyModelFrom(component);
+               AbstractPropertyModel<?> delegate = 
ValidationModelResolver.resolvePropertyModelFrom(component);
                if (delegate == null)
                {
                        return null;
                }
+               Object target = delegate.getInnermostModelOrObject();
+               if(target == null)
+                       return null;
                
-               String name;
-               Method getter = delegate.getPropertyGetter();
+               String expression = delegate.getPropertyExpression();
+               IPropertyExpressionResolver propertyExpressionResolver = 
Application.get().getApplicationSettings().getPropertyExpressionResolver();
+               ObjectWithGetAndSet objectWithGetAndSet = 
propertyExpressionResolver.resolve(expression, target, target.getClass());
+
+               Method getter = objectWithGetAndSet.getGetter();
                if (getter != null)
                {
+                       String name;
                        String methodName = getter.getName();
                        if (methodName.startsWith("get"))
                        {
@@ -50,7 +60,7 @@ public class DefaultPropertyResolver implements 
IPropertyResolver
                        return new Property(getter.getDeclaringClass(), name);
                }
 
-               Field field = delegate.getPropertyField();
+               Field field = objectWithGetAndSet.getField();
                if (field != null)
                {
                        return new Property(field.getDeclaringClass(), 
field.getName());

http://git-wip-us.apache.org/repos/asf/wicket/blob/fa0f1262/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IPropertyResolver.java
----------------------------------------------------------------------
diff --git 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IPropertyResolver.java
 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IPropertyResolver.java
index dabe39f..c761527 100644
--- 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IPropertyResolver.java
+++ 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IPropertyResolver.java
@@ -1,7 +1,6 @@
 package org.apache.wicket.bean.validation;
 
 import org.apache.wicket.markup.html.form.FormComponent;
-import org.apache.wicket.model.IPropertyReflectionAwareModel;
 
 /**
  * Resolves the property to be validated for the given form component. 
Implementations, incuding the

http://git-wip-us.apache.org/repos/asf/wicket/blob/fa0f1262/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
----------------------------------------------------------------------
diff --git 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
index 862a69b..1dc3cea 100644
--- 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
+++ 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
@@ -100,7 +100,7 @@ public class PropertyValidator<T> extends Behavior 
implements IValidator<T>
                String baseMessage = "Could not resolve Bean Property from 
component: " + component
                                + ". (Hints:) Possible causes are a typo in the 
PropertyExpression, a null reference or a model that does not work in 
combination with a "
                                + IPropertyResolver.class.getSimpleName() + ".";
-        IModel<?> model = 
ValidationModelResolver.resolvePropertyModelFrom(component);
+        IModel<?> model = component.getInnermostModel();
                if (model != null) {
                        baseMessage += " Model : " + model;
                }

http://git-wip-us.apache.org/repos/asf/wicket/blob/fa0f1262/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ValidationModelResolver.java
----------------------------------------------------------------------
diff --git 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ValidationModelResolver.java
 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ValidationModelResolver.java
index cb8cfcd..a452776 100644
--- 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ValidationModelResolver.java
+++ 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ValidationModelResolver.java
@@ -1,8 +1,8 @@
 package org.apache.wicket.bean.validation;
 
 import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.model.AbstractPropertyModel;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.IPropertyReflectionAwareModel;
 import org.apache.wicket.model.IWrapModel;
 
 /**
@@ -19,7 +19,7 @@ final class ValidationModelResolver
      *
      * @return property-aware model, extracted from supplied component or 
<code>null</code>
      */
-    public static IPropertyReflectionAwareModel<?> 
resolvePropertyModelFrom(FormComponent<?> component)
+    public static AbstractPropertyModel<?> 
resolvePropertyModelFrom(FormComponent<?> component)
     {
         IModel<?> model = component.getModel();
         while (true)
@@ -28,9 +28,9 @@ final class ValidationModelResolver
             {
                 return null;
             }
-            if (model instanceof IPropertyReflectionAwareModel)
+            if (model instanceof AbstractPropertyModel)
             {
-                return (IPropertyReflectionAwareModel<?>) model;
+                return (AbstractPropertyModel<?>) model;
             }
             if (model instanceof IWrapModel<?>)
             {

http://git-wip-us.apache.org/repos/asf/wicket/blob/fa0f1262/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/ValidationModelResolverTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/ValidationModelResolverTest.java
 
b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/ValidationModelResolverTest.java
deleted file mode 100644
index cefb2e9..0000000
--- 
a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/ValidationModelResolverTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.apache.wicket.bean.validation;
-
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IPropertyReflectionAwareModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.util.tester.WicketTesterScope;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-
-/**
- * @author alexander.v.morozov
- */
-public class ValidationModelResolverTest
-{
-
-    @Rule
-    public WicketTesterScope scope = new WicketTesterScope();
-
-    @Test
-    public void noModelBoundToComponent()
-    {
-        TextField<String> textField = new TextField<String>("field");
-        
Assert.assertNull(ValidationModelResolver.resolvePropertyModelFrom(textField));
-    }
-
-    @Test
-    public void simpleModelBoundToComponent()
-    {
-        TextField<String> textField = new TextField<String>("text", new 
Model<String>());
-        
Assert.assertNull(ValidationModelResolver.resolvePropertyModelFrom(textField));
-    }
-
-    @Test
-    public void propertyModelBoundToComponent()
-    {
-        TextField<String> textField = new TextField<String>("text", new 
PropertyModel<String>(new TestValidatableBean(), "text"));
-        IPropertyReflectionAwareModel<?> model = 
ValidationModelResolver.resolvePropertyModelFrom(textField);
-        Assert.assertNotNull(model);
-        Assert.assertEquals("text", model.getPropertyField().getName());
-    }
-
-}
\ No newline at end of file

Reply via email to