package reflex;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.*;
public class Struts {
public static View runAction(String actionName,Map<String,String> parameters){
//读取配置文件
File myXML = new File("src/main/java/reflex/struts.xml");
SAXReader sr = new SAXReader();
try {
Document doc = sr.read(myXML);
Element root = doc.getRootElement();
String className=findByActionName(root,actionName);
java.lang.Object o = findByClassName(className,parameters);
Class c = o.getClass();
String result =(String) c.getMethod("exectue").invoke(o);
String message = (String) c.getMethod("getMessage").invoke(o);
Map<String,String> map =new HashMap<String, String>();
map.put("message",message);
View view = new View();
view.setParameters(map);
String jsp = findJspByResult(root,className,result);
view.setJsp(jsp);
return view;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private static String findByActionName(Element node,String actionName) {
List<Element> list = node.elements();
for(Element element:list){
if(element.attribute("name").getValue().equals(actionName)){
return element.attribute("class").getValue();
}
}
return null;
}
private static java.lang.Object findByClassName(String name, Map<String,String> parameter){
try {
Class c = Class.forName(name);
Object o = c.newInstance();
Set<String> keys = parameter.keySet();
for (String key:keys){
String methodName = "set"+key.substring(0,1).toUpperCase()+key.substring(1);
c.getMethod(methodName,String.class).invoke(o,parameter.get(key));
}
return o;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private static String findJspByResult(Element node,String calssName,String result){
List<Element> list = node.elements();
for(Element element:list){
if(element.attribute("class").getValue().equals(calssName)){
List<Element> list1 = element.elements();
for(Element element1:list1){
if(element1.attribute("name").getValue().equals(result)){
return element1.getStringValue();
}
}
}
}
return null;
}
}