package com.dc.framework.taglib;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
//自定義標籤處理類
public class ReadUploadFile {
// 配置文件的路徑
static String uploadCfgFile = "WEB-INF/conf/uploadfile.xml";
//文檔對象實體
Document uploadDocument = null;
//結果存儲體
Map uploadMap = new HashMap();
/**
* @param request
* @return
* 獲取配置文件絕對路徑
*/
private String getuploadCfgFile(ServletRequest request) {
return ((HttpServletRequest) request).getSession().getServletContext().getRealPath(uploadCfgFile);
}
/**
* @param request
* @return
* 初始化配置文件
*/
private Document inituploadCfgDocument(ServletRequest request) {
SAXReader saxReader = new SAXReader();
try {
//得到指定文件以流的形式對文件進行序列化
FileInputStream fis = new FileInputStream(getuploadCfgFile(request));
uploadDocument = saxReader.read(fis);
}
catch (DocumentException e) {
e.printStackTrace();
}
catch(FileNotFoundException fnfe){
fnfe.printStackTrace();
}
return uploadDocument;
}
/**
* 獲取配置文件
*
* @param request
* @return
*/
private Document getuploadCfgDocument(ServletRequest request) {
if (this.uploadDocument == null) {
this.uploadDocument = inituploadCfgDocument(request);
}
return this.uploadDocument;
}
/**
* @param request
* @return
* 獲取某個指定preparents的配置屬性
*/
public Map getuploadMap(ServletRequest request) {
//xml中的訪問路徑,說明欲處理XML文件的根元素是fileaction-configuration
String xPath = "//fileaction-configuration/preparents";
//獲取按照指定搜索路徑得到的元素列表,這裏指獲取所有的fileaction-configuration下的preparents元素
List result = getuploadCfgDocument(request).selectNodes(xPath);
//屬性和指定子元素的存儲體
Map uploadMap = new HashMap();
//遍歷所得元素
Iterator iter = result.iterator();
while (iter.hasNext()) {
//獲得具體的preparents元素
Element preparents = (Element) iter.next();
// 取得preparents元素的id屬性的值
String id2 = preparents.attributeValue("id");
// 取得preparents元素下子元素tabname的值,並與id2配對存儲
uploadMap.put(id2,
StringUtils.trim(preparents.elementText("tabname")));
}
return uploadMap;
}
}