package cn.inkfish.app.cmd.doclist;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Map.Entry;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import cn.inkfish.tools.xml.XPathTool;
public class DocListGener {
private File rootdir = new File("E:\\2011.4.5\\API\\lib_doc");
private static String[] docDirs = new String[] { "\\javadoc", "\\javadocs", "\\apidocs",
"\\api", "\\docs", "\\doc", "\\docs\\api", "\\doc\\api", "\\docs\\apidocs",
"\\docs\\javadocs", "\\docs\\javadoc", "\\doc\\javadocs", "\\doc\\javadoc",
"\\site\\javadocs", "\\site\\apidocs", "\\docs\\javadoc-api" };
private static String[] indexFiles = new String[] { "index.html", "index.htm" };
private int colNum = 3;
private int maxRow = 30;
private StringBuffer sb = new StringBuffer();
public static void main(String[] args) throws IOException {
DocListGener gener = new DocListGener();
File dest = new File(gener.rootdir, "index.html");
if (dest.exists()) {
dest.delete();
}
gener.generateHead();
gener.generateLibUrl();
gener.generateCommonUrl();
gener.generateEnd();
String content = gener.sb.toString();
content = content.replaceAll("COL_WIDTH", (100 / gener.colNum) + "%");
FileUtils.writeStringToFile(dest, content, "UTF-8");
}
private void generateLibUrl() {
sb.append("\t\t\t<td width=\"COL_WIDTH\" valign=\"top\">\n");
sb.append("\t\t\t\t<ul>\n");
File[] dirs = rootdir.listFiles();
Arrays.sort(dirs);
int counter = 0;
for (File dir : dirs) {
// 过滤掉非文件夹
if (!dir.isDirectory()) {
continue;
}
label:
for (int i = 0; i < docDirs.length; i++) {
for (String indexFile : indexFiles) {
File file = new File(new File(dir, docDirs[i]), indexFile);
if (file.exists()) {
counter++;
if (counter > maxRow) {
sb.append("\t\t\t\t</ul>\n");
sb.append("\t\t\t</td>\n");
sb.append("\t\t\t<td width=\"COL_WIDTH\" valign=\"top\">\n");
sb.append("\t\t\t\t<ul>\n");
counter = 0;
colNum++;
}
sb.append("\t\t\t\t\t<li>");
sb.append("<a target=\"_blank\" href=\"").append(file.toURI().toString())
.append("\">");
sb.append(FilenameUtils.getName(dir.toString()));
sb.append("</a>");
sb.append("</li>\n");
break label;
}
}
}
}
sb.append("\t\t\t\t</ul>\n");
sb.append("\t\t\t</td>\n");
}
private void generateHead() {
sb.append("<html>\n");
sb.append("<head profile=\"http://www.w3.org/2005/10/profile\">\n");
sb.append("\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n");
// sb.append("\t<meta name=\"author\" content=\"wuqiming\">\n");
// sb.append("\t<title>Java Docs</title>\n");
sb.append("\t<style>ul{margin-top:5px;}</style>\n");
sb.append("\t<!--<link rel=\"icon\" href=\"http://hi.youkuaiyun.com/attachment/201011/8/7093_128919873175yk.png\" type=\"image/png\">-->\n");
sb.append("\t<link rel=\"icon\" href=\"./favicon.png\" type=\"image/png\">\n");
sb.append("</head>\n");
sb.append("<body>\n");
//sb.append("\t<center><h2>Java Docs Collection(Wu Qiming)</h2></center>\n");
sb.append("\t<table style=\"font-size:14px;\" width=\"90%\" align=\"center\" cellspadding=\"0\" cellspacing=\"0\" border=\"1\">\n");
sb.append("\t\t<tr>\n");
}
private void generateCommonUrl() {
Map<String, Map<String, Properties>> map = getSites();
int counter = 0;
for (String category : map.keySet()) {
if (counter + 2 + map.get(category).size() >= maxRow) {
counter = 0;
sb.append("\t\t\t</td>\n");
}
if (counter == 0) {
sb.append("\t\t\t<td width=\"COL_WIDTH\" valign=\"top\">\n");
}
sb.append("\t\t\t\t").append(category).append("<br />\n");
counter += 2;
sb.append("\t\t\t\t<ul>\n");
Map<String, Properties> subMap = map.get(category);
for (Entry<String, Properties> entry : subMap.entrySet()) {
Properties prop = entry.getValue();
if (prop.containsKey("name") && prop.containsKey("url")) {
String[] names = StringUtils.split(prop.getProperty("name"), ' ');
String[] urls = StringUtils.split(prop.getProperty("url"), ' ');
String target = prop.getProperty("target", "_blank");
sb.append("\t\t\t\t\t<li>\n");
if (names.length == urls.length) {
for (int i = 0; i < names.length; i++) {
sb.append("\t\t\t\t\t\t<a target=\"").append(target).append("\" ");
sb.append("href=\"").append(urls[i]).append("\">");
sb.append(names[i]).append("</a> ");
}
} else {
sb.append("\t\t\t\t\t\t<a target=\"").append(target).append("\" ");
sb.append("href=\"").append(prop.getProperty("url")).append("\">");
sb.append(prop.getProperty("name")).append("</a>");
}
sb.append("\t\t\t\t\t</li>\n");
counter++;
System.out.println(counter + "\t" + prop.getProperty("name"));
}
}
sb.append("\t\t\t\t</ul>\n");
}
sb.append("\t\t\t</td>\n");
sb.append("\t\t</tr>\n");
}
private void generateEnd() {
sb.append("\t\t<tr>\n");
sb.append("\t\t\t<td colspan=\"" + colNum + "\">\n");
sb.append("Infos here<br>");
sb.append("\t\t\t</td>\n");
sb.append("\t\t</tr>\n");
sb.append("\t</table>\n");
sb.append("</body>\n");
sb.append("</html>");
}
private Map<String, Map<String, Properties>> getSites() {
Map<String, Map<String, Properties>> map = new LinkedHashMap<String, Map<String, Properties>>();
try {
InputStream is = this.getClass().getResourceAsStream("sites.xml");
XPathTool xpath = new XPathTool(is);
IOUtils.closeQuietly(is);
NodeList categories = xpath.getNodeSetValue("/sites/catagory/@name");
for (int i = 0; i < categories.getLength(); i++) {
Map<String, Properties> subMap = new LinkedHashMap<String, Properties>();
String cateName = categories.item(i).getNodeValue();
NodeList subSites = xpath.getNodeSetValue("/sites/catagory[@name='" + cateName
+ "']/site");
for (int j = 0; j < subSites.getLength(); j++) {
Properties prop = new Properties();
NamedNodeMap attributes = subSites.item(j).getAttributes();
for (int k = 0; k < attributes.getLength(); k++) {
prop.put(attributes.item(k).getNodeName(), attributes.item(k)
.getNodeValue());
}
subMap.put(prop.getProperty("name"), prop);
}
map.put(cateName, subMap);
}
} catch (SAXException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ParserConfigurationException ex) {
ex.printStackTrace();
} catch (XPathExpressionException ex) {
ex.printStackTrace();
}
return map;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<sites>
<catagory name="API">
<site name="JDK_API" url="E:\API\JDK_API_1_6_中文版.CHM" />
<site url="D:\" name="D" />
<site url="E:\" name="E" />
<site url="E:\API\JDK_API_1_6_中文版.CHM" name="JDK_API" />
<site url="E:\API\[Java参考文档].J2EE1.5.chm" name="J2EE.chm" />
<site url="E:\API\Hibernate3.2官方中文参考手册.pdf" name="Hibernate" />
<site url="E:\Workspaces" name="Workspaces" />
<site url="E:\API" name="API" />
<site url="E:\API\jQueryAPI-100214.chm" name="jQueryAPI" />
<site url="E:\API\程序员常用js.chm" name="js" />
<site url="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps" name="Tomcat_webapps" />
<site url="E:\我的XP环境配置" name="我的XP环境配置" />
<site url="http://zhangyulong.iteye.com" name="ITeye" />
<site url="http://localhost:8080" name="tomcat" />
<site url="http://zyl1221.download.youkuaiyun.com" name="csdn" />
<site url="http://w3school.com.cn" name="w3c" />
<site url="http://user.qzone.qq.com/574893508" name="qzone" />
<site url="http://www.renren.com/home" name="renren" />
<site url="http://detail.zol.com.cn/" name="zol" />
<site url="http://appimg2.qq.com/card/index_v3.html?qzone=1" name="card" />
</catagory>
</sites >
apache-mime4j-0.6.jar
commons-logging-1.1.1.jar
httpclient-4.0.jar
httpcore-4.0.1.jar
httpmime-4.0.jar
commons-codec-1.4.jar
jaxp.jar
oscore-2.2.1.jar
propertyset-1.3.jar
trove-2.1.0.jar
xalan.jar
xercesImpl.jar
jtidy-r918.jar
commons-io-2.0.jar
lombok.jar
commons-lang-2.5.jar
rome-1.0.jar
jdom.jar
poi-3.8-beta1-20110307.jar
poi-excelant-3.8-beta1-20110307.jar
poi-ooxml-3.8-beta1-20110307.jar
poi-ooxml-schemas-3.8-beta1-20110307.jar
poi-scratchpad-3.8-beta1-20110307.jar