public IEnumerable <UserMailbox> GetUnseenMembers(GroupMailboxLocator group, IEnumerable <UserMailboxLocator> users)
        {
            IEnumerable <UserMailbox> result;

            using (IAssociationStore associationStore = this.storeProviderBuilder.Create(group, this.PerformanceTracker))
            {
                UnseenDataUserAssociationAdaptor        adaptor = new UnseenDataUserAssociationAdaptor(associationStore, this.adSession, group);
                GetMembershipAssociations               getMembershipAssociations = new GetMembershipAssociations(adaptor);
                IEnumerable <MailboxAssociation>        enumerable = getMembershipAssociations.Execute(null);
                Dictionary <string, MailboxAssociation> dictionary = new Dictionary <string, MailboxAssociation>(enumerable.Count <MailboxAssociation>());
                foreach (MailboxAssociation mailboxAssociation in enumerable)
                {
                    if (string.IsNullOrEmpty(mailboxAssociation.User.ExternalId))
                    {
                        GroupMailboxAccessLayer.LogWarning(this.Logger, "GetUnseenMembers", string.Format("External Id is null or empty. LegacyDn - {0}", mailboxAssociation.User.LegacyDn));
                    }
                    else if (dictionary.ContainsKey(mailboxAssociation.User.ExternalId))
                    {
                        GroupMailboxAccessLayer.LogWarning(this.Logger, "GetUnseenMembers", string.Format("Duplicate External Id. ExternalId - {0}. LegacyDn - {1}", mailboxAssociation.User.ExternalId, mailboxAssociation.User.LegacyDn));
                    }
                    else
                    {
                        dictionary.Add(mailboxAssociation.User.ExternalId, mailboxAssociation);
                    }
                }
                List <UserMailbox> list = new List <UserMailbox>();
                foreach (UserMailboxLocator userMailboxLocator in users)
                {
                    MailboxAssociation association = null;
                    if (!dictionary.TryGetValue(userMailboxLocator.ExternalId, out association))
                    {
                        association = this.CreateMailboxAssociationWithDefaultValues(userMailboxLocator, group);
                    }
                    UserMailboxBuilder userMailboxBuilder = new UserMailboxBuilder(userMailboxLocator, null);
                    list.Add(userMailboxBuilder.BuildFromAssociation(association).Mailbox);
                }
                result = list;
            }
            return(result);
        }
 public static void Execute(string operationDescription, IRecipientSession adSession, Guid logCorrelationMailboxGuid, OrganizationId organizationId, string clientInfoString, Action <GroupMailboxAccessLayer> action)
 {
     GroupMailboxAccessLayer.InternalExecute(operationDescription, adSession, null, logCorrelationMailboxGuid, organizationId, clientInfoString, action);
 }
 public static void Execute(string operationDescription, IRecipientSession adSession, MailboxSession localStoreSession, Action <GroupMailboxAccessLayer> action)
 {
     ArgumentValidator.ThrowIfNull("localStoreSession", localStoreSession);
     GroupMailboxAccessLayer.InternalExecute(operationDescription, adSession, localStoreSession, localStoreSession.MailboxGuid, localStoreSession.OrganizationId, localStoreSession.ClientInfoString, action);
 }