2
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4
* Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
6
* The contents of this file are subject to the terms of either the GNU
7
* General Public License Version 2 only ("GPL") or the Common
8
* Development and Distribution License("CDDL") (collectively, the
9
* "License"). You may not use this file except in compliance with the
10
* License. You can obtain a copy of the License at
11
* http://www.netbeans.org/cddl-gplv2.html
12
* or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
13
* specific language governing permissions and limitations under the
14
* License. When distributing the software, include this License Header
15
* Notice in each file and include the License file at
16
* nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
17
* particular file as subject to the "Classpath" exception as provided
18
* by Sun in the GPL Version 2 section of the License file that
19
* accompanied this code. If applicable, add the following below the
20
* License Header, with the fields enclosed by brackets [] replaced by
21
* your own identifying information:
22
* "Portions Copyrighted [year] [name of copyright owner]"
26
* The Original Software is NetBeans. The Initial Developer of the Original
27
* Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
28
* Microsystems, Inc. All Rights Reserved.
30
* If you wish your version of this file to be governed by only the CDDL
31
* or only the GPL Version 2, indicate your decision by adding
32
* "[Contributor] elects to include this software in this distribution
33
* under the [CDDL or GPL Version 2] license." If you do not indicate a
34
* single choice of license, a recipient has the option to distribute
35
* your version of this file under either the CDDL, the GPL Version 2 or
36
* to extend the choice of license to its licensees as provided above.
37
* However, if you add GPL Version 2 code and therefore, elected the GPL
38
* Version 2 license, then the option applies only if the new code is
39
* made subject to such option by the copyright holder.
42
package org.netbeans.modules.projectimport.jbuilder.parsing;
44
import java.util.ArrayList;
45
import java.util.List;
46
import org.w3c.dom.Element;
47
import org.w3c.dom.Node;
48
import org.w3c.dom.NodeList;
49
import org.w3c.dom.Text;
52
* Utility methods for the module.
59
// COPIED FROM org.netbeans.modules.project.ant:
60
// (except for namespace == null support in findElement)
61
// (and support for comments in findSubElements)
64
* Search for an XML element in the direct children of a parent.
65
* DOM provides a similar method but it does a recursive search
66
* which we do not want. It also gives a node list and we want
68
* @param parent a parent element
69
* @param name the intended local name
70
* @param namespace the intended namespace (or null)
71
* @return the one child element with that name, or null if none or more than one
73
public static Element findElement(Element parent, String name, String namespace) {
74
Element result = null;
75
NodeList l = parent.getChildNodes();
76
for (int i = 0; i < l.getLength(); i++) {
77
if (l.item(i).getNodeType() == Node.ELEMENT_NODE) {
78
Element el = (Element)l.item(i);
79
if ((namespace == null && name.equals(el.getTagName())) ||
80
(namespace != null && name.equals(el.getLocalName()) &&
81
namespace.equals(el.getNamespaceURI()))) {
94
* Extract nested text from an element.
95
* Currently does not handle coalescing text nodes, CDATA sections, etc.
96
* @param parent a parent element
97
* @return the nested text, or null if none was found
99
public static String findText(Element parent) {
100
NodeList l = parent.getChildNodes();
101
for (int i = 0; i < l.getLength(); i++) {
102
if (l.item(i).getNodeType() == Node.TEXT_NODE) {
103
Text text = (Text)l.item(i);
104
return text.getNodeValue();
111
* Find all direct child elements of an element.
112
* More useful than {@link Element#getElementsByTagNameNS} because it does
113
* not recurse into recursive child elements.
114
* Children which are all-whitespace text nodes or comments are ignored; others cause
115
* an exception to be thrown.
116
* @param parent a parent element in a DOM tree
117
* @return a list of direct child elements (may be empty)
118
* @throws IllegalArgumentException if there are non-element children besides whitespace
120
public static List/*<Element>*/ findSubElements(Element parent) throws IllegalArgumentException {
121
NodeList l = parent.getChildNodes();
122
List/*<Element>*/ elements = new ArrayList(l.getLength());
123
for (int i = 0; i < l.getLength(); i++) {
125
if (n.getNodeType() == Node.ELEMENT_NODE) {
126
elements.add((Element)n);
127
} else if (n.getNodeType() == Node.TEXT_NODE) {
128
String text = ((Text)n).getNodeValue();
129
if (text.trim().length() > 0) {
130
throw new IllegalArgumentException("non-ws text encountered in " + parent + ": " + text); // NOI18N
132
} else if (n.getNodeType() == Node.COMMENT_NODE) {
135
throw new IllegalArgumentException("unexpected non-element child of " + parent + ": " + n); // NOI18N