@Override
  public void restoreThreadFromTrash(long userId, long threadId) throws PortalException {

    // Thread

    MBThread thread = getThread(threadId);

    if (thread.getCategoryId() == MBCategoryConstants.DISCUSSION_CATEGORY_ID) {

      return;
    }

    TrashEntry trashEntry = trashEntryLocalService.getEntry(MBThread.class.getName(), threadId);

    updateStatus(userId, threadId, trashEntry.getStatus());

    // Messages

    restoreDependentsFromTrash(thread.getGroupId(), threadId);

    // Trash

    trashEntryLocalService.deleteEntry(trashEntry.getEntryId());

    // Social

    MBMessage message = mbMessageLocalService.getMBMessage(thread.getRootMessageId());

    JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();

    extraDataJSONObject.put("rootMessageId", thread.getRootMessageId());
    extraDataJSONObject.put("title", message.getSubject());

    SocialActivityManagerUtil.addActivity(
        userId,
        thread,
        SocialActivityConstants.TYPE_RESTORE_FROM_TRASH,
        extraDataJSONObject.toString(),
        0);
  }