org.apache.commons.jexl3.internal

## Class Script

- java.lang.Object
- - org.apache.commons.jexl3.internal.Script

- All Implemented Interfaces:
    JexlExpression, JexlScript
  Direct Known Subclasses:
    Closure, Script.Curried

      public class Script
      extends Object
      implements JexlScript, JexlExpression

  A JexlScript implementation.

  Since:
    1.1

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `Script.Curried` A script whose parameters are (partially) bound.

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Engine` | `jexl` The engine for this expression.
    `protected ASTJexlScript` | `script` The resulting AST we can interpret.
    `protected String` | `source` Original expression stripped from leading and trailing spaces.
    `protected int` | `version` The engine version (as class loader change count) that last evaluated this script.

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `Script(Engine engine, String expr, ASTJexlScript ref)` Do not let this be generally instantiated with a 'new'.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `Callable<Object>` | `callable(JexlContext context)` Creates a Callable from this script.
    `Callable<Object>` | `callable(JexlContext context, Object... args)` Creates a Callable from this script.
    `protected void` | `checkCacheVersion()` Checks that this script cached methods (wrt introspection) matches the engine version.
    `protected Scope.Frame` | `createFrame(Object[] args)` Creates this script frame for evaluation.
    `protected Interpreter` | `createInterpreter(JexlContext context, Scope.Frame frame)` Creates this script interpreter.
    `JexlScript` | `curry(Object... args)` Curries this script, returning a script with bound arguments.
    `boolean` | `equals(Object obj)`
    `Object` | `evaluate(JexlContext context)` Evaluates the expression with the variables contained in the supplied `JexlContext`.
    `Object` | `execute(JexlContext context)` Executes the script with the variables contained in the supplied `JexlContext`.
    `Object` | `execute(JexlContext context, Object... args)` Executes the script with the variables contained in the supplied `JexlContext` and a set of arguments corresponding to the parameters used during parsing.
    `JexlEngine` | `getEngine()`
    `String[]` | `getLocalVariables()` Gets this script local variables.
    `String[]` | `getParameters()` Gets this script parameters.
    `String` | `getParsedText()` Recreates the source text of this expression from the internal syntactic tree.
    `String` | `getParsedText(int indent)` Recreates the source text of this expression from the internal syntactic tree.
    `Map<String,Object>` | `getPragmas()` Get this script pragmas Pragma keys are ant-ish variables, their values are scalar literals..
    `String` | `getSourceText()` Returns the source text of this expression.
    `Set<List<String>>` | `getVariables()` Gets this script variables.
    `int` | `hashCode()`
    `String` | `toString()`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### jexl

          protected final Engine jexl

      The engine for this expression.

    - #### source

          protected final String source

      Original expression stripped from leading and trailing spaces.

    - #### script

          protected final ASTJexlScript script

      The resulting AST we can interpret.

    - #### version

          protected int version

      The engine version (as class loader change count) that last evaluated this script.

  - ### Constructor Detail

    - #### Script

          protected Script(Engine engine,
                String expr,
                ASTJexlScript ref)

      Do not let this be generally instantiated with a 'new'.
      Parameters:
        `engine` - the interpreter to evaluate the expression
        `expr` - the expression source.
        `ref` - the parsed expression.

  - ### Method Detail

    - #### checkCacheVersion

          protected void checkCacheVersion()

      Checks that this script cached methods (wrt introspection) matches the engine version.

      If the engine class loader has changed since we last evaluated this script, the script local cache is invalidated to drop references to obsolete methods. It is not strictly necessary since the tryExecute will fail because the class wont match but it seems cleaner nevertheless.

    - #### createFrame

          protected Scope.Frame createFrame(Object[] args)

      Creates this script frame for evaluation.
      Parameters:
        `args` - the arguments to bind to parameters
      Returns:
        the frame (may be null)

    - #### createInterpreter

          protected Interpreter createInterpreter(JexlContext context,
                                      Scope.Frame frame)

      Creates this script interpreter.
      Parameters:
        `context` - the context
        `frame` - the calling frame
      Returns:
        the interpreter

    - #### getEngine

          public JexlEngine getEngine()

      Returns:
        the engine that created this script

    - #### getSourceText

          public String getSourceText()

      Returns the source text of this expression.
      Specified by:
        `getSourceText` in interface `JexlExpression`
      Specified by:
        `getSourceText` in interface `JexlScript`
      Returns:
        the source text

    - #### getParsedText

          public String getParsedText()

      Recreates the source text of this expression from the internal syntactic tree.
      Specified by:
        `getParsedText` in interface `JexlExpression`
      Specified by:
        `getParsedText` in interface `JexlScript`
      Returns:
        the source text

    - #### getParsedText

          public String getParsedText(int indent)

      Recreates the source text of this expression from the internal syntactic tree.
      Specified by:
        `getParsedText` in interface `JexlScript`
      Parameters:
        `indent` - the number of spaces for indentation, 0 meaning no indentation
      Returns:
        the source text

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `Object`

    - #### equals

          public boolean equals(Object obj)

      Overrides:
        `equals` in class `Object`

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`

    - #### evaluate

          public Object evaluate(JexlContext context)

      Evaluates the expression with the variables contained in the supplied `JexlContext`.
      Specified by:
        `evaluate` in interface `JexlExpression`
      Parameters:
        `context` - A JexlContext containing variables.
      Returns:
        The result of this evaluation

    - #### execute

          public Object execute(JexlContext context)

      Executes the script with the variables contained in the supplied `JexlContext`.
      Specified by:
        `execute` in interface `JexlScript`
      Parameters:
        `context` - A JexlContext containing variables.
      Returns:
        The result of this script, usually the result of the last statement.

    - #### execute

          public Object execute(JexlContext context,
                       Object... args)

      Executes the script with the variables contained in the supplied `JexlContext` and a set of arguments corresponding to the parameters used during parsing.
      Specified by:
        `execute` in interface `JexlScript`
      Parameters:
        `context` - A JexlContext containing variables.
        `args` - the arguments
      Returns:
        The result of this script, usually the result of the last statement.

    - #### curry

          public JexlScript curry(Object... args)

      Curries this script, returning a script with bound arguments.

      If this script does not declare parameters or if all of them are already bound, no error is generated and this script is returned.

      Specified by:
        `curry` in interface `JexlScript`
      Parameters:
        `args` - the arguments to bind
      Returns:
        the curried script or this script if no binding can occur

    - #### getParameters

          public String[] getParameters()

      Gets this script parameters.
      Specified by:
        `getParameters` in interface `JexlScript`
      Returns:
        the parameters or null
      Since:
        3.0

    - #### getLocalVariables

          public String[] getLocalVariables()

      Gets this script local variables.
      Specified by:
        `getLocalVariables` in interface `JexlScript`
      Returns:
        the local variables or null

    - #### getVariables

          public Set<List<String>> getVariables()

      Gets this script variables.

      Note that since variables can be in an ant-ish form (ie foo.bar.quux), each variable is returned as a list of strings where each entry is a fragment of the variable ({"foo", "bar", "quux"} in the example.

      Specified by:
        `getVariables` in interface `JexlScript`
      Returns:
        the variables or null

    - #### getPragmas

          public Map<String,Object> getPragmas()

      Get this script pragmas

      Pragma keys are ant-ish variables, their values are scalar literals..

      Specified by:
        `getPragmas` in interface `JexlScript`
      Returns:
        the pragmas

    - #### callable

          public Callable<Object> callable(JexlContext context)

      Creates a Callable from this script.

      This allows to submit it to an executor pool and provides support for asynchronous calls.

      The interpreter will handle interruption/cancellation gracefully if needed.

      Specified by:
        `callable` in interface `JexlScript`
      Parameters:
        `context` - the context
      Returns:
        the callable

    - #### callable

          public Callable<Object> callable(JexlContext context,
                                  Object... args)

      Creates a Callable from this script.

      This allows to submit it to an executor pool and provides support for asynchronous calls.

      The interpreter will handle interruption/cancellation gracefully if needed.

      Specified by:
        `callable` in interface `JexlScript`
      Parameters:
        `context` - the context
        `args` - the script arguments
      Returns:
        the callable

Copyright © 2001–2015 The Apache Software Foundation. All rights reserved.