Ejemplo n.º 1
0
        internal static MasterMailboxType CreateMasterMailboxData(IMailboxLocator master)
        {
            ArgumentValidator.ThrowIfNull("master", master);
            ADUser            aduser            = master.FindAdUser();
            MasterMailboxType masterMailboxType = new MasterMailboxType
            {
                Alias       = aduser.Alias,
                DisplayName = aduser.DisplayName,
                SmtpAddress = aduser.PrimarySmtpAddress.ToString(),
                MailboxType = master.LocatorType
            };
            GroupMailboxLocator groupMailboxLocator = master as GroupMailboxLocator;

            if (groupMailboxLocator != null)
            {
                MailboxUrls mailboxUrls = new MailboxUrls(ExchangePrincipal.FromADUser(aduser, RemotingOptions.AllowCrossSite), false);
                masterMailboxType.GroupType          = EwsAssociationDataConverter.Convert(groupMailboxLocator.GetGroupType());
                masterMailboxType.GroupTypeSpecified = true;
                masterMailboxType.Description        = ((aduser.Description != null && aduser.Description.Count > 0) ? aduser.Description[0] : string.Empty);
                masterMailboxType.Photo            = groupMailboxLocator.GetThumbnailPhoto();
                masterMailboxType.SharePointUrl    = ((aduser.SharePointUrl != null) ? aduser.SharePointUrl.ToString() : string.Empty);
                masterMailboxType.InboxUrl         = mailboxUrls.InboxUrl;
                masterMailboxType.CalendarUrl      = mailboxUrls.CalendarUrl;
                masterMailboxType.DomainController = aduser.OriginatingServer;
            }
            return(masterMailboxType);
        }
        public void UpdateSlaveDataFromMailboxAssociation(MasterMailboxType masterMailboxData, MailboxAssociationType associationType)
        {
            GroupMailboxAccessLayer.Tracer.TraceDebug <MasterMailboxType, MailboxAssociationType>((long)this.GetHashCode(), "GroupMailboxAccessLayer::UpdateSlaveDataFromMailboxAssociation. Replicating data from mailbox: {0}. Association data: {1}", masterMailboxData, associationType);
            if (masterMailboxData.MailboxType != UserMailboxLocator.MailboxLocatorType && masterMailboxData.MailboxType != GroupMailboxLocator.MailboxLocatorType)
            {
                throw new InvalidOperationException("UpdateSlaveDataFromMailboxAssociation: Invalid MasterMailboxType");
            }
            MailboxAssociation mailboxAssociation = EwsAssociationDataConverter.Convert(associationType, this.adSession);
            IMailboxLocator    mailboxLocator;

            if (!(masterMailboxData.MailboxType == GroupMailboxLocator.MailboxLocatorType))
            {
                IMailboxLocator group = mailboxAssociation.Group;
                mailboxLocator = group;
            }
            else
            {
                mailboxLocator = mailboxAssociation.User;
            }
            IMailboxLocator targetMailbox = mailboxLocator;

            using (IAssociationStore associationStore = this.storeProviderBuilder.Create(targetMailbox, this.PerformanceTracker))
            {
                this.LogCommandExecution("UpdateSlaveDataFromMailboxAssociation", mailboxAssociation.Group, new UserMailboxLocator[]
                {
                    mailboxAssociation.User
                });
                BaseAssociationAdaptor baseAssociationAdaptor = (masterMailboxData.MailboxType == GroupMailboxLocator.MailboxLocatorType) ? new GroupAssociationAdaptor(associationStore, this.adSession, mailboxAssociation.User) : new UserAssociationAdaptor(associationStore, this.adSession, mailboxAssociation.Group);
                baseAssociationAdaptor.UseAlternateLocatorLookup = true;
                baseAssociationAdaptor.MasterMailboxData         = masterMailboxData;
                baseAssociationAdaptor.ReplicateAssociation(mailboxAssociation);
                if (masterMailboxData.MailboxType == GroupMailboxLocator.MailboxLocatorType && mailboxAssociation.IsMember)
                {
                    TimeSpan latency = ExDateTime.UtcNow - mailboxAssociation.JoinDate;
                    this.LogPerformanceCounter(MailboxAssociationLogSchema.PerformanceCounterName.JoinGroupAssociationReplication, latency, "Group={0}, User={1}", new object[]
                    {
                        mailboxAssociation.Group.ExternalId,
                        mailboxAssociation.User.ExternalId
                    });
                }
            }
        }