docs: protected void internalUpdateRoleGroup(CmsDbContext dbc, String groupName, CmsRole role)
      throws CmsDataAccessException {
  
          if (LOG.isDebugEnabled()) {
              LOG.debug(
                  Messages.get().getBundle().key(Messages.LOG_DBG_UPDATE_ROLEGROUP_2, role.getRoleName(), groupName));
          }
  
          CmsGroup group = readGroup(dbc, groupName);
          if ((CmsRole.valueOf(group) == null) || !CmsRole.valueOf(group).equals(role)) {
              CmsGroup roleGroup = readGroup(dbc, role.getGroupName());
  
              if (LOG.isDebugEnabled()) {
                  LOG.debug(Messages.get().getBundle().key(Messages.LOG_DBG_UPDATE_ROLEGROUP_1, roleGroup));
              }
  
              // copy all users from the group to the role
              Iterator<CmsUser> it;
              try {
                  // read all users, also indirect assigned
                  it = m_driverManager.getUsersOfGroup(dbc, groupName, false, false, false).iterator();
              } catch (CmsException e) {
                  // should never happen
                  LOG.error(e.getLocalizedMessage(), e);
                  // read only direct assigned users
                  it = readUsersOfGroup(dbc, groupName, false).iterator();
              }
              while (it.hasNext()) {
                  CmsUser user = it.next();
  
                  if (LOG.isDebugEnabled()) {
                      LOG.debug(Messages.get().getBundle().key(Messages.LOG_DBG_UPDATE_ROLEGROUP_USER_1, user));
                  }
                  createUserInGroup(dbc, user.getId(), roleGroup.getId());
              }
              // set the right flags
              group.setFlags(role.getVirtualGroupFlags());
              try {
                  writeGroup(dbc, group);
              } catch (Exception e) {
                  LOG.error("Could not write group flags in internalUpdateRoleGroup: " + e.getLocalizedMessage(), e);
              }
          }
      }