private void GetMemberChangesFromCSEntryChange(CSEntryChange csentry, out GroupMembership adds, out GroupMembership deletes, out GroupMembership reportedAdds, out GroupMembership reportedDeletes, out IList <Member> roleChanges, bool replacing) { adds = new GroupMembership(); deletes = new GroupMembership(); reportedAdds = new GroupMembership(); reportedDeletes = new GroupMembership(); roleChanges = new List <Member>(); GroupMembership existingGroupMembership; bool hasExistingMembership = false; if (replacing | this.ExistingMembershipRequiredForUpdate(csentry)) { existingGroupMembership = this.config.GroupsService.MemberFactory.GetMembership(csentry.DN); hasExistingMembership = true; } else { existingGroupMembership = new GroupMembership(); } this.GetMemberChangesFromCSEntryChange(csentry, adds.Members, deletes.Members, existingGroupMembership.Members, this.config.GroupMemberAttributeName, replacing); this.GetMemberChangesFromCSEntryChange(csentry, adds.ExternalMembers, deletes.ExternalMembers, existingGroupMembership.ExternalMembers, "externalMember", replacing); this.GetMemberChangesFromCSEntryChange(csentry, adds.Managers, deletes.Managers, existingGroupMembership.Managers, this.config.GroupManagerAttributeName, replacing); this.GetMemberChangesFromCSEntryChange(csentry, adds.ExternalManagers, deletes.ExternalManagers, existingGroupMembership.ExternalManagers, "externalManager", replacing); this.GetMemberChangesFromCSEntryChange(csentry, adds.Owners, deletes.Owners, existingGroupMembership.Owners, this.config.GroupOwnerAttributeName, replacing); this.GetMemberChangesFromCSEntryChange(csentry, adds.ExternalOwners, deletes.ExternalOwners, existingGroupMembership.ExternalOwners, "externalOwner", replacing); if (hasExistingMembership && this.config.InheritGroupRoles) { this.ApplyRoleChanges(adds, deletes, out reportedAdds, out reportedDeletes, out roleChanges); } reportedAdds.MergeMembership(adds); reportedDeletes.MergeMembership(deletes); }