@Override
  public Message execute(ActionContext context, C2341_TitleListSelfReqMessage reqMsg) {
    RoleInstance role = this.getCurrentRole(context);
    if (null == role) {
      return null;
    }
    C2341_TitleListSelfRespMessage respMsg = new C2341_TitleListSelfRespMessage();
    Map<Integer, TitleRecord> titleMap = role.getTitleMap();
    if (Util.isEmpty(titleMap)) {
      return respMsg;
    }
    int titleNum = titleMap.size();

    Map<Integer, TitleCategory> categoryMap = GameContext.getTitleApp().getTitleCategoryMap();
    if (Util.isEmpty(categoryMap)) {
      return respMsg;
    }

    int titleNowNum = 0;
    List<TitleCategoryItem> itemList = new ArrayList<TitleCategoryItem>();
    for (TitleCategory c : categoryMap.values()) {
      List<GoodsTitle> titleList = c.getTitleList();
      if (Util.isEmpty(titleList)) {
        continue;
      }
      TitleCategoryItem citem = null;
      for (GoodsTitle title : titleList) {
        int titleId = title.getId();
        TitleRecord record = titleMap.get(titleId);
        if (null == record) {
          continue;
        }
        if (null == citem) {
          citem = new TitleCategoryItem();
          citem.setCategoryName(c.getCategoryName());
        }
        TitleItem titleItem = new TitleItem();
        titleItem.setTitleId(titleId);
        titleItem.setTitleName(title.getName());
        titleItem.setStatus(record.getActivateState());
        citem.getTitles().add(titleItem);
        titleNowNum++;
        // 提前结束循环
        if (titleNowNum >= titleNum) {
          break;
        }
      }
      if (null != citem) {
        itemList.add(citem);
      }
      // 提前结束循环
      if (titleNowNum >= titleNum) {
        break;
      }
    }
    respMsg.setItemList(itemList);
    return respMsg;
  }