Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
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);
        }
Exemple #4
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));
        }
Exemple #5
0
        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);
        }
Exemple #6
0
 protected abstract IMailboxAssociationBaseItem CreateStoreItem(MailboxLocator locator);
Exemple #7
0
 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");
 }