protected UserGroup importUserGroup(
      long companyId, Attributes attributes, Properties groupMappings) throws Exception {

    AttributesTransformer attributesTransformer = AttributesTransformerFactory.getInstance();

    attributes = attributesTransformer.transformGroup(attributes);

    LDAPGroup ldapGroup =
        _ldapToPortalConverter.importLDAPGroup(companyId, attributes, groupMappings);

    UserGroup userGroup = null;

    try {
      userGroup = UserGroupLocalServiceUtil.getUserGroup(companyId, ldapGroup.getGroupName());

      UserGroupLocalServiceUtil.updateUserGroup(
          companyId,
          userGroup.getUserGroupId(),
          ldapGroup.getGroupName(),
          ldapGroup.getDescription());
    } catch (NoSuchUserGroupException nsuge) {
      if (_log.isDebugEnabled()) {
        _log.debug("Adding user group to portal " + ldapGroup.getGroupName());
      }

      long defaultUserId = UserLocalServiceUtil.getDefaultUserId(companyId);

      LDAPUserGroupTransactionThreadLocal.setOriginatesFromLDAP(true);

      try {
        userGroup =
            UserGroupLocalServiceUtil.addUserGroup(
                defaultUserId, companyId, ldapGroup.getGroupName(), ldapGroup.getDescription());
      } catch (Exception e) {
        if (_log.isWarnEnabled()) {
          _log.warn("Unable to create user group " + ldapGroup.getGroupName());
        }

        if (_log.isDebugEnabled()) {
          _log.debug(e, e);
        }
      } finally {
        LDAPUserGroupTransactionThreadLocal.setOriginatesFromLDAP(false);
      }
    }

    addRole(companyId, ldapGroup, userGroup);

    return userGroup;
  }
  protected void addRole(long companyId, LDAPGroup ldapGroup, UserGroup userGroup)
      throws Exception {

    if (!PropsValues.LDAP_IMPORT_CREATE_ROLE_PER_GROUP) {
      return;
    }

    Role role = null;

    try {
      role = RoleLocalServiceUtil.getRole(companyId, ldapGroup.getGroupName());
    } catch (NoSuchRoleException nsre) {
      User defaultUser = UserLocalServiceUtil.getDefaultUser(companyId);

      Map<Locale, String> descriptionMap = new HashMap<Locale, String>();

      descriptionMap.put(LocaleUtil.getDefault(), "Autogenerated role from LDAP import");

      role =
          RoleLocalServiceUtil.addRole(
              defaultUser.getUserId(),
              companyId,
              ldapGroup.getGroupName(),
              null,
              descriptionMap,
              RoleConstants.TYPE_REGULAR);
    }

    Group group = userGroup.getGroup();

    if (GroupLocalServiceUtil.hasRoleGroup(role.getRoleId(), group.getGroupId())) {

      return;
    }

    GroupLocalServiceUtil.addRoleGroups(role.getRoleId(), new long[] {group.getGroupId()});
  }