| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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 |
| * |
| * https://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; |
| |
| // CheckStyle:HideUtilityClassConstructorCheck OFF - bc |
| |
| /** |
| * Some utility methods for common tasks when building DOM trees in memory. |
| * |
| * <p>In this documentation <code><a></code> means an {@link |
| * org.w3c.dom.Element Element} instance with name <code>a</code>.</p> |
| * |
| * @since Ant 1.6.3 |
| */ |
| public class DOMUtils { |
| |
| /** |
| * Get a new Document instance, |
| * @return the document. |
| * @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. |
| * |
| * <p>This means |
| * <pre>createChildElement(<a>, "b")</pre> |
| * creates |
| * <pre> |
| * <a> |
| * <b/> |
| * </a> |
| * </pre> |
| * and returns <code><b></code>. |
| * |
| * @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. |
| * |
| * <p>This means |
| * <pre>appendText(<a>, "b")</pre> |
| * creates |
| * <pre> |
| * <a>b</a> |
| * </pre> |
| * |
| * @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. |
| * |
| * <p>This means |
| * <pre>appendCDATA(<a>, "b")</pre> |
| * creates |
| * <pre> |
| * <a><[!CDATA[b]]></a> |
| * </pre> |
| * |
| * @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. |
| * |
| * <p>This means |
| * <pre>appendTextElement(<a>, "b", "c")</pre> |
| * creates |
| * <pre> |
| * <a> |
| * <b>c</b> |
| * </a> |
| * </pre> |
| * |
| * @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. |
| * |
| * <p>This means |
| * <pre>appendCDATAElement(<a>, "b", "c")</pre> |
| * creates |
| * <pre> |
| * <a> |
| * <b><![CDATA[c]]></b> |
| * </a> |
| * </pre> |
| * |
| * @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); |
| } |
| |
| private DOMUtils() { |
| } |
| } |