# Interface JexlContext

All Known Subinterfaces:
  `JexlContext.ThreadLocal`

All Known Implementing Classes:
  `JexlEngine.EmptyContext, MapContext, ObjectContext`

public interface JexlContext
Manages variables which can be referenced in a JEXL expression.

JEXL variable names in their simplest form are 'java-like' identifiers. JEXL also considers 'ant' inspired variables expressions as valid. For instance, the expression 'x.y.z' is an 'antish' variable and will be resolved as a whole by the context, i.e. using the key "x.y.z". This proves to be useful to solve "fully qualified class names".

The interpreter variable resolution algorithm will try the different sequences of identifiers till it finds one that exists in the context; if "x" is an object known in the context (JexlContext.has("x") returns true), "x.y" will not be looked up in the context but will most likely refer to "x.getY()".

Note that JEXL may use '$jexl' and '$ujexl' variables for internal purpose; setting or getting those variables may lead to unexpected results unless specified otherwise.

Since:
  1.0

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Interface
  Description
  `static interface`
  `JexlContext.AnnotationProcessor`
  A marker interface of the JexlContext that processes annotations.
  `static interface`
  `JexlContext.CancellationHandle`
  A marker interface of the JexlContext sharing a cancelling flag.
  `static interface`
  `JexlContext.ClassNameResolver`
  A marker interface that solves a simple class name into a fully-qualified one.
  `static interface`
  `JexlContext.ModuleProcessor`
  A marker interface of the JexlContext that processes module definitions.
  `static interface`
  `JexlContext.NamespaceFunctor`
  A marker interface of the JexlContext, NamespaceFunctor allows creating an instance to delegate namespace methods calls to.
  `static interface`
  `JexlContext.NamespaceResolver`
  A marker interface of the JexlContext that declares how to resolve a namespace from its name; it is used by the interpreter during evaluation.
  `static interface`
  `JexlContext.OptionsHandle`
  A marker interface of the JexlContext that exposes runtime evaluation options.
  `static interface`
  `JexlContext.PragmaProcessor`
  A marker interface of the JexlContext that processes pragmas.
  `static interface`
  `JexlContext.ThreadLocal`
  A marker interface of the `JexlContext` that indicates the interpreter to put this context in the `JexlEngine` thread local context instance during evaluation.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Object`
  `get(String name)`
  Gets the value of a variable.
  `boolean`
  `has(String name)`
  Checks whether a variable is defined in this context.
  `void`
  `set(String name, Object value)`
  Sets the value of a variable.

- ## Method Details

  - ### get

    Object get(String name)
    Gets the value of a variable.
    Parameters:
      `name` - the variable's name.
    Returns:
      the value.

  - ### has

    boolean has(String name)
    Checks whether a variable is defined in this context.

    A variable may be defined with a null value; this method checks whether the value is null or if the variable is undefined.

    Parameters:
      `name` - the variable's name.
    Returns:
      true if it exists, false otherwise.

  - ### set

    void set(String name, Object value)
    Sets the value of a variable.
    Parameters:
      `name` - the variable's name.
      `value` - the variable's value.