Package org.apache.commons.jxpath

# Class PackageFunctions

java.lang.Object
org.apache.commons.jxpath.PackageFunctions

All Implemented Interfaces:
  `Functions`

public class PackageFunctions extends 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.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PackageFunctions(String classPrefix, String namespace)`
  Constructs a new PackageFunctions.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Function`
  `getFunction(String namespace, String name, Object[] parameters)`
  Returns a `Function`, if found, for the specified namespace, name and parameter types.
  `Set<String>`
  `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`

- ## Constructor Details

  - ### PackageFunctions

    public PackageFunctions(String classPrefix, String namespace)
    Constructs a new PackageFunctions.
    Parameters:
      `classPrefix` - class prefix
      `namespace` - namespace String

- ## Method Details

  - ### getFunction

    public Function getFunction(String namespace, String name, 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

  - ### getUsedNamespaces

    public Set<String> getUsedNamespaces()
    Returns the namespace specified in the constructor
    Specified by:
      `getUsedNamespaces` in interface `Functions`
    Returns:
      (singleton) namespace Set