package com.taobao.tddl.optimizer.costbased.esitimater.stat.parse;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.google.common.collect.Lists;
import com.taobao.tddl.common.utils.XmlHelper;
import com.taobao.tddl.optimizer.costbased.esitimater.stat.TableStat;
/**
* 解析matrix配置
*
* @author jianghang 2013-11-28 下午6:08:57
* @since 5.0.0
*/
public class TableStatParser {
private static final String XSD_SCHEMA = "META-INF/stat.xsd";
public static List<TableStat> parse(String data) {
InputStream is = new ByteArrayInputStream(data.getBytes());
return parse(is);
}
public static List<TableStat> parse(InputStream in) {
Document doc = XmlHelper.createDocument(in,
Thread.currentThread().getContextClassLoader().getResourceAsStream(XSD_SCHEMA));
Element root = doc.getDocumentElement();
List<TableStat> stats = Lists.newArrayList();
NodeList list = root.getElementsByTagName("tableStat");
for (int i = 0; i < list.getLength(); i++) {
Node item = list.item(i);
stats.add(parseTableStat(item));
}
return stats;
}
private static TableStat parseTableStat(Node node) {
NodeList list = node.getChildNodes();
TableStat stat = new TableStat();
for (int i = 0; i < list.getLength(); i++) {
Node item = list.item(i);
if ("tableName".equals(item.getNodeName())) {
stat.setTableName(StringUtils.upperCase(item.getFirstChild().getNodeValue()));
} else if ("tableRows".equals(item.getNodeName())) {
stat.setTableRows(Long.valueOf(item.getFirstChild().getNodeValue()));
}
}
return stat;
}
}