[jboss-svn-commits] JBoss Common SVN: r4510 - in arquillian/trunk/impl-base/src: test/java/org/jboss/arquillian/impl and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Jun 12 13:23:42 EDT 2010


Author: dan.j.allen
Date: 2010-06-12 13:23:41 -0400 (Sat, 12 Jun 2010)
New Revision: 4510

Modified:
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/XmlConfigurationBuilder.java
   arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/XmlConfigurationBuilderTestCase.java
   arquillian/trunk/impl-base/src/test/resources/arquillian.xml
Log:
ARQ-169


Modified: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/XmlConfigurationBuilder.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/XmlConfigurationBuilder.java	2010-06-12 17:05:47 UTC (rev 4509)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/XmlConfigurationBuilder.java	2010-06-12 17:23:41 UTC (rev 4510)
@@ -17,7 +17,7 @@
 package org.jboss.arquillian.impl;
 
 import java.io.InputStream;
-import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -42,6 +42,7 @@
  *
  * @author <a href="mailto:german.escobarc at gmail.com">German Escobar</a>
  * @author <a href="mailto:aslak at redhat.com">Aslak Knutsen</a>
+ * @author Dan Allen
  * @version $Revision: $
  */
 public class XmlConfigurationBuilder implements ConfigurationBuilder
@@ -213,14 +214,29 @@
             properties.putAll(getPropertiesFromNode(child));
          }
       }
-      
+
+      Map<String, Method> setters = new HashMap<String, Method>();
+      for (Method candidate : configurationObject.getClass().getMethods())
+      {
+         String methodName = candidate.getName();
+         if (methodName.matches("^set[A-Z].*") &&
+               candidate.getReturnType().equals(Void.TYPE) &&
+               candidate.getParameterTypes().length == 1)
+         {
+            candidate.setAccessible(true);
+            setters.put(methodName.substring(3, 4).toLowerCase() + methodName.substring(4), candidate);
+         }
+      }
+
       // set the properties found in the container XML fragment to the Configuration Object
       for (Map.Entry<String, String> property : properties.entrySet()) 
       {
-         Field field = configurationObject.getClass().getDeclaredField(property.getKey());
-         field.setAccessible(true);
-         Object value = convert(field.getType(), property.getValue());
-         field.set(configurationObject, value);
+         if (setters.containsKey(property.getKey()))
+         {
+            Method method = setters.get(property.getKey());
+            Object value = convert(method.getParameterTypes()[0], property.getValue());
+            method.invoke(configurationObject, value);
+         }
       }
    }
    

Modified: arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/XmlConfigurationBuilderTestCase.java
===================================================================
--- arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/XmlConfigurationBuilderTestCase.java	2010-06-12 17:05:47 UTC (rev 4509)
+++ arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/XmlConfigurationBuilderTestCase.java	2010-06-12 17:23:41 UTC (rev 4510)
@@ -80,6 +80,8 @@
       Assert.assertEquals(2L, containerConfig.getPropertyLong());
       Assert.assertEquals(3D, containerConfig.getPropertyDouble(), 0);
       Assert.assertEquals(true, containerConfig.getPropertyBoolean());
+      Assert.assertEquals("inherited", containerConfig.getPropertyInherited());
+      Assert.assertEquals("char", containerConfig.getC());
       
    }
    
@@ -133,13 +135,28 @@
          return (T) new MockContainerConfiguration();
       }
    }
-   
+
+   class AbstractMockContainerConfiguration
+   {
+      private String propertyInherited;
+
+      public String getPropertyInherited()
+      {
+         return propertyInherited;
+      }
+
+      public void setPropertyInherited(String propertyInherited)
+      {
+         this.propertyInherited = propertyInherited;
+      }
+   }
+
    /**
     * Mocks a ContainerConfiguration implementation
     * 
     * @author <a href="mailto:german.escobarc at gmail.com">German Escobar</a>
     */
-   class MockContainerConfiguration implements ContainerConfiguration
+   class MockContainerConfiguration extends AbstractMockContainerConfiguration implements ContainerConfiguration
    {
       private String propertyString;
       
@@ -151,6 +168,7 @@
       
       private boolean propertyBoolean;
 
+      private String c;
       
       public ContainerProfile getContainerProfile()
       {
@@ -206,7 +224,17 @@
       {
          this.propertyBoolean = propertyBoolean;
       }
-      
+
+      public String getC()
+      {
+         return c;
+      }
+
+      public void setC(String c)
+      {
+         this.c = c;
+      }
+
    }
 
 }

Modified: arquillian/trunk/impl-base/src/test/resources/arquillian.xml
===================================================================
--- arquillian/trunk/impl-base/src/test/resources/arquillian.xml	2010-06-12 17:05:47 UTC (rev 4509)
+++ arquillian/trunk/impl-base/src/test/resources/arquillian.xml	2010-06-12 17:23:41 UTC (rev 4510)
@@ -1,5 +1,4 @@
-<?xml version="1.0"?>
-
+<?xml version="1.0" encoding="UTF-8"?>
 <arquillian xmlns="http://jboss.com/arquillian"
 		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 		xmlns:mock="urn:arq:org.jboss.arquillian.impl">
@@ -8,12 +7,13 @@
 		<deploymentExportPath>/tmp</deploymentExportPath>
 	</engine>
 	
-		
 	<mock:container>
 		<mock:property string="hola" long="2" />
 		<mock:propertyInt>1</mock:propertyInt>
 		<mock:propertyDouble>3</mock:propertyDouble>
 		<mock:propertyBoolean>true</mock:propertyBoolean>
+      <mock:propertyInherited>inherited</mock:propertyInherited>
+      <mock:c>char</mock:c>
 	</mock:container>	
 
 </arquillian>
\ No newline at end of file



More information about the jboss-svn-commits mailing list