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)); } } }
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); }
public void OpenAssociationAsReadWrite(IMailboxAssociationBaseItem associationItem) { ArgumentValidator.ThrowIfNull("associationItem", associationItem); this.CheckDisposed("OpenAssociationAsReadWrite"); MailboxAssociationBaseItem mailboxAssociationBaseItem = (MailboxAssociationBaseItem)associationItem; mailboxAssociationBaseItem.OpenAsReadWrite(); }
public void DeleteAssociation(IMailboxAssociationBaseItem associationItem) { ArgumentValidator.ThrowIfNull("associationItem", associationItem); this.CheckDisposed("DeleteAssociation"); MailboxAssociationBaseItem mailboxAssociationBaseItem = (MailboxAssociationBaseItem)associationItem; this.DeleteAssociation(mailboxAssociationBaseItem.GetValueOrDefault <VersionedId>(ItemSchema.Id)); }
public void SaveAssociation(IMailboxAssociationBaseItem association) { ArgumentValidator.ThrowIfNull("association", association); this.CheckDisposed("SaveAssociation"); this.performanceTracker.IncrementAssociationsUpdated(); MailboxAssociationBaseItem mailboxAssociationBaseItem = (MailboxAssociationBaseItem)association; mailboxAssociationBaseItem.Save(SaveMode.ResolveConflicts); }
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); }
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); }
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)); }
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); }
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; } }
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; } }
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; }
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; } }
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; }
protected abstract void UpdateStoreAssociationSlaveData(MailboxAssociation association, IMailboxAssociationBaseItem item);
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; } }
protected override void UpdateStoreAssociationSlaveData(MailboxAssociation association, IMailboxAssociationBaseItem item) { throw new NotImplementedException("UnseenDataUserAssociationAdaptor should only be used to GetMembershipAssociations"); }