org.navimatrix.jaxen.XPathFunctionContext Maven / Gradle / Ivy
/*
* $Header: /cvs/jaxen/jaxen/src/java/main/org/jaxen/XPathFunctionContext.java,v 1.28 2006/02/05 21:47:41 elharo Exp $
* $Revision: 1.28 $
* $Date: 2006/02/05 21:47:41 $
*
* ====================================================================
*
* Copyright 2000-2002 bob mcwhirter & James Strachan.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of the Jaxen Project nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* ====================================================================
* This software consists of voluntary contributions made by many
* individuals on behalf of the Jaxen Project and was originally
* created by bob mcwhirter and
* James Strachan . For more information on the
* Jaxen Project, please see .
*
* $Id: XPathFunctionContext.java,v 1.28 2006/02/05 21:47:41 elharo Exp $
*/
package org.navimatrix.jaxen;
import org.navimatrix.jaxen.function.BooleanFunction;
import org.navimatrix.jaxen.function.CeilingFunction;
import org.navimatrix.jaxen.function.ConcatFunction;
import org.navimatrix.jaxen.function.ContainsFunction;
import org.navimatrix.jaxen.function.CountFunction;
import org.navimatrix.jaxen.function.FalseFunction;
import org.navimatrix.jaxen.function.FloorFunction;
import org.navimatrix.jaxen.function.IdFunction;
import org.navimatrix.jaxen.function.LangFunction;
import org.navimatrix.jaxen.function.LastFunction;
import org.navimatrix.jaxen.function.LocalNameFunction;
import org.navimatrix.jaxen.function.NameFunction;
import org.navimatrix.jaxen.function.NamespaceUriFunction;
import org.navimatrix.jaxen.function.NormalizeSpaceFunction;
import org.navimatrix.jaxen.function.NotFunction;
import org.navimatrix.jaxen.function.NumberFunction;
import org.navimatrix.jaxen.function.PositionFunction;
import org.navimatrix.jaxen.function.RoundFunction;
import org.navimatrix.jaxen.function.StartsWithFunction;
import org.navimatrix.jaxen.function.StringFunction;
import org.navimatrix.jaxen.function.StringLengthFunction;
import org.navimatrix.jaxen.function.SubstringAfterFunction;
import org.navimatrix.jaxen.function.SubstringBeforeFunction;
import org.navimatrix.jaxen.function.SubstringFunction;
import org.navimatrix.jaxen.function.SumFunction;
import org.navimatrix.jaxen.function.TranslateFunction;
import org.navimatrix.jaxen.function.TrueFunction;
import org.navimatrix.jaxen.function.ext.EndsWithFunction;
import org.navimatrix.jaxen.function.ext.EvaluateFunction;
import org.navimatrix.jaxen.function.ext.LowerFunction;
import org.navimatrix.jaxen.function.ext.MatrixConcatFunction;
import org.navimatrix.jaxen.function.ext.UpperFunction;
import org.navimatrix.jaxen.function.xslt.DocumentFunction;
/** A FunctionContext
implementing the core XPath
* function library, plus Jaxen extensions.
*
*
* The core XPath function library is provided through this
* implementation of FunctionContext
. Additionally,
* extension functions have been provided, as enumerated below.
*
*
*
* This class is re-entrant and thread-safe. If using the
* default instance, it is inadvisable to call
* {@link #registerFunction(String, String, Function)}
* as that will extend the global function context, affecting other
* users. But that's your call, really, now isn't
* it? That may be what you really want to do.
*
*
*
* Extension functions:
*
*
*
* - matrix-concat(..)
* - evaluate(..)
* - upper-case(..)
* - lower-case(..)
* - ends-with(..)
*
*
* @see FunctionContext
* @see org.navimatrix.jaxen.function
* @see org.navimatrix.jaxen.function.xslt
* @see org.navimatrix.jaxen.function.ext
*
* @author bob mcwhirter
*/
public class XPathFunctionContext extends SimpleFunctionContext
{
private static XPathFunctionContext instance = new XPathFunctionContext();
/** Retrieve the default function context
*
* @return the default function context
*/
public static FunctionContext getInstance()
{
return instance;
}
/** Create a new XPath function context.
* All core XPath and Jaxen extension functions are registered.
*/
public XPathFunctionContext()
{
this(true);
}
/** Create a new XPath function context.
* All core XPath functions are registered.
*
* @param includeExtensionFunctions if true extension functions are included;
* if false, they aren't.
*/
public XPathFunctionContext(boolean includeExtensionFunctions)
{
registerXPathFunctions();
if (includeExtensionFunctions) {
registerXSLTFunctions();
registerExtensionFunctions();
}
}
private void registerXPathFunctions() {
registerFunction( null, // namespace URI
"boolean",
new BooleanFunction() );
registerFunction( null, // namespace URI
"ceiling",
new CeilingFunction() );
registerFunction( null, // namespace URI
"concat",
new ConcatFunction() );
registerFunction( null, // namespace URI
"contains",
new ContainsFunction() );
registerFunction( null, // namespace URI
"count",
new CountFunction() );
registerFunction( null, // namespace URI
"false",
new FalseFunction() );
registerFunction( null, // namespace URI
"floor",
new FloorFunction() );
registerFunction( null, // namespace URI
"id",
new IdFunction() );
registerFunction( null, // namespace URI
"lang",
new LangFunction() );
registerFunction( null, // namespace URI
"last",
new LastFunction() );
registerFunction( null, // namespace URI
"local-name",
new LocalNameFunction() );
registerFunction( null, // namespace URI
"name",
new NameFunction() );
registerFunction( null, // namespace URI
"namespace-uri",
new NamespaceUriFunction() );
registerFunction( null, // namespace URI
"normalize-space",
new NormalizeSpaceFunction() );
registerFunction( null, // namespace URI
"not",
new NotFunction() );
registerFunction( null, // namespace URI
"number",
new NumberFunction() );
registerFunction( null, // namespace URI
"position",
new PositionFunction() );
registerFunction( null, // namespace URI
"round",
new RoundFunction() );
registerFunction( null, // namespace URI
"starts-with",
new StartsWithFunction() );
registerFunction( null, // namespace URI
"string",
new StringFunction() );
registerFunction( null, // namespace URI
"string-length",
new StringLengthFunction() );
registerFunction( null, // namespace URI
"substring-after",
new SubstringAfterFunction() );
registerFunction( null, // namespace URI
"substring-before",
new SubstringBeforeFunction() );
registerFunction( null, // namespace URI
"substring",
new SubstringFunction() );
registerFunction( null, // namespace URI
"sum",
new SumFunction() );
registerFunction( null, // namespace URI
"true",
new TrueFunction() );
registerFunction( null, // namespace URI
"translate",
new TranslateFunction() );
}
private void registerXSLTFunctions() {
// extension functions defined in XSLT
registerFunction( null, // namespace URI
"document",
new DocumentFunction() );
}
private void registerExtensionFunctions() {
// extension functions should go into a namespace, but which one?
// for now, keep them in default namespace to not break any code
registerFunction( null, // namespace URI
"matrix-concat",
new MatrixConcatFunction() );
registerFunction( null, // namespace URI
"evaluate",
new EvaluateFunction() );
registerFunction( null, // namespace URI
"lower-case",
new LowerFunction() );
registerFunction( null, // namespace URI
"upper-case",
new UpperFunction() );
registerFunction( null, // namespace URI
"ends-with",
new EndsWithFunction() );
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy