Author: cbegin
Date: Tue May 5 04:32:55 2009
New Revision: 771556
URL: http://svn.apache.org/viewvc?rev=771556&view=rev
Log:
added XPathParser
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/xpath/XNode.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/xpath/XPathParser.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/xpath/XPathParserTest.java
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/xpath/XNode.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/xpath/XNode.java?rev=771556&r1=771555&r2=771556&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/xpath/XNode.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/xpath/XNode.java
Tue May 5 04:32:55 2009
@@ -11,8 +11,10 @@
private String body;
private Properties attributes;
private Properties variables;
+ private XPathParser xpathParser;
- public XNode(Node node, Properties variables) {
+ public XNode(XPathParser xpathParser, Node node, Properties variables) {
+ this.xpathParser = xpathParser;
this.node = node;
this.name = node.getNodeName();
this.variables = variables;
@@ -20,6 +22,26 @@
this.body = parseBody(node);
}
+ public String evalString(String expression) {
+ return xpathParser.evalString(node, expression);
+ }
+
+ public Boolean evalBoolean(String expression) {
+ return xpathParser.evalBoolean(node, expression);
+ }
+
+ public Double evalDouble(String expression) {
+ return xpathParser.evalDouble(node, expression);
+ }
+
+ public List<XNode> evalNodes(String expression) {
+ return xpathParser.evalNodes(node, expression);
+ }
+
+ public XNode evalNode(String expression) {
+ return xpathParser.evalNode(node, expression);
+ }
+
public Node getNode() {
return node;
}
@@ -185,7 +207,7 @@
for (int i = 0, n = nodeList.getLength(); i < n; i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
- children.add(new XNode(node, variables));
+ children.add(new XNode(xpathParser, node, variables));
}
}
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/xpath/XPathParser.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/xpath/XPathParser.java?rev=771556&r1=771555&r2=771556&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/xpath/XPathParser.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/xpath/XPathParser.java
Tue May 5 04:32:55 2009
@@ -33,37 +33,61 @@
this.xpath = factory.newXPath();
}
- public String getString(String expression) {
- String result = (String) evaluate(expression, XPathConstants.STRING);
+ public void setVariables(Properties variables) {
+ this.variables = variables;
+ }
+
+ public String evalString(String expression) {
+ return evalString(document, expression);
+ }
+
+ public String evalString(Object root, String expression) {
+ String result = (String) evaluate(expression, root, XPathConstants.STRING);
result = PropertyParser.parse(result, variables);
return result;
}
- public Boolean getBoolean(String expression) {
- return (Boolean)evaluate(expression, XPathConstants.BOOLEAN);
+ public Boolean evalBoolean(String expression) {
+ return evalBoolean(document, expression);
}
- public Double getDouble(String expression) {
- return (Double)evaluate(expression, XPathConstants.NUMBER);
+ public Boolean evalBoolean(Object root, String expression) {
+ return (Boolean)evaluate(expression, root, XPathConstants.BOOLEAN);
}
- public List<XNode> getNodes(String expression) {
+ public Double evalDouble(String expression) {
+ return evalDouble(document, expression);
+ }
+
+ public Double evalDouble(Object root, String expression) {
+ return (Double)evaluate(expression, root, XPathConstants.NUMBER);
+ }
+
+ public List<XNode> evalNodes(String expression) {
+ return evalNodes(document, expression);
+ }
+
+ public List<XNode> evalNodes(Object root, String expression) {
List<XNode> xnodes = new ArrayList<XNode>();
- NodeList nodes = (NodeList) evaluate(expression, XPathConstants.NODESET);
+ NodeList nodes = (NodeList) evaluate(expression, root,
XPathConstants.NODESET);
for(int i = 0; i < nodes.getLength(); i++) {
- xnodes.add(new XNode(nodes.item(i),variables));
+ xnodes.add(new XNode(this,nodes.item(i),variables));
}
return xnodes;
}
- public XNode getNode(String expression) {
- Node node = (Node) evaluate(expression, XPathConstants.NODE);
- return new XNode(node,variables);
+ public XNode evalNode(String expression) {
+ return evalNode(document, expression);
}
- private Object evaluate(String expression, QName returnType) {
+ public XNode evalNode(Object root, String expression) {
+ Node node = (Node) evaluate(expression, root, XPathConstants.NODE);
+ return new XNode(this,node,variables);
+ }
+
+ private Object evaluate(String expression, Object root, QName returnType) {
try {
- return xpath.evaluate(expression, document, returnType);
+ return xpath.evaluate(expression, root, returnType);
} catch (Exception e) {
throw new RuntimeException("Error evaluating XPath. Cause: " + e, e);
}
@@ -100,5 +124,4 @@
}
}
-
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/xpath/XPathParserTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/xpath/XPathParserTest.java?rev=771556&r1=771555&r2=771556&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/xpath/XPathParserTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/xpath/XPathParserTest.java
Tue May 5 04:32:55 2009
@@ -13,11 +13,11 @@
String resource = "resources/nodelet_test.xml";
Reader reader = Resources.getResourceAsReader(resource);
XPathParser parser = new XPathParser(reader, false, null, null);
- assertEquals(5.8d,parser.getDouble("/employee/height"));
- assertEquals("id_var",parser.getString("/employee/@id"));
- assertEquals(Boolean.TRUE,parser.getBoolean("/employee/active"));
- assertEquals("<id>id_var</id>",
parser.getNode("/employee/@id").toString().trim());
- assertEquals(7, parser.getNodes("/employee/*").size());
+ assertEquals(5.8d,parser.evalDouble("/employee/height"));
+ assertEquals("id_var",parser.evalString("/employee/@id"));
+ assertEquals(Boolean.TRUE,parser.evalBoolean("/employee/active"));
+ assertEquals("<id>id_var</id>",
parser.evalNode("/employee/@id").toString().trim());
+ assertEquals(7, parser.evalNodes("/employee/*").size());
}
}