private ConversationAggregatorFactory.AggregationApproach IdentifyAggregationApproachForSave(CoreItemOperation saveOperation, ICoreItem item)
        {
            if (this.session.LogonType == LogonType.Transport)
            {
                return(ConversationAggregatorFactory.AggregationApproach.NoOp);
            }
            ICorePropertyBag propertyBag    = item.PropertyBag;
            string           valueOrDefault = propertyBag.GetValueOrDefault <string>(InternalSchema.ItemClass, string.Empty);

            if (string.IsNullOrEmpty(valueOrDefault) || ConversationIdFromIndexProperty.CheckExclusionList(valueOrDefault) || propertyBag.GetValueOrDefault <bool>(InternalSchema.IsAssociated))
            {
                return(ConversationAggregatorFactory.AggregationApproach.NoOp);
            }
            if (this.mailboxOwner.ThreadedConversationProcessingEnabled || this.mailboxOwner.SideConversationProcessingEnabled)
            {
                if (saveOperation == CoreItemOperation.Send || (item.Origin == Origin.New && !ConversationIndex.WasMessageEverProcessed(propertyBag)))
                {
                    if (!this.mailboxOwner.ThreadedConversationProcessingEnabled)
                    {
                        return(ConversationAggregatorFactory.AggregationApproach.SideConversation);
                    }
                    return(ConversationAggregatorFactory.AggregationApproach.ThreadedConversation);
                }
                else
                {
                    if (this.mailboxOwner.IsGroupMailbox && !propertyBag.GetValueOrDefault <bool>(InternalSchema.IsDraft))
                    {
                        return(ConversationAggregatorFactory.AggregationApproach.SideConversation);
                    }
                    return(ConversationAggregatorFactory.AggregationApproach.NoOp);
                }
            }
            else
            {
                if (item.Origin == Origin.New && !ConversationIndex.WasMessageEverProcessed(propertyBag))
                {
                    return(ConversationAggregatorFactory.AggregationApproach.SameConversation);
                }
                return(ConversationAggregatorFactory.AggregationApproach.NoOp);
            }
        }