public Object getProperty()

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;
    }