You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/02/18 11:01:57 UTC

[13/17] git commit: WICKET-5505 DefaultPropertyResolver does not respect JavaBean conventions

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 <mg...@apache.org>
Authored: Tue Feb 18 10:42:42 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
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;
+		}
+	}
+
 }