docs: @Nonnull
    public EChange undeleteUserGroup (@Nullable final String sUserGroupID)
    {
      final UserGroup aUserGroup = getOfID (sUserGroupID);
      if (aUserGroup == null)
      {
        AuditHelper.onAuditUndeleteFailure (UserGroup.OT, sUserGroupID, "no-such-id");
        return EChange.UNCHANGED;
      }
  
      m_aRWLock.writeLock ().lock ();
      try
      {
        if (BusinessObjectHelper.setUndeletionNow (aUserGroup).isUnchanged ())
          return EChange.UNCHANGED;
        internalMarkItemUndeleted (aUserGroup);
      }
      finally
      {
        m_aRWLock.writeLock ().unlock ();
      }
      AuditHelper.onAuditUndeleteSuccess (UserGroup.OT, sUserGroupID);
  
      // Execute callback as the very last action
      m_aCallbacks.forEach (aCB -> aCB.onUserGroupUndeleted (aUserGroup));
  
      return EChange.CHANGED;
    }