/*******************************************************************************
* Copyright (c) 2006, 2008 Spring IDE Developers
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.beans.core;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* @author Torsten Juergeleit
* @author Christian Dupuis
*/
public final class BeansTags {
public enum Tag { DESCRIPTION, IMPORT, ALIAS, BEANS, BEAN, CONSTRUCTOR_ARG,
LOOKUP_METHOD, REPLACE_METHOD, PROPERTY, REF, IDREF, VALUE, NULL,
LIST, SET, MAP, PROPS, ENTRY, KEY, PROP, ARG_TYPE, COMMENT,
UNKNOWN
}
private static final Map<String, Tag> TAGS = new HashMap<String, Tag>();
static {
TAGS.put("description", Tag.DESCRIPTION);
TAGS.put("import", Tag.IMPORT);
TAGS.put("alias", Tag.ALIAS);
TAGS.put("beans", Tag.BEANS);
TAGS.put("bean", Tag.BEAN);
TAGS.put("constructor-arg", Tag.CONSTRUCTOR_ARG);
TAGS.put("lookup-method", Tag.LOOKUP_METHOD);
TAGS.put("replaced-method", Tag.REPLACE_METHOD);
TAGS.put("property", Tag.PROPERTY);
TAGS.put("ref", Tag.REF);
TAGS.put("idref", Tag.IDREF);
TAGS.put("value", Tag.VALUE);
TAGS.put("null", Tag.NULL);
TAGS.put("list", Tag.LIST);
TAGS.put("set", Tag.SET);
TAGS.put("map", Tag.MAP);
TAGS.put("props", Tag.PROPS);
TAGS.put("entry", Tag.ENTRY);
TAGS.put("key", Tag.KEY);
TAGS.put("prop", Tag.PROP);
TAGS.put("arg-type", Tag.ARG_TYPE);
TAGS.put("#comment", Tag.COMMENT);
}
public static Tag getTag(String name) {
if (name != null) {
name = name.trim();
if (TAGS.containsKey(name)) {
return TAGS.get(name);
}
}
return Tag.UNKNOWN;
}
public static Tag getTag(Node node) {
if (node != null) {
if (node.getNodeType() == Node.TEXT_NODE) {
return getTag(node.getParentNode());
} else if (node.getNodeType() == Node.ELEMENT_NODE
|| node.getNodeType() == Node.COMMENT_NODE) {
return getTag(node.getLocalName());
}
}
return Tag.UNKNOWN;
}
public static boolean isTag(Node node, Tag tag) {
return (getTag(node) == tag);
}
public static List<Node> getChildElementsByTagName(Element element,
String name) {
List<Node> list = new ArrayList<Node>();
NodeList children = element.getChildNodes();
if (children != null) {
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if (child.getNodeType() == 1
&& name.equals(child.getNodeName())) {
list.add(child);
}
}
}
return list;
}
public static Element getFirstChildElementByTagName(Element element,
String name) {
NodeList children = element.getChildNodes();
if (children != null) {
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if (child.getNodeType() == 1
&& name.equals(child.getNodeName())) {
return (Element) child;
}
}
}
return null;
}
}