Class PackageFunctions

  • All Implemented Interfaces:
    Functions

    public class PackageFunctions
    extends java.lang.Object
    implements Functions
    Extension functions provided by Java classes. The class prefix specified in the constructor is used when a constructor or a static method is called. Usually, a class prefix is a package name (hence the name of this class). Let's say, we declared a PackageFunction like this:
         new PackageFunctions("java.util.", "util")
     
    We can now use XPaths like:
    "util:Date.new()"
    Equivalent to new java.util.Date()
    "util:Collections.singleton('foo')"
    Equivalent to java.util.Collections.singleton("foo")
    "util:substring('foo', 1, 2)"
    Equivalent to "foo".substring(1, 2). Note that in this case, the class prefix is not used. JXPath does not check that the first parameter of the function (the method target) is in fact a member of the package described by this PackageFunctions object.

    If the first argument of a method or constructor is ExpressionContext, the expression context in which the function is evaluated is passed to the method.

    There is one PackageFunctions object registered by default with each JXPathContext. It does not have a namespace and uses no class prefix. The existence of this object allows us to use XPaths like: "java.util.Date.new()" and "length('foo')" without the explicit registration of any extension functions.

    Version:
    $Revision: 670727 $ $Date: 2008-06-23 15:10:38 -0500 (Mon, 23 Jun 2008) $
    Author:
    Dmitri Plotnikov
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.String classPrefix  
      private static java.lang.Object[] EMPTY_ARRAY  
      private java.lang.String namespace  
    • Constructor Summary

      Constructors 
      Constructor Description
      PackageFunctions​(java.lang.String classPrefix, java.lang.String namespace)
      Create a new PackageFunctions.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      Function getFunction​(java.lang.String namespace, java.lang.String name, java.lang.Object[] parameters)
      Returns a Function, if found, for the specified namespace, name and parameter types.
      java.util.Set getUsedNamespaces()
      Returns the namespace specified in the constructor
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • classPrefix

        private java.lang.String classPrefix
      • namespace

        private java.lang.String namespace
      • EMPTY_ARRAY

        private static final java.lang.Object[] EMPTY_ARRAY
    • Constructor Detail

      • PackageFunctions

        public PackageFunctions​(java.lang.String classPrefix,
                                java.lang.String namespace)
        Create a new PackageFunctions.
        Parameters:
        classPrefix - class prefix
        namespace - namespace String
    • Method Detail

      • getUsedNamespaces

        public java.util.Set getUsedNamespaces()
        Returns the namespace specified in the constructor
        Specified by:
        getUsedNamespaces in interface Functions
        Returns:
        (singleton) namespace Set
      • getFunction

        public Function getFunction​(java.lang.String namespace,
                                    java.lang.String name,
                                    java.lang.Object[] parameters)
        Returns a Function, if found, for the specified namespace, name and parameter types.

        Specified by:
        getFunction in interface Functions
        Parameters:
        namespace - - if it is not the same as specified in the construction, this method returns null
        name - - name of the method, which can one these forms:
        • methodname, if invoking a method on an object passed as the first parameter
        • Classname.new, if looking for a constructor
        • subpackage.subpackage.Classname.new, if looking for a constructor in a subpackage
        • Classname.methodname, if looking for a static method
        • subpackage.subpackage.Classname.methodname, if looking for a static method of a class in a subpackage
        parameters - Object[] of parameters
        Returns:
        a MethodFunction, a ConstructorFunction or null if no function is found