public final class UnifiedJEXL extends Object
An expression can mix immediate, deferred and nested sub-expressions as well as string constants;
"...${jexl-expr}..."
"...#{jexl-expr}..."
"...#{...${jexl-expr0}...}..."
"...${jexl-expr0}... #{jexl-expr1}..."
Deferred & immediate expression carry different intentions:
For instance: "Hello ${name}, now is #{time}"
is a composite "deferred" expression since one
of its subexpressions is deferred. Furthermore, this (composite) expression intent is
to perform two evaluations; one close to its definition and another one in a later
phase.
The API reflects this feature in 2 methods, prepare and evaluate. The prepare method will evaluate the immediate subexpression and return an expression that contains only the deferred subexpressions (& constants), a prepared expression. Such a prepared expression is suitable for a later phase evaluation that may occur with a different JexlContext. Note that it is valid to call evaluate without prepare in which case the same JexlContext is used for the 2 evaluation phases.
In the most common use-case where deferred expressions are to be kept around as properties of objects, one should parse & prepare an expression before storing it and evaluate it each time the property storing it is accessed.
Note that nested expression use the JEXL syntax as in:
"#{${bar}+'.charAt(2)'}"
The most common mistake leading to an invalid expression being the following:
"#{${bar}charAt(2)}"
Also note that methods that parse evaluate expressions may throw unchecked exceptions;
The UnifiedJEXL.Exception
are thrown when the engine instance is in "non-silent" mode
but since these are RuntimeException, user-code should catch them where appropriate.
Modifier and Type | Class and Description |
---|---|
static class |
UnifiedJEXL.Exception
The sole type of (runtime) exception the UnifiedJEXL can throw.
|
class |
UnifiedJEXL.Expression
The abstract base class for all expressions, immediate '${...}' and deferred '#{...}'.
|
class |
UnifiedJEXL.Template
A Template is a script that evaluates by writing its content through a Writer.
|
class |
UnifiedJEXL.TemplateContext
The type of context to use during evaluation of templates.
|
Constructor and Description |
---|
UnifiedJEXL(JexlEngine aJexl)
Creates a new instance of UnifiedJEXL with a default size cache.
|
UnifiedJEXL(JexlEngine aJexl,
int cacheSize)
Creates a new instance of UnifiedJEXL creating a local cache.
|
Modifier and Type | Method and Description |
---|---|
void |
clearCache()
Clears the cache.
|
UnifiedJEXL.Template |
createTemplate(String source)
Creates a new template.
|
UnifiedJEXL.Template |
createTemplate(String prefix,
Reader source,
String... parms)
Creates a new template.
|
UnifiedJEXL.Template |
createTemplate(String source,
String... parms)
Creates a new template.
|
JexlEngine |
getEngine()
Gets the JexlEngine underlying the UnifiedJEXL.
|
UnifiedJEXL.Expression |
parse(String expression)
Creates a a
UnifiedJEXL.Expression from an expression string. |
protected List<edu.internet2.middleware.grouperClientExt.org.apache.commons.jexl2.UnifiedJEXL.TemplateBlock> |
readTemplate(String prefix,
Reader source)
Reads lines of a template grouping them by typed blocks.
|
protected int |
startsWith(CharSequence sequence,
CharSequence pattern)
Whether a sequence starts with a given set of characters (following spaces).
|
public UnifiedJEXL(JexlEngine aJexl)
aJexl
- the JexlEngine to use.public UnifiedJEXL(JexlEngine aJexl, int cacheSize)
aJexl
- the JexlEngine to use.cacheSize
- the number of expressions in this cachepublic JexlEngine getEngine()
public void clearCache()
public UnifiedJEXL.Expression parse(String expression)
UnifiedJEXL.Expression
from an expression string.
Uses & fills up the expression cache if any.
If the underlying JEXL engine is silent, errors will be logged through its logger as warnings.
expression
- the UnifiedJEXL string expressionUnifiedJEXL.Exception
- if an error occurs and the JexlEngine
is not silentprotected int startsWith(CharSequence sequence, CharSequence pattern)
Space characters at beginning of line before the pattern are discarded.
sequence
- the sequencepattern
- the pattern to match at start of sequenceprotected List<edu.internet2.middleware.grouperClientExt.org.apache.commons.jexl2.UnifiedJEXL.TemplateBlock> readTemplate(String prefix, Reader source)
prefix
- the directive prefixsource
- the source readerpublic UnifiedJEXL.Template createTemplate(String prefix, Reader source, String... parms)
prefix
- the directive prefixsource
- the sourceparms
- the parameter namespublic UnifiedJEXL.Template createTemplate(String source, String... parms)
source
- the sourceparms
- the parameter namespublic UnifiedJEXL.Template createTemplate(String source)
source
- the sourceCopyright © 2016 Internet2. All rights reserved.