コード例 #1
0
 private void SaveAssociationInternal(MailboxAssociation association, bool incrementReplicationVersion, Action <MailboxAssociation, IMailboxAssociationBaseItem> updateFunction)
 {
     ArgumentValidator.ThrowIfNull("association", association);
     ArgumentValidator.ThrowIfNull("updateFunction", updateFunction);
     using (IMailboxAssociationBaseItem mailboxAssociationBaseItem = this.ReadOrCreateMailboxItem(association))
     {
         bool isMember = mailboxAssociationBaseItem.IsMember;
         updateFunction(association, mailboxAssociationBaseItem);
         if (incrementReplicationVersion)
         {
             this.Tracer.TraceDebug <MailboxAssociation>((long)this.GetHashCode(), "BaseAssociationAdaptor.SaveAssociationInternal. Incrementing CurrentVersion of the association item. Association = {0}", association);
             mailboxAssociationBaseItem.CurrentVersion++;
             association.CurrentVersion++;
         }
         else
         {
             this.Tracer.TraceDebug <MailboxAssociation>((long)this.GetHashCode(), "BaseAssociationAdaptor.SaveAssociationInternal. Saving association without affecting CurrentVersion of the item. Association = {0}", association);
         }
         this.associationStore.SaveAssociation(mailboxAssociationBaseItem);
         if (!isMember && association.IsMember && this.OnAfterJoin != null)
         {
             this.OnAfterJoin(this.GetSlaveMailboxLocator(association));
         }
     }
 }
コード例 #2
0
        private IMailboxAssociationBaseItem GetItemFromStore(IMailboxLocator locator)
        {
            IMailboxAssociationBaseItem mailboxAssociationBaseItem = null;

            if (!string.IsNullOrEmpty(locator.ExternalId))
            {
                this.Tracer.TraceDebug <IMailboxLocator>((long)this.GetHashCode(), "BaseAssociationAdaptor.GetItemFromStore: Querying item in store by ExternalDirectoryObjectId. Locator={0}.", locator);
                mailboxAssociationBaseItem = this.GetAssociationByIdProperty(MailboxAssociationBaseSchema.ExternalId, new object[]
                {
                    locator.ExternalId
                });
            }
            if (string.IsNullOrEmpty(locator.ExternalId) || (mailboxAssociationBaseItem == null && this.UseAlternateLocatorLookup))
            {
                this.Tracer.TraceDebug <IMailboxLocator>((long)this.GetHashCode(), "BaseAssociationAdaptor.GetItemFromStore: Querying item in store by LegacyExchangeDN. Locator={0}.", locator);
                mailboxAssociationBaseItem = this.GetAssociationByIdProperty(MailboxAssociationBaseSchema.LegacyDN, new object[]
                {
                    locator.LegacyDn
                });
                if (mailboxAssociationBaseItem == null)
                {
                    this.Tracer.TraceDebug <IMailboxLocator>((long)this.GetHashCode(), "BaseAssociationAdaptor.GetItemFromStore: Querying item in store by Alternate LegacyExchangeDN. Locator={0}.", locator);
                    try
                    {
                        string[] idValues = locator.FindAlternateLegacyDNs();
                        mailboxAssociationBaseItem = this.GetAssociationByIdProperty(MailboxAssociationBaseSchema.LegacyDN, idValues);
                    }
                    catch (MailboxNotFoundException arg)
                    {
                        this.Tracer.TraceDebug <IMailboxLocator, MailboxNotFoundException>((long)this.GetHashCode(), "BaseAssociationAdaptor.GetItemFromStore: Couldn't find Alternate Legacy DNs for the locator as the ADObject was not found. Returning NULL item. Locator={0}. Exception={1}", locator, arg);
                    }
                }
            }
            return(mailboxAssociationBaseItem);
        }
コード例 #3
0
        public void OpenAssociationAsReadWrite(IMailboxAssociationBaseItem associationItem)
        {
            ArgumentValidator.ThrowIfNull("associationItem", associationItem);
            this.CheckDisposed("OpenAssociationAsReadWrite");
            MailboxAssociationBaseItem mailboxAssociationBaseItem = (MailboxAssociationBaseItem)associationItem;

            mailboxAssociationBaseItem.OpenAsReadWrite();
        }
コード例 #4
0
        public void DeleteAssociation(IMailboxAssociationBaseItem associationItem)
        {
            ArgumentValidator.ThrowIfNull("associationItem", associationItem);
            this.CheckDisposed("DeleteAssociation");
            MailboxAssociationBaseItem mailboxAssociationBaseItem = (MailboxAssociationBaseItem)associationItem;

            this.DeleteAssociation(mailboxAssociationBaseItem.GetValueOrDefault <VersionedId>(ItemSchema.Id));
        }
コード例 #5
0
        public void SaveAssociation(IMailboxAssociationBaseItem association)
        {
            ArgumentValidator.ThrowIfNull("association", association);
            this.CheckDisposed("SaveAssociation");
            this.performanceTracker.IncrementAssociationsUpdated();
            MailboxAssociationBaseItem mailboxAssociationBaseItem = (MailboxAssociationBaseItem)association;

            mailboxAssociationBaseItem.Save(SaveMode.ResolveConflicts);
        }
コード例 #6
0
        public override MailboxAssociation GetAssociation(VersionedId itemId)
        {
            ArgumentValidator.ThrowIfNull("itemId", itemId);
            MailboxAssociation result = null;

            using (IMailboxAssociationBaseItem associationByItemId = this.GetAssociationByItemId(itemId))
            {
                if (associationByItemId != null)
                {
                    this.Tracer.TraceDebug <VersionedId>((long)this.GetHashCode(), "GroupAssociationAdaptor.GetAssociation: Creating association from store item. itemId={0}", itemId);
                    result = this.CreateMailboxAssociationFromItem(associationByItemId, true);
                }
            }
            return(result);
        }
コード例 #7
0
        private IMailboxAssociationBaseItem ReadOrCreateMailboxItem(MailboxLocator mailboxLocator)
        {
            IMailboxAssociationBaseItem mailboxAssociationBaseItem = this.GetItemFromStore(mailboxLocator);

            if (mailboxAssociationBaseItem != null)
            {
                this.Tracer.TraceDebug <MailboxLocator>((long)this.GetHashCode(), "GroupAssociationAdaptor.ReadOrCreateMailboxItem: Association item found in store, opening for read/write. Locator={0}.", mailboxLocator);
                this.associationStore.OpenAssociationAsReadWrite(mailboxAssociationBaseItem);
            }
            else
            {
                this.Tracer.TraceDebug <MailboxLocator>((long)this.GetHashCode(), "GroupAssociationAdaptor.ReadOrCreateMailboxItem: Association item not found in store, creating new item. Locator={0}.", mailboxLocator);
                mailboxAssociationBaseItem = this.CreateStoreItem(mailboxLocator);
            }
            return(mailboxAssociationBaseItem);
        }
コード例 #8
0
        protected IMailboxAssociationBaseItem ReadOrCreateMailboxItem(MailboxAssociation mailboxAssociation)
        {
            MailboxAssociationFromStore mailboxAssociationFromStore = mailboxAssociation as MailboxAssociationFromStore;

            if (mailboxAssociationFromStore != null)
            {
                this.Tracer.TraceDebug <VersionedId>((long)this.GetHashCode(), "BaseAssociationAdaptor.ReadOrCreateMailboxItem. Binding item using entry id found in property bag. Id = {0}", mailboxAssociationFromStore.ItemId);
                IMailboxAssociationBaseItem associationByItemId = this.GetAssociationByItemId(mailboxAssociationFromStore.ItemId);
                this.associationStore.OpenAssociationAsReadWrite(associationByItemId);
                return(associationByItemId);
            }
            this.Tracer.TraceDebug((long)this.GetHashCode(), "BaseAssociationAdaptor.ReadOrCreateMailboxItem. MailboxAssociation was not instantiated from store item, querying store");
            MailboxLocator slaveMailboxLocator = this.GetSlaveMailboxLocator(mailboxAssociation);

            return(this.ReadOrCreateMailboxItem(slaveMailboxLocator));
        }
コード例 #9
0
        public MailboxAssociation GetAssociation(IMailboxLocator locator)
        {
            ArgumentValidator.ThrowIfNull("locator", locator);
            this.ValidateTargetLocatorType(locator);
            MailboxAssociation mailboxAssociation;

            using (IMailboxAssociationBaseItem itemFromStore = this.GetItemFromStore(locator))
            {
                if (itemFromStore != null)
                {
                    this.Tracer.TraceDebug <IMailboxLocator>((long)this.GetHashCode(), "BaseAssociationAdaptor.GetAssociation: Creating association from store item. Locator={0}", locator);
                    mailboxAssociation = this.CreateMailboxAssociationFromItem(itemFromStore, true);
                }
                else
                {
                    this.Tracer.TraceDebug <IMailboxLocator>((long)this.GetHashCode(), "BaseAssociationAdaptor.GetAssociation: Creating default association. Locator={0}", locator);
                    mailboxAssociation = this.CreateMailboxAssociationWithDefaultValues(locator);
                }
            }
            this.Tracer.TraceDebug <IMailboxLocator, MailboxAssociation>((long)this.GetHashCode(), "BaseAssociationAdaptor.GetAssociation: Returning association for Locator={0}. Association: {1}", locator, mailboxAssociation);
            return(mailboxAssociation);
        }
コード例 #10
0
 private static void UpdateStoreAssociationSyncState(MailboxAssociation association, IMailboxAssociationBaseItem item)
 {
     item.SyncedVersion       = association.SyncedVersion;
     item.LastSyncError       = (association.LastSyncError ?? string.Empty);
     item.SyncAttempts        = association.SyncAttempts;
     item.SyncedSchemaVersion = (association.SyncedSchemaVersion ?? string.Empty);
     if (association.SyncedIdentityHash != null)
     {
         item.SyncedIdentityHash = association.SyncedIdentityHash;
     }
 }
コード例 #11
0
 protected static void UpdateLocatorDataInStoreItem(IMailboxLocator mailboxLocator, IMailboxAssociationBaseItem item)
 {
     if (!string.IsNullOrEmpty(mailboxLocator.LegacyDn))
     {
         item.LegacyDN = mailboxLocator.LegacyDn;
     }
     if (!string.IsNullOrEmpty(mailboxLocator.ExternalId))
     {
         item.ExternalId = mailboxLocator.ExternalId;
     }
 }
コード例 #12
0
        protected override void UpdateStoreAssociationSlaveData(MailboxAssociation association, IMailboxAssociationBaseItem item)
        {
            IMailboxAssociationUser mailboxAssociationUser = (IMailboxAssociationUser)item;

            BaseAssociationAdaptor.UpdateLocatorDataInStoreItem(association.User, mailboxAssociationUser);
            mailboxAssociationUser.SyncedIdentityHash = association.Group.IdentityHash;
            mailboxAssociationUser.IsPin = association.IsPin;
        }
コード例 #13
0
        protected override void UpdateStoreAssociationMasterData(MailboxAssociation association, IMailboxAssociationBaseItem item)
        {
            IMailboxAssociationUser mailboxAssociationUser = (IMailboxAssociationUser)item;

            BaseAssociationAdaptor.UpdateLocatorDataInStoreItem(association.User, mailboxAssociationUser);
            mailboxAssociationUser.SmtpAddress      = association.UserSmtpAddress;
            mailboxAssociationUser.IsMember         = association.IsMember;
            mailboxAssociationUser.ShouldEscalate   = association.ShouldEscalate;
            mailboxAssociationUser.IsAutoSubscribed = association.IsAutoSubscribed;
            mailboxAssociationUser.JoinedBy         = association.JoinedBy;
            mailboxAssociationUser.JoinDate         = association.JoinDate;
            mailboxAssociationUser.LastVisitedDate  = association.LastVisitedDate;
            if (!association.IsMember && mailboxAssociationUser.IsPin)
            {
                mailboxAssociationUser.IsPin = false;
            }
        }
コード例 #14
0
        protected override void UpdateStoreAssociationMasterData(MailboxAssociation association, IMailboxAssociationBaseItem item)
        {
            IMailboxAssociationGroup mailboxAssociationGroup = (IMailboxAssociationGroup)item;

            BaseAssociationAdaptor.UpdateLocatorDataInStoreItem(association.Group, mailboxAssociationGroup);
            mailboxAssociationGroup.IsPin   = association.IsPin;
            mailboxAssociationGroup.PinDate = association.PinDate;
        }
コード例 #15
0
 protected abstract void UpdateStoreAssociationSlaveData(MailboxAssociation association, IMailboxAssociationBaseItem item);
コード例 #16
0
        protected override void UpdateStoreAssociationSlaveData(MailboxAssociation association, IMailboxAssociationBaseItem item)
        {
            IMailboxAssociationGroup mailboxAssociationGroup = (IMailboxAssociationGroup)item;

            BaseAssociationAdaptor.UpdateLocatorDataInStoreItem(association.Group, mailboxAssociationGroup);
            mailboxAssociationGroup.SyncedIdentityHash = association.User.IdentityHash;
            mailboxAssociationGroup.IsMember           = association.IsMember;
            mailboxAssociationGroup.JoinDate           = association.JoinDate;
            if (!association.IsMember)
            {
                mailboxAssociationGroup.IsPin = false;
            }
        }
コード例 #17
0
 protected override void UpdateStoreAssociationSlaveData(MailboxAssociation association, IMailboxAssociationBaseItem item)
 {
     throw new NotImplementedException("UnseenDataUserAssociationAdaptor should only be used to GetMembershipAssociations");
 }