package com.canoo.webtest.engine.xpath;
import java.util.HashMap;
import java.util.Map;
import javax.xml.namespace.NamespaceContext;
import org.apache.xpath.jaxp.JAXPPrefixResolver;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
class PrefixResolver extends JAXPPrefixResolver
{
private final Map<String, String> grabbedNamespaces = new HashMap<String, String>();
private String defaultNamespace = "WebTestDefaultNamespace";
public PrefixResolver(final NamespaceContext nsContext, Object _contextItem) {
super(nsContext);
if (_contextItem instanceof Document)
{
final NamedNodeMap docEltAttributes = ((Document) _contextItem).getDocumentElement().getAttributes();
for (int i=0; i<docEltAttributes.getLength(); ++i) {
final Node attrNode = docEltAttributes.item(i);
if (attrNode.getNodeName().startsWith("xmlns:")) {
final String namespace = attrNode.getNodeName().substring(6);
grabbedNamespaces.put(namespace, attrNode.getNodeValue());
}
else if (attrNode.getNodeName().equals("xmlns")) {
defaultNamespace = attrNode.getNodeValue();
}
}
}
}
@Override
public String getNamespaceForPrefix(String _prefix)
{
if (_prefix.length() == 0) {
return defaultNamespace;
}
final String ns = grabbedNamespaces.get(_prefix);
if (ns != null)
return ns;
else
return super.getNamespaceForPrefix(_prefix);
}
}