code: public static Object getPropertyValue( final Object root, final String... properties ) {
  
  
  
          Object object = root;
  
  
  
          for ( String property : properties ) {
  
              if (object == null) {
                  return null;
              }
  
              if (property.equals("this")) {
                  if (!(object instanceof Map)) {
                      continue;
                  } else {
                      Object aThis = ((Map) object).get("this");
                      if (aThis!=null) {
                          object = aThis;
                          continue;
                      } else {
                          continue;
                      }
                  }
              }
  
              if (object instanceof Map) {
                  object = ((Map) object).get(property);
                  continue;
              }
  
  
              char c = property.charAt(0);
              if ( CharScanner.isDigit(c) ) {
                  /* We can index numbers and names. */
                  object = idx ( object, StringScanner.parseInt ( property ) );
  
              } else {
  
  
                  if (object instanceof Collection) {
  
                      object = _getFieldValuesFromCollectionOrArray( object, property);
                      continue;
                  } else if (isArray(object)) {
  
  
                      Iterator iter = Conversions.iterator(object);
                      List list = Lists.list(iter);
                      object = _getFieldValuesFromCollectionOrArray(list, property);
  
                      continue;
                  }
  
  
                  Map<String, FieldAccess> fields =
                           getPropertyFieldAccessMap( object.getClass() );
  
                  FieldAccess field = fields.get( property );
  
                  if ( field == null ) {
                      return null;
                  }
  
                  object = field.getValue( object );
              }
          }
          return object;
      }
docs: Get property value, loads nested properties
  
  @param root root
  @param properties properties forming a path
  @return value at path