code: @Nonnull
    public EChange undeleteUser (@Nullable final String sUserID)
    {
      final User aUser = getOfID (sUserID);
      if (aUser == null)
      {
        AuditHelper.onAuditUndeleteFailure (User.OT, sUserID, "no-such-user-id");
        return EChange.UNCHANGED;
      }
  
      m_aRWLock.writeLock ().lock ();
      try
      {
        if (BusinessObjectHelper.setUndeletionNow (aUser).isUnchanged ())
          return EChange.UNCHANGED;
        internalMarkItemUndeleted (aUser);
      }
      finally
      {
        m_aRWLock.writeLock ().unlock ();
      }
      AuditHelper.onAuditUndeleteSuccess (User.OT, sUserID);
  
      // Execute callback as the very last action
      m_aCallbacks.forEach (aCB -> aCB.onUserUndeleted (aUser));
  
      return EChange.CHANGED;
    }
docs: Undelete the user with the specified ID.
  
  @param sUserID
  The ID of the user to undelete
  @return {@link EChange#CHANGED} if the user was undeleted,
  {@link EChange#UNCHANGED} otherwise.