/**
* Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
*/
package org.ralasafe.servlet;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.ralasafe.user.User;
import org.ralasafe.user.UserManager;
import org.ralasafe.util.Util;
public abstract class AbstractTestAction extends Action {
public Map buildTestContext( HttpServletRequest req,
String[] testContextFields ) throws ParseException {
Map ctx=null;
if( testContextFields.length>0 ) {
ctx=new HashMap();
for( int i=0; i<testContextFields.length; i++ ) {
String field=testContextFields[i];
String rawValue=req.getParameter( "ctx"+field );
String fieldType=req.getParameter( "ctx"+field+"type" );
Object value=Util.parse( rawValue, fieldType );
ctx.put( field, value );
}
}
return ctx;
}
public Object buildTestBusinessData( HttpServletRequest req,
String[] testBusinessDataFields ) throws InstantiationException, IllegalAccessException, ClassNotFoundException, ParseException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Object bdData=null;
Class bdClazz=null;
if( testBusinessDataFields.length>0 ) {
String bdClass=req.getParameter( "bdClass" );
bdClazz=Class.forName( bdClass );
bdData=bdClazz.newInstance();
}
for( int i=0; i<testBusinessDataFields.length; i++ ) {
String field=testBusinessDataFields[i];
String rawValue=req.getParameter( "bd"+field );
String fieldType=req.getParameter( "bd"+field+"type" );
Object value=Util.parse( rawValue, fieldType );
Class fieldClass=null;
if (fieldType.equals("int"))
fieldClass = Integer.TYPE;
else if (fieldType.equals("float"))
fieldClass = Float.TYPE;
else if (fieldType.equals("long"))
fieldClass = Long.TYPE;
else if (fieldType.equals("double"))
fieldClass = Double.TYPE;
else if (fieldType.equals("boolean"))
fieldClass = Boolean.TYPE;
else
fieldClass = Class.forName(fieldType);
// try setXyz method
String methodName="set" + field.substring( 0, 1 ).toUpperCase() + field.substring( 1 );
Method method=bdClazz.getMethod( methodName, new Class[]{fieldClass} );
method.invoke( bdData, new Object[]{ value } );
}
return bdData;
}
public User buildTestUser( HttpServletRequest req, boolean testUserNeeded ) {
User testUser=null;
if( testUserNeeded ) {
// userId
String strUserId=req.getParameter( "userId" );
Object userId=WebUtil.convertUserId( req, strUserId );
testUser=new User();
testUser.setId( userId );
UserManager userMng=WebUtil.getUserManager( req );
testUser=userMng.selectById( testUser );
}
return testUser;
}
}