package org.jboss.windup.rules.apps.xml.condition;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.xpath.XPathFunction;
import javax.xml.xpath.XPathFunctionException;
import javax.xml.xpath.XPathFunctionResolver;
public class XmlFileFunctionResolver implements XPathFunctionResolver
{
private final XPathFunctionResolver originalResolver;
private final Map<QName, XPathFunction> functionMap = new HashMap<>();
public XmlFileFunctionResolver(XPathFunctionResolver originalResolver)
{
this.originalResolver = originalResolver;
}
public void registerFunction(String namespaceURI, String functionName, XPathFunction function)
{
QName qname = new QName(namespaceURI, functionName);
functionMap.put(qname, function);
}
public void clearRegisteredFunctions()
{
functionMap.clear();
}
@Override
public XPathFunction resolveFunction(final QName functionName, final int arity)
{
if (functionMap.containsKey(functionName))
{
return new XPathFunction()
{
@Override
public Object evaluate(List args) throws XPathFunctionException
{
return functionMap.get(functionName).evaluate(args);
}
};
}
return originalResolver.resolveFunction(functionName, arity);
}
}