package com.java.xiaoqin.litestruts.manager;
import com.java.xiaoqin.litestruts.bean.ActionBean;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Objects;
/**
* Created by xiaoqin on 17-3-5.
*/
public class StrutsParseManager {
private final static String ACTION = "action";
private final static String ACTION_NAME = "name";
private final static String ACTION_CLASS = "class";
private static final String RESULT_NAME = "name";
private final static StrutsParseManager INSTANCE = new StrutsParseManager();
private Map<String, ActionBean> mActionBeanMap = new HashMap<>();
private StrutsParseManager() {
}
public static StrutsParseManager getInstance() {
return INSTANCE;
}
public void init(String path) {
if (!Objects.isNull(path) && !"".equals(path)) {
parseXML(path);
} else {
throw new NullPointerException("path is null");
}
}
private void parseXML(String path) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new File(path));
Element rootElement = document.getRootElement();
Iterator actionIterator = rootElement.elementIterator(ACTION);
while (actionIterator.hasNext()) {
Object actionObj = actionIterator.next();
if (actionObj instanceof Element) {
String name = ((Element) actionObj).attributeValue(ACTION_NAME);
String className = ((Element) actionObj).attributeValue(ACTION_CLASS);
ActionBean actionBean = new ActionBean();
actionBean.setClassName(className);
mActionBeanMap.put(name, actionBean);
Iterator iteratorResult = ((Element) actionObj).elementIterator();
while (iteratorResult.hasNext()) {
Object resultObj = iteratorResult.next();
if (resultObj instanceof Element) {
String resultName = ((Element) resultObj).attributeValue(RESULT_NAME);
String resultText = ((Element) resultObj).getText();
actionBean.addResult(resultName, resultText);
}
}
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
public String findClassNameByActionName(String actionName) {
String className = "";
if (mActionBeanMap.containsKey(actionName)) {
className = mActionBeanMap.get(actionName).getClassName();
}
return className;
}
public String getResult(String actionName, String result) {
String resultResult = "";
if (mActionBeanMap.containsKey(actionName)) {
Map<String, String> actionResult = mActionBeanMap.get(actionName).getResult();
if (null != actionResult && actionResult.containsKey(result)) {
resultResult = actionResult.get(result);
}
}
return resultResult;
}
}