org.springframework.expression.spel.ast
Class Indexer

java.lang.Object
  extended by org.springframework.expression.spel.ast.SpelNodeImpl
      extended by org.springframework.expression.spel.ast.Indexer
All Implemented Interfaces:
SpelNode

public class Indexer
extends SpelNodeImpl

An Indexer can index into some proceeding structure to access a particular piece of it. Supported structures are: strings/collections (lists/sets)/arrays

Since:
3.0
Author:
Andy Clement

Field Summary
private  PropertyAccessor cachedReadAccessor
           
private  java.lang.String cachedReadName
           
private  java.lang.Class<?> cachedReadTargetType
           
private  PropertyAccessor cachedWriteAccessor
           
private  java.lang.String cachedWriteName
           
private  java.lang.Class<?> cachedWriteTargetType
           
 
Fields inherited from class org.springframework.expression.spel.ast.SpelNodeImpl
children, pos
 
Constructor Summary
Indexer(int pos, SpelNodeImpl expr)
           
 
Method Summary
private  java.lang.Object accessArrayElement(java.lang.Object ctx, int idx)
           
private  void checkAccess(int arrayLength, int index)
           
 TypedValue getValueInternal(ExpressionState state)
           
private  boolean growCollection(ExpressionState state, TypeDescriptor targetType, int index, java.util.Collection collection)
          Attempt to grow the specified collection so that the specified index is valid.
 boolean isWritable(ExpressionState expressionState)
          Determine if this expression node will support a setValue() call.
private  void setArrayElement(ExpressionState state, java.lang.Object ctx, int idx, java.lang.Object newValue, java.lang.Class clazz)
           
 void setValue(ExpressionState state, java.lang.Object newValue)
          Evaluate the expression to a node and then set the new value on that node.
 java.lang.String toStringAST()
           
 
Methods inherited from class org.springframework.expression.spel.ast.SpelNodeImpl
getChild, getChildCount, getEndPosition, getObjectClass, getPreviousChild, getStartPosition, getTypedValue, getValue, getValue, nextChildIs
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

cachedReadName

private java.lang.String cachedReadName

cachedReadTargetType

private java.lang.Class<?> cachedReadTargetType

cachedReadAccessor

private PropertyAccessor cachedReadAccessor

cachedWriteName

private java.lang.String cachedWriteName

cachedWriteTargetType

private java.lang.Class<?> cachedWriteTargetType

cachedWriteAccessor

private PropertyAccessor cachedWriteAccessor
Constructor Detail

Indexer

public Indexer(int pos,
               SpelNodeImpl expr)
Method Detail

getValueInternal

public TypedValue getValueInternal(ExpressionState state)
                            throws EvaluationException
Specified by:
getValueInternal in class SpelNodeImpl
Throws:
EvaluationException

isWritable

public boolean isWritable(ExpressionState expressionState)
                   throws SpelEvaluationException
Description copied from interface: SpelNode
Determine if this expression node will support a setValue() call.

Specified by:
isWritable in interface SpelNode
Overrides:
isWritable in class SpelNodeImpl
Parameters:
expressionState - the current expression state (includes the context)
Returns:
true if the expression node will allow setValue()
Throws:
SpelEvaluationException

setValue

public void setValue(ExpressionState state,
                     java.lang.Object newValue)
              throws EvaluationException
Description copied from interface: SpelNode
Evaluate the expression to a node and then set the new value on that node. For example, if the expression evaluates to a property reference then the property will be set to the new value.

Specified by:
setValue in interface SpelNode
Overrides:
setValue in class SpelNodeImpl
Parameters:
state - the current expression state (includes the context)
newValue - the new value
Throws:
EvaluationException - if any problem occurs evaluating the expression or setting the new value

growCollection

private boolean growCollection(ExpressionState state,
                               TypeDescriptor targetType,
                               int index,
                               java.util.Collection collection)
Attempt to grow the specified collection so that the specified index is valid.

Parameters:
state - the expression state
elementType - the type of the elements in the collection
index - the index into the collection that needs to be valid
collection - the collection to grow with elements
Returns:
true if collection growing succeeded, otherwise false

toStringAST

public java.lang.String toStringAST()
Specified by:
toStringAST in interface SpelNode
Specified by:
toStringAST in class SpelNodeImpl
Returns:
the string form of this AST node

setArrayElement

private void setArrayElement(ExpressionState state,
                             java.lang.Object ctx,
                             int idx,
                             java.lang.Object newValue,
                             java.lang.Class clazz)
                      throws EvaluationException
Throws:
EvaluationException

accessArrayElement

private java.lang.Object accessArrayElement(java.lang.Object ctx,
                                            int idx)
                                     throws SpelEvaluationException
Throws:
SpelEvaluationException

checkAccess

private void checkAccess(int arrayLength,
                         int index)
                  throws SpelEvaluationException
Throws:
SpelEvaluationException