You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by dm...@apache.org on 2004/06/30 00:58:18 UTC
cvs commit: jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom JDOMNodePointer.java
dmitri 2004/06/29 15:58:18
Modified: jxpath/src/java/org/apache/commons/jxpath/ri/model/dom
DOMNodePointer.java
jxpath/src/test/org/apache/commons/jxpath/ri/model/jdom
TestJDOMFactory.java
jxpath/src/test/org/apache/commons/jxpath/ri/model/dom
TestDOMFactory.java
jxpath/src/test/org/apache/commons/jxpath/ri/model
XMLModelTestCase.java
jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom
JDOMNodePointer.java
Log:
Fixed a bug having to do with creation of nodes with prefixes
Revision Changes Path
1.24 +12 -3 jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java
Index: DOMNodePointer.java
===================================================================
RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- DOMNodePointer.java 1 Apr 2004 02:55:32 -0000 1.23
+++ DOMNodePointer.java 29 Jun 2004 22:58:17 -0000 1.24
@@ -387,8 +387,17 @@
name.toString(),
index);
if (success) {
- NodeIterator it =
- childIterator(new NodeNameTest(name), false, null);
+ NodeTest nodeTest;
+ String prefix = name.getPrefix();
+ if (prefix != null) {
+ String namespaceURI = context.getNamespaceURI(prefix);
+ nodeTest = new NodeNameTest(name, namespaceURI);
+ }
+ else {
+ nodeTest = new NodeNameTest(name);
+ }
+
+ NodeIterator it = childIterator(nodeTest, false, null);
if (it != null && it.setPosition(index + 1)) {
return it.getNodePointer();
}
1.6 +18 -4 jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/jdom/TestJDOMFactory.java
Index: TestJDOMFactory.java
===================================================================
RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/jdom/TestJDOMFactory.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TestJDOMFactory.java 29 Feb 2004 14:17:43 -0000 1.5
+++ TestJDOMFactory.java 29 Jun 2004 22:58:17 -0000 1.6
@@ -44,13 +44,19 @@
if (name.equals("location")
|| name.equals("address")
|| name.equals("street")) {
- addJDOMElement((Element) parent, index, name);
+ addJDOMElement((Element) parent, index, name, null);
return true;
}
+ if (name.startsWith("price:")) {
+ String namespaceURI = context.getNamespaceURI("price");
+ addJDOMElement((Element) parent, index, name, namespaceURI);
+ return true;
+ }
+
return false;
}
- private void addJDOMElement(Element parent, int index, String tag) {
+ private void addJDOMElement(Element parent, int index, String tag, String namespaceURI) {
List children = parent.getContent();
int count = 0;
for (int i = 0; i < children.size(); i++) {
@@ -65,7 +71,15 @@
while (count <= index) {
// In a real factory we would need to do the right thing with
// the namespace prefix.
- Element newElement = new Element(tag);
+ Element newElement;
+ if (namespaceURI != null) {
+ String prefix = tag.substring(0, tag.indexOf(':'));
+ tag = tag.substring(tag.indexOf(':') + 1);
+ newElement = new Element(tag, prefix, namespaceURI);
+ }
+ else {
+ newElement = new Element(tag);
+ }
parent.addContent(newElement);
count++;
}
1.6 +18 -4 jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/dom/TestDOMFactory.java
Index: TestDOMFactory.java
===================================================================
RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/dom/TestDOMFactory.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TestDOMFactory.java 29 Feb 2004 14:17:46 -0000 1.5
+++ TestDOMFactory.java 29 Jun 2004 22:58:17 -0000 1.6
@@ -18,6 +18,7 @@
import org.apache.commons.jxpath.AbstractFactory;
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.Pointer;
+import org.w3c.dom.Document;
import org.w3c.dom.Node;
/**
@@ -41,13 +42,18 @@
if (name.equals("location")
|| name.equals("address")
|| name.equals("street")) {
- addDOMElement((Node) parent, index, name);
+ addDOMElement((Node) parent, index, name, null);
+ return true;
+ }
+ if (name.startsWith("price:")) {
+ String namespaceURI = context.getNamespaceURI("price");
+ addDOMElement((Node) parent, index, name, namespaceURI);
return true;
}
return false;
}
- private void addDOMElement(Node parent, int index, String tag) {
+ private void addDOMElement(Node parent, int index, String tag, String namespaceURI) {
Node child = parent.getFirstChild();
int count = 0;
while (child != null) {
@@ -59,7 +65,15 @@
// Keep inserting new elements until we have index + 1 of them
while (count <= index) {
- Node newElement = parent.getOwnerDocument().createElement(tag);
+ Document doc = parent.getOwnerDocument();
+ Node newElement;
+ if (namespaceURI == null) {
+ newElement = doc.createElement(tag);
+ }
+ else {
+ newElement = doc.createElementNS(namespaceURI, tag);
+ }
+
parent.appendChild(newElement);
count++;
}
1.22 +20 -41 jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/XMLModelTestCase.java
Index: XMLModelTestCase.java
===================================================================
RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/XMLModelTestCase.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- XMLModelTestCase.java 1 Apr 2004 02:55:32 -0000 1.21
+++ XMLModelTestCase.java 29 Jun 2004 22:58:18 -0000 1.22
@@ -190,7 +190,16 @@
context,
"/vendor[1]/location[4]/@manager",
"",
- "/vendor[1]/location[4]/@manager");
+ "/vendor[1]/location[4]/@manager");
+
+ context.registerNamespace("price", "priceNS");
+
+ // Create a DOM element
+ assertXPathCreatePath(
+ context,
+ "/vendor[1]/price:foo/price:bar",
+ "",
+ "/vendor[1]/price:foo[1]/price:bar[1]");
}
/**
@@ -235,6 +244,15 @@
"vendor/product/product:name/attribute::price:language",
"English",
"/vendor[1]/product[1]/product:name[1]/@price:language");
+
+ context.registerNamespace("price", "priceNS");
+
+ // Create a DOM element
+ assertXPathCreatePathAndSetValue(
+ context,
+ "/vendor[1]/price:foo/price:bar",
+ "123.20",
+ "/vendor[1]/price:foo[1]/price:bar[1]");
}
/**
@@ -773,44 +791,5 @@
"//product:name",
"Box of oranges",
"/vendor[1]/product[1]/goods:name[1]");
-
-// if (isExternalNamespaceSupported()) {
-// DocumentContainer container = new DocumentContainer(
-// XMLModelTestCase.class.getResource("ExternalNamespaceTest.xml"),
-// getModel());
-// JXPathContext context = JXPathContext.newContext(container);
-// NamespaceManager nsm = context.getNamespaceManager();
-// nsm.registerNamespace("quality", "qualityNS");
-// nsm.registerNamespace("money", "priceNS");
-//
-// assertXPathValueAndPointer(
-// context,
-// "//quality:color",
-// "orange",
-// "/vendor[1]/product[1]/quality:color[1]");
-//
-// // It is supposed to figure out that the prefixes "money" and
-// // "value" map to the same namespaceURI
-// assertXPathValueAndPointer(
-// context,
-// "//value:price",
-// "1000.00",
-// "/vendor[1]/product[1]/money:price[1]");
-//
-// assertXPathValue(
-// context,
-// "local-name(vendor/product/value:price)",
-// "price");
-//
-// assertXPathValue(
-// context,
-// "name(vendor/product/quality:color)",
-// "qualityNS:color");
-//
-// assertXPathValue(
-// context,
-// "namespace-uri(vendor/product/value:price)",
-// "priceNS");
-// }
}
}
1.17 +12 -2 jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java
Index: JDOMNodePointer.java
===================================================================
RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- JDOMNodePointer.java 1 Apr 2004 02:55:31 -0000 1.16
+++ JDOMNodePointer.java 29 Jun 2004 22:58:18 -0000 1.17
@@ -497,8 +497,18 @@
name.toString(),
index);
if (success) {
+ NodeTest nodeTest;
+ String prefix = name.getPrefix();
+ if (prefix != null) {
+ String namespaceURI = context.getNamespaceURI(prefix);
+ nodeTest = new NodeNameTest(name, namespaceURI);
+ }
+ else {
+ nodeTest = new NodeNameTest(name);
+ }
+
NodeIterator it =
- childIterator(new NodeNameTest(name), false, null);
+ childIterator(nodeTest, false, null);
if (it != null && it.setPosition(index + 1)) {
return it.getNodePointer();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org