package org.emdev.common.xml.tags;
import java.util.HashMap;
import org.emdev.common.xml.IXmlTagFactory;
import org.emdev.utils.collections.SymbolTree;
public class BaseXmlTagFactory implements IXmlTagFactory {
protected final HashMap<String, XmlTag> tagsByName = new HashMap<String, XmlTag>(256, 0.2f);
protected final SymbolTree<XmlTag> tagsTree = new SymbolTree<XmlTag>();
public XmlTag tag(final String name, final byte tag, final boolean processChildren, final boolean processText,
final String... attributes) {
final XmlTag t = new XmlTag(name, tag, processChildren, processText, attributes);
tagsByName.put(t.name, t);
tagsTree.add(t, t.name);
return t;
}
@Override
public XmlTag getTagByName(final String name) {
XmlTag tag = tagsByName.get(name);
if (tag == null) {
final String upperCaseName = name.toLowerCase().intern();
tag = tagsByName.get(upperCaseName);
if (tag == null) {
tag = XmlTag.UNKNOWN;
tagsByName.put(upperCaseName, tag);
}
tagsByName.put(name, tag);
}
return tag;
}
@Override
public XmlTag getTagByName(final char[] ch, final int start, final int length) {
final XmlTag t = tagsTree.get(ch, start, length);
return t != null ? t : XmlTag.UNKNOWN;
}
}