All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.daisy.common.xpath.saxon.XPathFunctionRegistry Maven / Gradle / Ivy

There is a newer version: 5.5.0
Show newest version
package org.daisy.common.xpath.saxon;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

import javax.xml.namespace.QName;

import net.sf.saxon.lib.ExtensionFunctionDefinition;
import net.sf.saxon.trans.XPathException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;

@Component(
	name = "xpath-registry",
	service = { XPathFunctionRegistry.class }
)
public class XPathFunctionRegistry  {

	private static final Logger mLogger = LoggerFactory.getLogger(XPathFunctionRegistry.class);

	HashMap mFunctions = new HashMap();

	@Reference(
		name = "ExtensionFunctionDefinition",
		unbind = "-",
		service = ExtensionFunctionDefinition.class,
		cardinality = ReferenceCardinality.MULTIPLE,
		policy = ReferencePolicy.STATIC
	)
	public void addFunction(ExtensionFunctionDefinition functionDefinition) throws XPathException {
		mLogger.info("Adding extension function definition to registry {}", functionDefinition.getFunctionQName().toString());
		mFunctions.put(functionDefinition.getFunctionQName().toJaxpQName(), functionDefinition);
	}

	public void removeFunction(ExtensionFunctionDefinition functionDefinition) {
		mLogger.info("Deleting extension function definition to registry {}",functionDefinition.getFunctionQName().toString());
		mFunctions.remove(functionDefinition.getFunctionQName().toJaxpQName());
	}

	@Reference(
		name = "ExtensionFunctionProvider",
		unbind = "-",
		service = ExtensionFunctionProvider.class,
		cardinality = ReferenceCardinality.MULTIPLE,
		policy = ReferencePolicy.STATIC
	)
	public void addFunctionProvider(ExtensionFunctionProvider functionProvider) throws XPathException {
		for (ExtensionFunctionDefinition f : functionProvider.getDefinitions())
			addFunction(f);
	}

	public void removeFunctionProvider(ExtensionFunctionProvider functionProvider) {
		for (ExtensionFunctionDefinition f : functionProvider.getDefinitions())
			removeFunction(f);
	}

	public Set getFunctions() {
		return new HashSet(mFunctions.values());
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy