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 }); } } }