/**
   * Note: Does test for plural form of fieldName, e.g. when the field is a collection
   *
   * @param objClass
   * @param fieldName
   * @return
   */
  public static boolean isFieldACollection(Class objClass, String fieldName) {

    boolean isCollection = false;

    Class fieldClass;

    Field field = ReflectionHelper.findField(objClass, fieldName);

    if (field != null) {

      fieldClass = field.getType();

      if (isCollection(fieldClass)) {

        isCollection = true;
      }
    }

    return isCollection;
  }
  /**
   * Given an object, its class and the name of a field on that object, try to deduce the field's
   * Class. Note: Does test for plural form of fieldName, e.g. when the field is a collection
   *
   * @param obj
   * @param fieldName
   * @return
   */
  public static Class determineClass(Object obj, Class objClass, String fieldName)
      throws ToolkitException {

    Class fieldClass;

    Field field = ReflectionHelper.findField(objClass, fieldName);

    if (field != null) {

      fieldClass = field.getType();

      if (Collection.class.isAssignableFrom(fieldClass)) {

        // This is why we require an indexed getter for our collections so we can determine the
        // return type
        Method method = findMethod(objClass, "get" + fieldName, int.class);

        if (method != null) {

          fieldClass = method.getReturnType();

        } else {

          throw new ToolkitException(
              "Can not determine class of Collection field '"
                  + fieldName
                  + "' in "
                  + obj.getClass().getName()
                  + "; perhaps there is no indexed getter?");
        }
      }

    } else {

      throw new ToolkitException(
          "No such field '" + fieldName + "' in " + obj.getClass().getName());
    }

    return fieldClass;
  }