/**
   * Deletes the user group.
   *
   * @param userGroup the user group
   * @return the deleted user group
   */
  @Override
  @SystemEvent(action = SystemEventConstants.ACTION_SKIP, type = SystemEventConstants.TYPE_DELETE)
  public UserGroup deleteUserGroup(UserGroup userGroup) throws PortalException {

    if (!CompanyThreadLocal.isDeleteInProcess()) {
      int count =
          userLocalService.getUserGroupUsersCount(
              userGroup.getUserGroupId(), WorkflowConstants.STATUS_APPROVED);

      if (count > 0) {
        throw new RequiredUserGroupException();
      }
    }

    // Expando

    expandoRowLocalService.deleteRows(userGroup.getUserGroupId());

    // Group

    Group group = userGroup.getGroup();

    groupLocalService.deleteGroup(group);

    // User group roles

    userGroupGroupRoleLocalService.deleteUserGroupGroupRolesByUserGroupId(
        userGroup.getUserGroupId());

    // Resources

    resourceLocalService.deleteResource(
        userGroup.getCompanyId(),
        UserGroup.class.getName(),
        ResourceConstants.SCOPE_INDIVIDUAL,
        userGroup.getUserGroupId());

    // User group

    userGroupPersistence.remove(userGroup);

    // Permission cache

    PermissionCacheUtil.clearCache();

    return userGroup;
  }