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

org.navimatrix.jaxen.XPathFunctionContext Maven / Gradle / Ivy

There is a newer version: 1.0.5
Show newest version
/*
 * $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