Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/FunctionResolver.java @ 959:a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
flys-artifacts/trunk@2378 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 20 Jul 2011 16:28:49 +0000 |
parents | |
children | 30c85cb33a50 |
line wrap: on
line source
package de.intevation.flys.artifacts.services.meta; import java.util.List; import java.util.ArrayList; import javax.xml.xpath.XPathFunctionResolver; import javax.xml.xpath.XPathFunction; import javax.xml.xpath.XPathFunctionException; import javax.xml.namespace.QName; public class FunctionResolver implements XPathFunctionResolver { public static final String FUNCTION_NAMESPACE_URI = "dc"; public static final class Entry { String name; XPathFunction function; int arity; public Entry() { } public Entry(String name, XPathFunction function, int arity) { this.name = name; this.function = function; this.arity = arity; } } // class Entry public static final FunctionResolver FUNCTIONS = new FunctionResolver(); static { FUNCTIONS.addFunction("contains", 2, new XPathFunction() { @Override public Object evaluate(List args) throws XPathFunctionException { try { Object [] haystack = (Object [])args.get(0); Object needle = args.get(1); for (Object straw: haystack) { if (straw.equals(needle)) { return Boolean.TRUE; } } return Boolean.FALSE; } catch (Exception e) { throw new XPathFunctionException(e); } } }); } protected List<Entry> functions; public FunctionResolver() { functions = new ArrayList<Entry>(); } public void addFunction(String name, int arity, XPathFunction function) { functions.add(new Entry(name, function, arity)); } @Override public XPathFunction resolveFunction(QName functionName, int arity) { if (!functionName.getNamespaceURI().equals(FUNCTION_NAMESPACE_URI)) { return null; } String name = functionName.getLocalPart(); for (Entry entry: functions) { if (entry.arity == arity && entry.name.equals(name)) { return entry.function; } } return null; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :