public String getPositionAndAffiliationString(int limit, int additionalLength, String tail) {
    if (null == tail) {
      tail = "...";
    }
    StringBuilder sb = new StringBuilder();
    if (!Strings.isEmpty(this.get_sPosition())) {
      sb.append(this.get_sPosition());
    }
    if (!Strings.isEmpty(this.get_sPosition()) && !Strings.isEmpty(this.get_sAffiliation())) {
      sb.append(", ");
    }
    if (!Strings.isEmpty(this.get_sAffiliation())) {
      sb.append(this.get_sAffiliation());
    }
    int max = limit - additionalLength;

    // capitalize
    if (sb.length() > 0) {
      sb.replace(0, 1, new Character(sb.charAt(0)).toString().toUpperCase());
    }

    String result = null;
    if (sb.length() > max) {
      result = sb.substring(0, max) + tail;
    } else {
      result = sb.toString();
    }
    return result;
  }
  /**
   * 专家的Image地址由好多,这里按优先顺序取得人物头像地址。
   *
   * @param imgType IMG_SIZE_ORI 原图,小图和中图。 @TODO Move this out.
   */
  public String getDisplayImage(int imgType) {
    // FIXME can't different self upload image and downloaded image. ugly
    // code.
    // --user upload picture.

    if (null != this._sImgURL) {
      String trimed = this._sImgURL.trim();
      if (trimed.startsWith("http://")
          && trimed.contains("arnetminer")
          && trimed.contains("/upload/")) {
        return _sImgURL;
      }
    }
    if (!Strings.isEmpty(imgName)) {
      if (imgName.toLowerCase().startsWith("http")) {
        // special, replace to new imgname;
        if (imgName.startsWith("http://arnetminer.org/pictures")) {
          return PageSpeedUtil.smartAppendPicturePrefix(
              imgName.replace("http://arnetminer.org/pictures", ""));
        }
        return imgName;
      }
      if (imgType == IMG_SIZE_SMALL) {
        return PageSpeedUtil.smartAppendPicturePrefix(res.picture_thumbnail + imgName);
      } else if (imgType == IMG_SIZE_MEDIUM) {
        return PageSpeedUtil.smartAppendPicturePrefix(res.picture_original + imgName);
      } else {
        return PageSpeedUtil.smartAppendPicturePrefix(res.picture_original + imgName);
      }
    } else if (!Strings.isEmpty(_sImgURL)
        && (_sImgURL.startsWith("http") || _sImgURL.startsWith("ftp"))) {
      return _sImgURL;
    } else if (!Strings.isEmpty(_sImgSrc)
        && (_sImgSrc.startsWith("http") || _sImgSrc.startsWith("ftp"))) { // deprecated
      return _sImgSrc;
    } else {
      return res.picture_url + res.picture_nopicture;
    }
  }