in src/main/java/org/apache/commons/ognl/ArrayPropertyAccessor.java [36:89]
public Object getProperty( Map<String, Object> context, Object target, Object name )
throws OgnlException
{
Object result = null;
if ( name instanceof String )
{
if ( "length".equals( name ) )
{
result = Array.getLength( target );
}
else
{
result = super.getProperty( context, target, name );
}
}
else
{
Object index = name;
if ( index instanceof DynamicSubscript )
{
int len = Array.getLength( target );
switch ( ( (DynamicSubscript) index ).getFlag() )
{
case DynamicSubscript.ALL:
result = Array.newInstance( target.getClass().getComponentType(), len );
System.arraycopy( target, 0, result, 0, len );
break;
case DynamicSubscript.FIRST:
index = ( len > 0 ) ? 0 : -1;
break;
case DynamicSubscript.MID:
index = ( len > 0 ) ? ( len / 2 ) : -1;
break;
case DynamicSubscript.LAST:
index = ( len > 0 ) ? ( len - 1 ) : -1;
break;
default: break;
}
}
if ( result == null )
{
if ( !(index instanceof Number) ) {
throw new NoSuchPropertyException( target, index );
}
int i = ( (Number) index ).intValue();
result = ( i >= 0 ) ? Array.get( target, i ) : null;
}
}
return result;
}