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
