WICKET-5505 DefaultPropertyResolver does not respect JavaBean conventions

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

Branch: refs/heads/sandbox/component-queueing-2
Commit: 6cceff44098a0183f0c9f632af93b3205db4ac22
Parents: a69e7ed
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Tue Feb 18 10:42:42 2014 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Tue Feb 18 10:42:42 2014 +0200

----------------------------------------------------------------------
 .../validation/DefaultPropertyResolver.java     | 20 +++++++++++++--
 .../validation/DefaultPropertyResolverTest.java | 27 ++++++++++++++++++++
 2 files changed, 45 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/6cceff44/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 91eb1a3..442bca2 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
@@ -3,6 +3,7 @@ package org.apache.wicket.bean.validation;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 
+import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.IPropertyReflectionAwareModel;
@@ -50,11 +51,26 @@ public class DefaultPropertyResolver implements 
IPropertyResolver
                        return new Property(field.getDeclaringClass(), 
field.getName());
                }
 
+               String name;
                Method getter = delegate.getPropertyGetter();
                if (getter != null)
                {
-                       String name = getter.getName().substring(3, 
4).toLowerCase() +
-                               getter.getName().substring(4);
+                       String methodName = getter.getName();
+                       if (methodName.startsWith("get"))
+                       {
+                               name = methodName.substring(3, 4).toLowerCase() 
+
+                                       methodName.substring(4);
+                       }
+                       else if (methodName.startsWith("is"))
+                       {
+                               name = methodName.substring(2, 3).toLowerCase() 
+
+                                               methodName.substring(3);
+                       }
+                       else
+                       {
+                               throw new WicketRuntimeException("Invalid name 
for a getter method: '"
+                                               + methodName + "'. It must 
start either with 'get' or 'is'.");
+                       }
                        return new Property(getter.getDeclaringClass(), name);
                }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/6cceff44/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/DefaultPropertyResolverTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/DefaultPropertyResolverTest.java
 
b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/DefaultPropertyResolverTest.java
index fe4653f..07bbe65 100644
--- 
a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/DefaultPropertyResolverTest.java
+++ 
b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/DefaultPropertyResolverTest.java
@@ -53,6 +53,22 @@ public class DefaultPropertyResolverTest
                assertThat(property.getOwner().getName(), 
is(Bean1.class.getName()));
        }
 
+       /**
+        * https://issues.apache.org/jira/browse/WICKET-5505
+        */
+       @Test
+       public void booleanHasFieldAndGetter()
+       {
+               DefaultPropertyResolver resolver = new 
DefaultPropertyResolver();
+
+               TextField<?> component = new TextField<>("id", new 
PropertyModel<BooleanBean>(new BooleanBean(),
+                               "foo"));
+               Property property = resolver.resolveProperty(component);
+               assertThat(property, not(nullValue()));
+               assertThat(property.getName(), is("foo"));
+               assertThat(property.getOwner().getName(), 
is(BooleanBean.class.getName()));
+       }
+
        @Test
        public void hasOnlyField()
        {
@@ -93,4 +109,15 @@ public class DefaultPropertyResolverTest
                }
        }
 
+       /**
+        * WICKET-5505
+        */
+       public static class BooleanBean
+       {
+               public boolean isFoo()
+               {
+                       return false;
+               }
+       }
+
 }

Reply via email to