package com.coderising.litestruts;
//import java.awt.List;
import java.io.File;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
//import javax.print.attribute.standard.Media;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Struts {
@SuppressWarnings("unchecked")
public static View runAction(String actionName, Map<String, String> parameters) {
/*
*
* 0. ��ȡ�����ļ�struts.xml
*
* 1. ����actionName�ҵ����Ӧ��class �� ����LoginAction, ͨ������ʵ��������������
* ��parameters�е����ݣ����ö����setter������ ����parameters�е������� ("name"="test" ,
* "password"="1234") , �Ǿ�Ӧ�õ��� setName��setPassword����
*
* 2. ͨ��������ö����exectue ������ ����÷���ֵ������"success"
*
* 3. ͨ�������ҵ����������getter���������� getMessage��, ͨ�����������ã� ��ֵ�������γ�һ��HashMap , ����
* {"message": "��¼�ɹ�"} , �ŵ�View�����parameters
*
* 4. ����struts.xml�е� <result> ����,�Լ�execute�ķ���ֵ�� ȷ����һ��jsp��
* �ŵ�View�����jsp�ֶ��С�
*
*/
View view = new View();
Map<String, String> map = new HashMap<String, String>();
view.setParameters(map);
try {
SAXReader reader = new SAXReader();
String dir = System.getProperty("user.dir");
Document document = reader.read(new File(dir + "/src/com/coderising/litestruts/struts.xml"));
Element struts = document.getRootElement();
java.util.List<Element> list_action = struts.elements("action");
Element item = null;
for (int i = 0; i < list_action.size(); i++) {
item = list_action.get(i);
String nm = item.attributeValue("name");
if (actionName.equals(nm)) {
break;
}
}
String str_class = item.attributeValue("class");
// String real_class=dir+"/"+str_class.replace('.', '/');
// Class<?> cl = Class.forName( dir.replace('\\',
// '.')+".src."+str_class);
Class<?> cl = Class.forName(str_class);
Object instance = cl.newInstance();
String dNmae = parameters.get("name");
String dpassword = parameters.get("password");
Method mName = cl.getMethod("setName", String.class);
Method mPassword = cl.getMethod("setPassword", String.class);
mName.invoke(instance, dNmae);
mPassword.invoke(instance, dpassword);
Method mExectue = cl.getMethod("execute");
Object result = mExectue.invoke(instance);
Method[] methods = cl.getMethods();
for (Method method : methods) {
if (isGetter(method)) {
String mGettername = method.getName().substring(3);
Object mResult = method.invoke(instance);
view.getParameters().put(mGettername.toLowerCase(), mResult);
}
}
java.util.List<Element> resulList = item.elements();
for (Element el : resulList) {
if (result.toString().equals(el.attributeValue("name"))) {
view.setJsp(el.getTextTrim());
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return view;
}
// �ж��Ƿ�getter����
public static boolean isGetter(Method method) {
if (!method.getName().startsWith("get"))
return false;
if (method.getParameterTypes().length != 0)
return false;
if (void.class.equals(method.getReturnType()))
return false;
return true;
}
}