package litestruts;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class Struts {
public static View runAction(String actionName, Map<String,String> parameters) {
try {
// parse xml file
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse("src/litestruts/struts.xml");
doc.getDocumentElement().normalize();
// get action items
NodeList list = doc.getElementsByTagName("action");
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
Element element = (Element) node;
// look for action-related class
if (element.getAttribute("name").equals(actionName)){
Class<?> c = Class.forName(element.getAttribute("class"));
Object o = c.newInstance();
//set name
Method setName = c.getDeclaredMethod("setName", String.class);
setName.invoke(o, parameters.get("name"));
//set password
Method setPassword = c.getDeclaredMethod("setPassword", String.class);
setPassword.invoke(o, parameters.get("password"));
//execute
Method execute = c.getDeclaredMethod("execute", null);
// login result
String result = execute.invoke(o).toString();
//get login messsage
Method getMessage = c.getDeclaredMethod("getMessage", null);
HashMap<String, String> map = new HashMap<>();
map.put("message", getMessage.invoke(o).toString());
// new view with parameter map
View view = new View();
view.setParameters(map);
NodeList list1 = element.getElementsByTagName("result");
for (int j = 0; j < list1.getLength(); j++) {
Node node1 = list1.item(j);
Element element1 = (Element) node1;
if (element1.getAttribute("name").equals(result)) {
view.setJsp(node1.getTextContent());
}
}
return view;
}
}
} catch (Exception e) {
System.out.println("parse error");
}
return null;
}
}