/**
   * すべてのユーザーリストを取得
   *
   * @return
   */
  public static List<UserModel> getAllUserList() {
    List<UserModel> userList = Memcache.get(ALL_USER_LIST);
    if (Utils.isNotEmpty(userList)) return userList;

    userList = userModelDao.getAllUserList();
    if (Utils.isNotEmpty(userList)) Memcache.put(ALL_USER_LIST, userList);

    return userList;
  }
  /**
   * グループのユーザーリストを取得
   *
   * @param groupId
   * @return
   */
  public static List<UserModel> getGroupUserList(int groupId) {

    List<UserModel> userList = Memcache.get(getGroupUserListMemcache(groupId));
    if (Utils.isNotEmpty(userList)) return userList;

    userList = userModelDao.getGroupUserList(groupId);
    if (Utils.isNotEmpty(userList)) Memcache.put(getGroupUserListMemcache(groupId), userList);

    return userList == null ? new ArrayList<UserModel>() : userList;
  }
  /**
   * ユーザーリストを取得
   *
   * @return
   */
  public static S3QueryResultList<UserModel> getUserList(String cursor) {

    S3QueryResultList<UserModel> list = null;

    // 最初のページをキャッシュする
    if (StringUtil.isEmpty(cursor)) {
      // Memcache に存在した場合はMemcache内のmodelを返す
      list = Memcache.get(USER_LIST_FIRST_30);
      if (Utils.isNotEmpty(list)) return list;

      // DBから取得し、存在した場合はMemcacheに入れる
      list = userModelDao.getUserList(Constants.SERVICE_USER_LIST_LIMIT_NUM);
      if (Utils.isNotEmpty(list)) Memcache.put(USER_LIST_FIRST_30, list);

    } else {
      list = userModelDao.getUserList(Constants.SERVICE_USER_LIST_LIMIT_NUM, cursor);
    }

    return list == null
        ? new S3QueryResultList<UserModel>(new ArrayList<UserModel>(), null, null, null, false)
        : list;
  }
  /**
   * Twitterの取得
   *
   * @throws IOException
   */
  private String getMessage(ActivityModel activityModel, String shortUrl) throws Exception {

    String twitterMessage = null;

    // 再共有の場合
    if (activityModel.getVerb().getCategory().equals(Constants.GOOGLE_ACTIVITY_VERB_TYPE_SHARE)) {
      // 追加コメントが存在しない場合
      if (activityModel.getAnnotationString() == null) {

        // タイトルが存在しない場合
        if (activityModel.getTitleString() == null) {
          return "[ #PluCial " + shortUrl + " ]";

          // タイトル存在する場合
        } else {
          twitterMessage = activityModel.getTitleString();
        }

        // 追加コメントが存在する場合
      } else {
        twitterMessage = activityModel.getAnnotationString();
      }

      // 通常投稿の場合
    } else {
      // タイトルが存在しない場合
      if (activityModel.getTitleString() == null) {

        // 添付コンテンツのタイトルが存在しない場合
        if (activityModel.getAttachmentsDisplayNameString() == null) {
          return "[ #PluCial " + shortUrl + " ]";

          // 添付コンテンツのタイトルが存在する場合
        } else {
          twitterMessage = activityModel.getAttachmentsDisplayNameString();
        }

        // タイトル存在する場合
      } else {
        twitterMessage = activityModel.getTitleString();
      }
    }

    if (twitterMessage == null) {
      return "[ #PluCial " + shortUrl + " ]";
    } else {
      // リンクタグを削除
      twitterMessage = Utils.removeLinkTags(twitterMessage);
      // 太文字を削除
      twitterMessage = Utils.removeBTags(twitterMessage);

      // 改行の変換
      twitterMessage = twitterMessage.replace("<br>", "\n");
      // spanタグを削除
      twitterMessage = Utils.removeSpanTags(twitterMessage);
    }

    String lastString = ("\n[ #PluCial " + shortUrl + " ]");
    int limit_num = 100;

    // 画像の場合はTwitterメディア分の23文字を減らす
    if (activityModel.getAttachmentsType() != null
        && (activityModel
                .getAttachmentsType()
                .getCategory()
                .equals(Constants.GOOGLE_ACTIVITY_ATTACHMENTS_TYPE_PHOTO)
            || activityModel
                .getAttachmentsType()
                .getCategory()
                .equals(Constants.GOOGLE_ACTIVITY_ATTACHMENTS_TYPE_ALBUM))
        && activityModel.getVerb().getCategory().equals(Constants.GOOGLE_ACTIVITY_VERB_TYPE_POST)) {
      limit_num = limit_num - 23;
    }

    // ドメイン分 の 23文字を削減
    int domainCount = getDomainCount(twitterMessage);
    limit_num = limit_num - (domainCount * 23);
    // URL複数含まれる投稿はマイナスになる可能性がある
    if (limit_num < 0) return "[ #PluCial " + shortUrl + " ]";

    // タイトルの文字数が問題ない場合
    if (twitterMessage.length() <= limit_num) return twitterMessage + lastString;

    // タイトルの文字数が制限オーバーの場合
    String message = twitterMessage.substring(0, limit_num - 3) + "...";
    return message + lastString;
  }