// Path: commons/src/main/java/com/dataagg/util/lang/ArgCheck.java
// public class ArgCheck {
// 	public static void checkState(boolean b, String msg) {
// 		if (!b) {
// 			throw new IllegalArgumentException(msg);
// 		}
// 	}
// 
// 	public static void checkState(boolean b) {
// 		if (!b) {
// 			throw new IllegalArgumentException();
// 		}
// 	}
// 
// 	public static void checkNotNull(Object object) {
// 		if (object == null) {
// 			throw new IllegalArgumentException();
// 		}
// 	}
// 
// 	public static void checkNotNull(Object object, String msg) {
// 		if (object == null) {
// 			throw new IllegalArgumentException(msg);
// 		}
// 	}
// 
// 	public static void checkNotContains(String possibleValues, String value) {
// 		checkNotContains(StringUtil.split(possibleValues, ","), value);
// 	}
// 
// 	public static void checkNotContains(String possibleValues, String value, String msg) {
// 		checkNotContains(StringUtil.split(possibleValues, ","), value, msg);
// 	}
// 
// 	public static void checkNotContains(String[] possibleValues, String value, String msg) {
// 		if (!ArraysUtil.contains(possibleValues, value)) {
// 			throw new IllegalArgumentException(msg);
// 		}
// 	}
// 
// 	public static void checkNotContains(String[] possibleValues, String value) {
// 		checkNotContains(possibleValues, value, "possible values are [" + possibleValues + "], but value=" + value);
// 	}
// }


import com.dataagg.util.lang.ArgCheck;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.namespace.QName;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
			} catch (XPathExpressionException e) {
				LOG.error(e.getMessage(), e);
				return null;
			}
		}
		return expr;
	}

	public String[] getNodesAttr(Node node, String exp, String attrName) {
		List<String> qs = new ArrayList<String>();
		try {
			NodeList nodes = findNodes(node, exp);
			if (nodes != null && nodes.getLength() > 0) {
				for (int i = 0; i < nodes.getLength(); i++) {
					qs.add(XmlUtil.getAttribute(nodes.item(i), attrName));
				}
			}
		} catch (Exception e) {
		}
		return qs.toArray(new String[]{});
	}

	public String getNodeAttr(Node node, String exp, String attrName) {
		Node n = findOneNode(node, exp);
		ArgCheck.checkNotNull(n);
		return XmlUtil.getAttribute(n, attrName);
	}

	public String getNodeText(Node node, String exp) {
		Node n = findOneNode(node, exp);
// Path: commons/src/main/java/com/dataagg/util/lang/ArgCheck.java
// public class ArgCheck {
// 	public static void checkState(boolean b, String msg) {
// 		if (!b) {
// 			throw new IllegalArgumentException(msg);
// 		}
// 	}
// 
// 	public static void checkState(boolean b) {
// 		if (!b) {
// 			throw new IllegalArgumentException();
// 		}
// 	}
// 
// 	public static void checkNotNull(Object object) {
// 		if (object == null) {
// 			throw new IllegalArgumentException();
// 		}
// 	}
// 
// 	public static void checkNotNull(Object object, String msg) {
// 		if (object == null) {
// 			throw new IllegalArgumentException(msg);
// 		}
// 	}
// 
// 	public static void checkNotContains(String possibleValues, String value) {
// 		checkNotContains(StringUtil.split(possibleValues, ","), value);
// 	}
// 
// 	public static void checkNotContains(String possibleValues, String value, String msg) {
// 		checkNotContains(StringUtil.split(possibleValues, ","), value, msg);
// 	}
// 
// 	public static void checkNotContains(String[] possibleValues, String value, String msg) {
// 		if (!ArraysUtil.contains(possibleValues, value)) {
// 			throw new IllegalArgumentException(msg);
// 		}
// 	}
// 
// 	public static void checkNotContains(String[] possibleValues, String value) {
// 		checkNotContains(possibleValues, value, "possible values are [" + possibleValues + "], but value=" + value);
// 	}
// }


// Path: commons/src/main/java/com/dataagg/util/xml/XPathEvaluator.java
import com.dataagg.util.lang.ArgCheck;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.namespace.QName;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

			} catch (XPathExpressionException e) {
				LOG.error(e.getMessage(), e);
				return null;
			}
		}
		return expr;
	}

	public String[] getNodesAttr(Node node, String exp, String attrName) {
		List<String> qs = new ArrayList<String>();
		try {
			NodeList nodes = findNodes(node, exp);
			if (nodes != null && nodes.getLength() > 0) {
				for (int i = 0; i < nodes.getLength(); i++) {
					qs.add(XmlUtil.getAttribute(nodes.item(i), attrName));
				}
			}
		} catch (Exception e) {
		}
		return qs.toArray(new String[]{});
	}

	public String getNodeAttr(Node node, String exp, String attrName) {
		Node n = findOneNode(node, exp);
		ArgCheck.checkNotNull(n);
		return XmlUtil.getAttribute(n, attrName);
	}

	public String getNodeText(Node node, String exp) {
		Node n = findOneNode(node, exp);
		ArgCheck.checkNotNull(n);