protected override IMailboxAssociationBaseItem CreateStoreItem(MailboxLocator locator) { IMailboxAssociationGroup mailboxAssociationGroup = base.AssociationStore.CreateGroupAssociation(); mailboxAssociationGroup[MailboxAssociationBaseSchema.ExternalId] = (locator.ExternalId ?? string.Empty); mailboxAssociationGroup[MailboxAssociationBaseSchema.LegacyDN] = locator.LegacyDn; mailboxAssociationGroup[MailboxAssociationBaseSchema.IsPin] = false; return(mailboxAssociationGroup); }
protected override IMailboxAssociationBaseItem CreateStoreItem(MailboxLocator locator) { IMailboxAssociationUser mailboxAssociationUser = base.AssociationStore.CreateUserAssociation(); mailboxAssociationUser[MailboxAssociationBaseSchema.ExternalId] = (locator.ExternalId ?? string.Empty); mailboxAssociationUser[MailboxAssociationBaseSchema.LegacyDN] = locator.LegacyDn; mailboxAssociationUser[MailboxAssociationBaseSchema.SmtpAddress] = string.Empty; mailboxAssociationUser[MailboxAssociationBaseSchema.IsMember] = false; mailboxAssociationUser[MailboxAssociationBaseSchema.ShouldEscalate] = false; mailboxAssociationUser[MailboxAssociationBaseSchema.IsPin] = false; mailboxAssociationUser[MailboxAssociationBaseSchema.JoinDate] = default(ExDateTime); mailboxAssociationUser[MailboxAssociationUserSchema.LastVisitedDate] = default(ExDateTime); return(mailboxAssociationUser); }
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 bool ReplicateAssociation(IAssociationAdaptor masterAdaptor, params MailboxAssociation[] associations) { ArgumentValidator.ThrowIfNull("associations", associations); ArgumentValidator.ThrowIfOutOfRange <int>("associations", associations.Length, 1, 1); ArgumentValidator.ThrowIfNull("masterAdaptor", masterAdaptor); MailboxAssociation mailboxAssociation = associations[0]; InProcessAssociationReplicator.Tracer.TraceDebug <MailboxAssociation>((long)this.GetHashCode(), "InProcessAssociationReplicator::ReplicateAssociations: {0}", mailboxAssociation); this.Logger.LogEvent(new SchemaBasedLogEvent <MailboxAssociationLogSchema.CommandExecution> { { MailboxAssociationLogSchema.CommandExecution.Command, "InProcessAssociationReplicator" }, { MailboxAssociationLogSchema.CommandExecution.GroupMailbox, mailboxAssociation.Group }, { MailboxAssociationLogSchema.CommandExecution.UserMailboxes, mailboxAssociation.User } }); this.PerformanceTracker.IncrementAssociationReplicationAttempts(); MailboxLocator slaveMailboxLocator = masterAdaptor.GetSlaveMailboxLocator(mailboxAssociation); bool flag = false; try { if (slaveMailboxLocator.IsValidReplicationTarget()) { flag = this.ExecuteReplicationToMailbox(masterAdaptor, mailboxAssociation); } else { InProcessAssociationReplicator.Tracer.TraceDebug <MailboxAssociation>((long)this.GetHashCode(), "InProcessAssociationReplicator.ReplicateAssociation. Marking association for not replication given target type. Association = {0}", mailboxAssociation); this.Logger.LogEvent(new SchemaBasedLogEvent <MailboxAssociationLogSchema.CommandExecution> { { MailboxAssociationLogSchema.CommandExecution.Command, "InProcessAssociationReplicator.MEU.Poison" }, { MailboxAssociationLogSchema.CommandExecution.GroupMailbox, mailboxAssociation.Group }, { MailboxAssociationLogSchema.CommandExecution.UserMailboxes, mailboxAssociation.User } }); mailboxAssociation.SyncedVersion = int.MaxValue; mailboxAssociation.LastSyncError = "Target mailbox is not capable of replication"; flag = true; } } catch (MailboxNotFoundException ex) { if (this.DeleteMailboxNotFoundAssociation(mailboxAssociation, masterAdaptor, ex)) { InProcessAssociationReplicator.Tracer.TraceDebug((long)this.GetHashCode(), "InProcessAssociationReplicator.ReplicateAssociation. Succeeded deleting association for not found mailbox, reporting successful replication and skipping SaveAssociationAfterReplicationAttempt."); return(true); } this.ProcessFailure(mailboxAssociation, ex.ToString()); } if (!flag) { masterAdaptor.AssociationStore.SaveMailboxAsOutOfSync(); } this.SaveAssociationAfterReplicationAttempt(masterAdaptor, mailboxAssociation); return(flag); }
protected abstract IMailboxAssociationBaseItem CreateStoreItem(MailboxLocator locator);
public BaseAssociationAdaptor(IAssociationStore associationStore, IRecipientSession adSession, MailboxLocator masterMailboxLocator) { ArgumentValidator.ThrowIfNull("associationStore", associationStore); ArgumentValidator.ThrowIfNull("adSession", adSession); ArgumentValidator.ThrowIfNull("masterMailboxLocator", masterMailboxLocator); this.associationStore = associationStore; this.adSession = adSession; this.masterMailboxLocator = masterMailboxLocator; }
protected override IMailboxAssociationBaseItem CreateStoreItem(MailboxLocator locator) { throw new NotImplementedException("UnseenDataUserAssociationAdaptor should only be used to GetMembershipAssociations"); }