Author: niallp
Date: Sun Jul 1 20:27:17 2007
New Revision: 552391
URL: http://svn.apache.org/viewvc?view=rev&rev=552391
Log:
BEANUTILS-43 - Support Mapped property inside a mapped property
Modified:
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/PropertyUtilsBean.java
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/PropertyUtilsTestCase.java
Modified:
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/PropertyUtilsBean.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/PropertyUtilsBean.java?view=diff&rev=552391&r1=552390&r2=552391
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/PropertyUtilsBean.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/PropertyUtilsBean.java
Sun Jul 1 20:27:17 2007
@@ -780,6 +780,13 @@
throws IllegalArgumentException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException {
+ if (resolver.isMapped(propertyName)) {
+ String name = resolver.getProperty(propertyName);
+ if (name == null || name.length() == 0) {
+ propertyName = resolver.getKey(propertyName);
+ }
+ }
+
if (resolver.isIndexed(propertyName) ||
resolver.isMapped(propertyName)) {
throw new IllegalArgumentException(
@@ -1885,6 +1892,13 @@
protected void setPropertyOfMapBean(Map bean, String propertyName, Object
value)
throws IllegalArgumentException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException {
+
+ if (resolver.isMapped(propertyName)) {
+ String name = resolver.getProperty(propertyName);
+ if (name == null || name.length() == 0) {
+ propertyName = resolver.getKey(propertyName);
+ }
+ }
if (resolver.isIndexed(propertyName) ||
resolver.isMapped(propertyName)) {
Modified:
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/PropertyUtilsTestCase.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/PropertyUtilsTestCase.java?view=diff&rev=552391&r1=552390&r2=552391
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/PropertyUtilsTestCase.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/PropertyUtilsTestCase.java
Sun Jul 1 20:27:17 2007
@@ -1122,6 +1122,25 @@
/**
+ * Test getting a value out of a mapped Map
+ */
+ public void testGetMappedMap() {
+ TestBean bean = new TestBean();
+ Map map = new HashMap();
+ map.put("sub-key-1", "sub-value-1");
+ map.put("sub-key-2", "sub-value-2");
+ map.put("sub-key-3", "sub-value-3");
+ bean.getMapProperty().put("mappedMap", map);
+ try {
+ assertEquals("sub-value-1", PropertyUtils.getProperty(bean,
"mapProperty(mappedMap)(sub-key-1)"));
+ assertEquals("sub-value-2", PropertyUtils.getProperty(bean,
"mapProperty(mappedMap)(sub-key-2)"));
+ assertEquals("sub-value-3", PropertyUtils.getProperty(bean,
"mapProperty(mappedMap)(sub-key-3)"));
+ } catch (Throwable t) {
+ fail("Threw " + t + "");
+ }
+ }
+
+ /**
* Test getting mapped values with periods in the key.
*/
public void testGetMappedPeriods() {
@@ -2804,6 +2823,26 @@
}
+
+ /**
+ * Test setting a value out of a mapped Map
+ */
+ public void testSetMappedMap() {
+ TestBean bean = new TestBean();
+ Map map = new HashMap();
+ map.put("sub-key-1", "sub-value-1");
+ map.put("sub-key-2", "sub-value-2");
+ map.put("sub-key-3", "sub-value-3");
+ bean.getMapProperty().put("mappedMap", map);
+
+ assertEquals("BEFORE", "sub-value-3",
((Map)bean.getMapProperty().get("mappedMap")).get("sub-key-3"));
+ try {
+ PropertyUtils.setProperty(bean,
"mapProperty(mappedMap)(sub-key-3)", "SUB-KEY-3-UPDATED");
+ } catch (Throwable t) {
+ fail("Threw " + t + "");
+ }
+ assertEquals("AFTER", "SUB-KEY-3-UPDATED",
((Map)bean.getMapProperty().get("mappedMap")).get("sub-key-3"));
+ }
/**
* Positive and negative tests on setMappedProperty valid arguments.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]