diff --git a/src/main/org/apache/tools/ant/util/DOMUtils.java b/src/main/org/apache/tools/ant/util/DOMUtils.java new file mode 100644 index 000000000..e2a7d67b4 --- /dev/null +++ b/src/main/org/apache/tools/ant/util/DOMUtils.java @@ -0,0 +1,165 @@ +/* + * Copyright 2005 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.util; + +import org.w3c.dom.CDATASection; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Text; + +/** + * Some utility methods for common tasks when building DOM trees in memory. + * + *

In this documentation <a> means an {@link + * org.w3c.do.Element Element} instance with name a.

+ * + * @since Ant 1.6.3 + */ +public class DOMUtils { + + /** + * Get a new Document instance, + * + * @since Ant 1.6.3 + */ + public static Document newDocument() { + return JAXPUtils.getDocumentBuilder().newDocument(); + } + + /** + * Creates a named Element and appends it to the given element, + * returns it. + * + *

This means + *

createChildElement(<a>, "b")
+ * creates + *
+     * <a>
+     *   <b/>
+     * </a>
+     * 
+ * and returns <b>.

+ * + * @param parent element that will receive the new element as child. + * @param name name of the new element. + * @return the new element. + * + * @since Ant 1.6.3 + */ + public static Element createChildElement(Element parent, String name) { + Document doc = parent.getOwnerDocument(); + Element e = doc.createElement(name); + parent.appendChild(e); + return e; + } + + /** + * Adds nested text. + * + *

This means + *

appendText(<a>, "b")
+ * creates + *
+     * <a>b</a>
+     * 
+ *

+ * + * @param parent element that will receive the new element as child. + * @param content text content. + * + * @since Ant 1.6.3 + */ + public static void appendText(Element parent, String content) { + Document doc = parent.getOwnerDocument(); + Text t = doc.createTextNode(content); + parent.appendChild(t); + } + + /** + * Adds a nested CDATA section. + * + *

This means + *

appendCDATA(<a>, "b")
+ * creates + *
+     * <a><[!CDATA[b]]></a>
+     * 
+ *

+ * + * @param parent element that will receive the new element as child. + * @param content text content. + * + * @since Ant 1.6.3 + */ + public static void appendCDATA(Element parent, String content) { + Document doc = parent.getOwnerDocument(); + CDATASection c = doc.createCDATASection(content); + parent.appendChild(c); + } + + /** + * Adds nested text in a new child element. + * + *

This means + *

appendTextElement(<a>, "b", "c")
+ * creates + *
+     * <a>
+     *   <b>c</b>
+     * </a>
+     * 
+ *

+ * + * @param parent element that will receive the new element as child. + * @param name of the child element. + * @param content text content. + * + * @since Ant 1.6.3 + */ + public static void appendTextElement(Element parent, String name, + String content) { + Element e = createChildElement(parent, name); + appendText(e, content); + } + + /** + * Adds a nested CDATA section in a new child element. + * + *

This means + *

appendCDATAElement(<a>, "b", "c")
+ * creates + *
+     * <a>
+     *   <b><![CDATA[c]]></b>
+     * </a>
+     * 
+ * + *

+ * + * @param parent element that will receive the new element as child. + * @param name of the child element. + * @param content text content. + * + * @since Ant 1.6.3 + */ + public static void appendCDATAElement(Element parent, String name, + String content) { + Element e = createChildElement(parent, name); + appendCDATA(e, content); + } +} \ No newline at end of file