protected abstract void MapiImportDeletes(ImportDeletionFlags importDeletionFlags, PropValue[] sourceKeys);
 protected override void MapiImportDeletes(ImportDeletionFlags importDeletionFlags, PropValue[] sourceKeys)
 {
     base.MapiCollector.ImportMessageDeletion(importDeletionFlags, sourceKeys);
 }
        internal void ImportDeletes(DeleteItemFlags deleteItemFlags, byte[][] sourceKeys)
        {
            this.CheckDisposed(null);
            Util.ThrowOnNullArgument(sourceKeys, "sourceKeys");
            ImportDeletionFlags importDeletionFlags = ((deleteItemFlags & DeleteItemFlags.HardDelete) == DeleteItemFlags.HardDelete) ? ImportDeletionFlags.HardDelete : ImportDeletionFlags.None;

            PropValue[] array = new PropValue[sourceKeys.Length];
            for (int i = 0; i < sourceKeys.Length; i++)
            {
                array[i] = new PropValue(PropTag.SourceKey, sourceKeys[i]);
            }
            StoreSession session = this.Session;
            bool         flag    = false;

            try
            {
                if (session != null)
                {
                    session.BeginMapiCall();
                    session.BeginServerHealthCall();
                    flag = true;
                }
                if (StorageGlobals.MapiTestHookBeforeCall != null)
                {
                    StorageGlobals.MapiTestHookBeforeCall(MethodBase.GetCurrentMethod());
                }
                this.MapiImportDeletes(importDeletionFlags, array);
            }
            catch (MapiPermanentException ex)
            {
                throw StorageGlobals.TranslateMapiException(ServerStrings.CannotImportDeletion, ex, session, this, "{0}. MapiException = {1}.", new object[]
                {
                    string.Format("Import of object deletions failed", new object[0]),
                    ex
                });
            }
            catch (MapiRetryableException ex2)
            {
                throw StorageGlobals.TranslateMapiException(ServerStrings.CannotImportDeletion, ex2, session, this, "{0}. MapiException = {1}.", new object[]
                {
                    string.Format("Import of object deletions failed", new object[0]),
                    ex2
                });
            }
            finally
            {
                try
                {
                    if (session != null)
                    {
                        session.EndMapiCall();
                        if (flag)
                        {
                            session.EndServerHealthCall();
                        }
                    }
                }
                finally
                {
                    if (StorageGlobals.MapiTestHookAfterCall != null)
                    {
                        StorageGlobals.MapiTestHookAfterCall(MethodBase.GetCurrentMethod());
                    }
                }
            }
        }