@SuppressWarnings("unchecked")
  public static boolean handleFormException(FormPanel form, Throwable caught) {

    boolean isWarning = false;
    if (caught instanceof GwtKuraException) {

      List<Field<?>> fields = form.getFields();
      GwtKuraException gee = (GwtKuraException) caught;
      GwtKuraErrorCode code = gee.getCode();
      switch (code) {
        case DUPLICATE_NAME:
          boolean fieldFound = false;
          String duplicateFieldName = gee.getArguments()[0];
          for (Field<?> field : fields) {
            if (duplicateFieldName.equals(field.getName())) {
              TextField<String> textField = (TextField<String>) field;
              textField.markInvalid(MSGS.duplicateValue());
              fieldFound = true;
              break;
            }
          }
          if (!fieldFound) {
            Info.display(CMSGS.error(), caught.getLocalizedMessage());
          }
          break;

        case ILLEGAL_NULL_ARGUMENT:
          String invalidFieldName = gee.getArguments()[0];
          for (Field<?> field : fields) {
            if (invalidFieldName.equals(field.getName())) {
              TextField<String> textField = (TextField<String>) field;
              textField.markInvalid(MSGS.invalidNullValue());
              break;
            }
          }
          break;

        case ILLEGAL_ARGUMENT:
          String invalidFieldName1 = gee.getArguments()[0];
          for (Field<?> field : fields) {
            if (invalidFieldName1.equals(field.getName())) {
              TextField<String> textField = (TextField<String>) field;
              textField.markInvalid(gee.getCause().getMessage());
              break;
            }
          }
          break;

        case INVALID_RULE_QUERY:
          for (Field<?> field : fields) {
            if ("query".equals(field.getName())) {
              TextArea statement = (TextArea) field;
              statement.markInvalid(caught.getLocalizedMessage());
              break;
            }
          }
          break;

        case WARNING:
          isWarning = true;
          Info.display(CMSGS.warning(), caught.getLocalizedMessage());
          break;

        default:
          Info.display(CMSGS.error(), caught.getLocalizedMessage());
          caught.printStackTrace();
          break;
      }
    } else {

      Info.display(CMSGS.error(), caught.getLocalizedMessage());
      caught.printStackTrace();
    }

    return isWarning;
  }