public override void ProcessMailbox(DirectoryMailbox mailbox, IAnchorRunspaceProxy runspace)
        {
            DirectoryDatabase directoryDatabase = (DirectoryDatabase)mailbox.Parent;
            IMailboxPolicy    violatedPolicy    = this.GetViolatedPolicy(mailbox, directoryDatabase);

            if (violatedPolicy == null)
            {
                return;
            }
            MoveInfo info = this.getMoveInfo.GetInfo(mailbox, runspace);

            ProvisioningConstraintFixStateLog.Write(mailbox, directoryDatabase, info);
            switch (info.Status)
            {
            case MoveStatus.MoveExistsNotInProgress:
                violatedPolicy.HandleExistingButNotInProgressMove(mailbox, directoryDatabase);
                return;

            case MoveStatus.MoveExistsInProgress:
                break;

            case MoveStatus.MoveDoesNotExist:
                this.InjectMoveRequest(mailbox, violatedPolicy);
                break;

            default:
                return;
            }
        }
        private void InjectMoveRequest(DirectoryMailbox mailbox, IMailboxPolicy violatedPolicy)
        {
            BatchName batchName = violatedPolicy.GetBatchName();

            if (batchName == null)
            {
                throw new InvalidOperationException("Batch names should never be null.");
            }
            base.Logger.Log(MigrationEventType.Information, "Starting a new load balancing procedure to fix provisioning constraint, batch name will be '{0}'", new object[]
            {
                batchName
            });
            this.moveInjector.InjectMoveForMailbox(mailbox, batchName);
        }
 public PolicyActivationControl(IMailboxPolicy policy, ILoadBalanceSettings settings)
 {
     AnchorUtil.ThrowOnNullArgument(policy, "policy");
     this.policy   = policy;
     this.settings = settings;
 }