You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by tr...@apache.org on 2005/06/07 16:06:08 UTC
svn commit: r188775 - in /maven/continuum/trunk/continuum-xmlrpc/src:
main/java/org/apache/maven/continuum/xmlrpc/DefaultXmlRpcHelper.java
main/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelper.java
test/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelperTest.java
Author: trygvis
Date: Tue Jun 7 07:06:07 2005
New Revision: 188775
URL: http://svn.apache.org/viewcvs?rev=188775&view=rev
Log:
o Adding support for populating a bean from a Hashtable.
Modified:
maven/continuum/trunk/continuum-xmlrpc/src/main/java/org/apache/maven/continuum/xmlrpc/DefaultXmlRpcHelper.java
maven/continuum/trunk/continuum-xmlrpc/src/main/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelper.java
maven/continuum/trunk/continuum-xmlrpc/src/test/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelperTest.java
Modified: maven/continuum/trunk/continuum-xmlrpc/src/main/java/org/apache/maven/continuum/xmlrpc/DefaultXmlRpcHelper.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-xmlrpc/src/main/java/org/apache/maven/continuum/xmlrpc/DefaultXmlRpcHelper.java?rev=188775&r1=188774&r2=188775&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-xmlrpc/src/main/java/org/apache/maven/continuum/xmlrpc/DefaultXmlRpcHelper.java (original)
+++ maven/continuum/trunk/continuum-xmlrpc/src/main/java/org/apache/maven/continuum/xmlrpc/DefaultXmlRpcHelper.java Tue Jun 7 07:06:07 2005
@@ -16,14 +16,17 @@
* limitations under the License.
*/
+import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
+import java.util.Map;
import java.util.Set;
import java.util.Vector;
@@ -32,7 +35,7 @@
/**
* @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
- * @version $Id: DefaultXmlRpcHelper.java,v 1.1.1.1 2005/03/29 20:42:10 trygvis Exp $
+ * @version $Id$
*/
public class DefaultXmlRpcHelper
extends AbstractLogEnabled
@@ -182,5 +185,109 @@
}
return vector;
+ }
+
+ public void hashtableToObject( Hashtable hashtable, Object target )
+ throws IntrospectionException, IllegalAccessException, InvocationTargetException
+ {
+ for ( Iterator it = hashtable.entrySet().iterator(); it.hasNext(); )
+ {
+ Map.Entry entry = (Map.Entry) it.next();
+
+ String key = (String) entry.getKey();
+
+ Object value = entry.getValue();
+
+ if ( key == null || value == null )
+ {
+ continue;
+ }
+
+ // ----------------------------------------------------------------------
+ // Convert the key to a setter
+ // ----------------------------------------------------------------------
+
+ String setterName = "set" +
+ Character.toUpperCase( key.charAt( 0 ) ) +
+ key.substring( 1 );
+
+ Class clazz = target.getClass();
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ Method setter = getSetter( clazz, setterName, key );
+
+ if ( setter == null )
+ {
+ continue;
+ }
+
+ // TODO: Implement to give better feedback
+// Class parameter = setter.getParameterTypes()[ 0 ];
+//
+// if ( value.getClass().isAssignableFrom( parameter ) )
+// {
+// }
+
+ setter.invoke( target, new Object[] { value } );
+ }
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ private Method getSetter( Class clazz, String setterName, String key )
+ {
+ Map setterMap = getSetterMap( clazz );
+
+ Method setter = (Method) setterMap.get( setterName );
+
+ if ( setter == null )
+ {
+ getLogger().warn( "No setter for field '" + key + "' on the class '" + clazz.getName() + "'." );
+
+ return null;
+ }
+
+ if ( setter.getParameterTypes().length != 1 )
+ {
+ getLogger().warn( "No setter for field '" + key + "' on the class '" + clazz.getName() + "'. " +
+ "The class has multiple setters for the field." );
+ }
+
+ return setter;
+ }
+
+ private Map getSetterMap( Class clazz )
+ {
+ // TODO: Cache the generated maps
+
+ Method[] methods = clazz.getMethods();
+
+ Map map = new HashMap();
+
+ for ( int i = 0; i < methods.length; i++ )
+ {
+ Method method = methods[ i ];
+
+ String name = method.getName();
+
+ if ( name.length() <= 3 )
+ {
+ continue;
+ }
+
+ if ( !name.startsWith( "set" ) )
+ {
+ continue;
+ }
+
+ map.put( name, method );
+ }
+
+ return map;
}
}
Modified: maven/continuum/trunk/continuum-xmlrpc/src/main/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelper.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-xmlrpc/src/main/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelper.java?rev=188775&r1=188774&r2=188775&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-xmlrpc/src/main/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelper.java (original)
+++ maven/continuum/trunk/continuum-xmlrpc/src/main/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelper.java Tue Jun 7 07:06:07 2005
@@ -21,10 +21,11 @@
import java.util.Hashtable;
import java.util.Set;
import java.util.Vector;
+import java.beans.IntrospectionException;
/**
* @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
- * @version $Id: XmlRpcHelper.java,v 1.1.1.1 2005/03/29 20:42:10 trygvis Exp $
+ * @version $Id$
*/
public interface XmlRpcHelper
{
@@ -38,4 +39,7 @@
Vector collectionToVector( Collection value, boolean convertElements )
throws IllegalAccessException, InvocationTargetException;
+
+ void hashtableToObject( Hashtable hashtable, Object object )
+ throws IntrospectionException, IllegalAccessException, InvocationTargetException;
}
Modified: maven/continuum/trunk/continuum-xmlrpc/src/test/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelperTest.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-xmlrpc/src/test/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelperTest.java?rev=188775&r1=188774&r2=188775&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-xmlrpc/src/test/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelperTest.java (original)
+++ maven/continuum/trunk/continuum-xmlrpc/src/test/java/org/apache/maven/continuum/xmlrpc/XmlRpcHelperTest.java Tue Jun 7 07:06:07 2005
@@ -22,7 +22,7 @@
/**
* @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
- * @version $Id: XmlRpcHelperTest.java,v 1.1.1.1 2005/03/29 20:42:10 trygvis Exp $
+ * @version $Id$
*/
public class XmlRpcHelperTest
extends PlexusTestCase
@@ -44,16 +44,31 @@
return foo;
}
+ public void setFoo( String foo )
+ {
+ this.foo = foo;
+ }
+
public int getBar()
{
return bar;
}
+ public void setBar( int bar )
+ {
+ this.bar = bar;
+ }
+
public boolean isBool()
{
return bool;
}
+ public void setBool( boolean bool )
+ {
+ this.bool = bool;
+ }
+
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
@@ -194,6 +209,26 @@
assertProperty( "bar", "22", h2 );
assertProperty( "bool", "false", h2 );
+ }
+
+ public void testHashtableToObject()
+ throws Exception
+ {
+ XmlRpcHelper xmlRpcHelper = (XmlRpcHelper) lookup( XmlRpcHelper.ROLE );
+
+ SimleBean bean = new SimleBean();
+
+ Hashtable hashtable = new Hashtable();
+
+ hashtable.put( "foo", "foo" );
+
+ hashtable.put( "bar", new Integer( 17 ) );
+
+ hashtable.put( "bool", Boolean.TRUE );
+
+ xmlRpcHelper.hashtableToObject( hashtable, bean );
+
+ assertEquals( "foo", bean.getFoo() );
}
// ----------------------------------------------------------------------