org.apache.commons.jexl
Class ExpressionImpl

java.lang.Object
  extended byorg.apache.commons.jexl.ExpressionImpl
All Implemented Interfaces:
Expression

class ExpressionImpl
extends java.lang.Object
implements Expression

Instances of ExpressionImpl are created by the ExpressionFactory, and this is the default implementation of the Expression interface.

Version:
$Id: ExpressionImpl.java,v 1.11 2004/08/23 14:00:11 dion Exp $
Author:
Geir Magnusson Jr.

Field Summary
protected  java.lang.String expression
          Original expression - this is just a 'snippet', not a valid statement (i.e.
protected  SimpleNode node
          The resulting AST we can call value() on
protected  java.util.List postResolvers
           
protected  java.util.List preResolvers
           
 
Constructor Summary
(package private) ExpressionImpl(java.lang.String expr, SimpleNode ref)
          do not let this be generally instantiated with a 'new'
 
Method Summary
 void addPostResolver(JexlExprResolver resolver)
          allows addition of a resolver to allow custom interdiction of expression evaluation
 void addPreResolver(JexlExprResolver resolver)
          allows addition of a resolver to allow custom interdiction of expression evaluation
 java.lang.Object evaluate(JexlContext context)
          Evaluate the expression and return the value.
 java.lang.String getExpression()
          returns original expression string
protected  java.lang.Object tryResolver(java.util.List resolverList, JexlContext context)
          Tries the resolvers in the given resolverlist against the context
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

preResolvers

protected java.util.List preResolvers

postResolvers

protected java.util.List postResolvers

expression

protected java.lang.String expression
Original expression - this is just a 'snippet', not a valid statement (i.e. foo.bar() vs foo.bar();


node

protected SimpleNode node
The resulting AST we can call value() on

Constructor Detail

ExpressionImpl

ExpressionImpl(java.lang.String expr,
               SimpleNode ref)
do not let this be generally instantiated with a 'new'

Method Detail

evaluate

public java.lang.Object evaluate(JexlContext context)
                          throws java.lang.Exception
Evaluate the expression and return the value. Before JEXL evaluates the expression, any pre-resolvers will be called. If the pre-resolver provides a value, it is returned. If JEXL evaluates the expression as null, post-resolvers are called and any resulting value returned.

Specified by:
evaluate in interface Expression
Parameters:
context - Context containing objects/data used for evaluation
Returns:
value of expression
Throws:
java.lang.Exception

tryResolver

protected java.lang.Object tryResolver(java.util.List resolverList,
                                       JexlContext context)
Tries the resolvers in the given resolverlist against the context

Parameters:
resolverList - list of JexlExprResolvers
context - JexlContext to use for evauluation
Returns:
value (including null) or JexlExprResolver.NO_VALUE

getExpression

public java.lang.String getExpression()
returns original expression string

Specified by:
getExpression in interface Expression
Returns:
The JEXL expression to be evaluated

addPreResolver

public void addPreResolver(JexlExprResolver resolver)
Description copied from interface: Expression
allows addition of a resolver to allow custom interdiction of expression evaluation

Specified by:
addPreResolver in interface Expression
Parameters:
resolver - resolver to be called before Jexl expression evaluated

addPostResolver

public void addPostResolver(JexlExprResolver resolver)
allows addition of a resolver to allow custom interdiction of expression evaluation

Specified by:
addPostResolver in interface Expression
Parameters:
resolver - resolver to be called if Jexl expression evaluated to null