private bool TryInstantiateAggregator(ConversationAggregatorFactory.AggregationApproach approach, bool scenarioSupportsSearchForDuplicatedMessages, out IConversationAggregator aggregator)
        {
            aggregator = null;
            if (approach == ConversationAggregatorFactory.AggregationApproach.NoOp)
            {
                return(false);
            }
            IAggregationByItemClassReferencesSubjectProcessor aggregationByItemClassReferencesSubjectProcessor = AggregationByItemClassReferencesSubjectProcessor.CreateInstance(this.xsoFactory, this.session, this.mailboxOwner.RequestExtraPropertiesWhenSearching, this.indexTrackingEx);

            if (approach == ConversationAggregatorFactory.AggregationApproach.SameConversation)
            {
                aggregator = new SameConversationAggregator(aggregationByItemClassReferencesSubjectProcessor);
                return(true);
            }
            ConversationAggregationDiagnosticsFrame diagnosticsFrame     = new ConversationAggregationDiagnosticsFrame(this.session);
            AggregationByParticipantProcessor       participantProcessor = AggregationByParticipantProcessor.CreateInstance(this.session, this.xsoFactory);

            switch (approach)
            {
            case ConversationAggregatorFactory.AggregationApproach.SideConversation:
                aggregator = new SideConversationAggregator(this.mailboxOwner, scenarioSupportsSearchForDuplicatedMessages, aggregationByItemClassReferencesSubjectProcessor, participantProcessor, diagnosticsFrame);
                return(true);

            case ConversationAggregatorFactory.AggregationApproach.ThreadedConversation:
                aggregator = new ThreadedConversationAggregator(this.mailboxOwner, scenarioSupportsSearchForDuplicatedMessages, aggregationByItemClassReferencesSubjectProcessor, participantProcessor, diagnosticsFrame);
                return(true);

            default:
                return(false);
            }
        }
 public bool TryInstantiateAggregatorForDelivery(out IConversationAggregator aggregator)
 {
     ConversationAggregatorFactory.AggregationApproach approach = this.IdentifyAggregationApproachForDelivery();
     return(this.TryInstantiateAggregator(approach, true, out aggregator));
 }
 public bool TryInstantiateAggregatorForSave(CoreItemOperation saveOperation, ICoreItem item, out IConversationAggregator aggregator)
 {
     ConversationAggregatorFactory.AggregationApproach approach = this.IdentifyAggregationApproachForSave(saveOperation, item);
     return(this.TryInstantiateAggregator(approach, false, out aggregator));
 }
        public static bool TryInstantiateAggregatorForDelivery(IMailboxSession session, IMailboxOwner mailboxOwner, ConversationIndexTrackingEx indexTrackingEx, out IConversationAggregator aggregator)
        {
            ConversationAggregatorFactory conversationAggregatorFactory = new ConversationAggregatorFactory(session, mailboxOwner, XSOFactory.Default, indexTrackingEx);

            return(conversationAggregatorFactory.TryInstantiateAggregatorForDelivery(out aggregator));
        }
        public static bool TryInstantiateAggregatorForDelivery(IMailboxSession session, MiniRecipient miniRecipient, ConversationIndexTrackingEx indexTrackingEx, out IConversationAggregator aggregator)
        {
            MailboxOwnerFactory mailboxOwnerFactory = new MailboxOwnerFactory(session);

            return(ConversationAggregatorFactory.TryInstantiateAggregatorForDelivery(session, mailboxOwnerFactory.Create(miniRecipient), indexTrackingEx, out aggregator));
        }
        public static bool TryInstantiateAggregatorForSave(IMailboxSession session, CoreItemOperation saveOperation, ICoreItem item, ConversationIndexTrackingEx indexTrackingEx, out IConversationAggregator aggregator)
        {
            MailboxOwnerFactory           mailboxOwnerFactory           = new MailboxOwnerFactory(session);
            ConversationAggregatorFactory conversationAggregatorFactory = new ConversationAggregatorFactory(session, mailboxOwnerFactory.Create(), XSOFactory.Default, indexTrackingEx);

            return(conversationAggregatorFactory.TryInstantiateAggregatorForSave(saveOperation, item, out aggregator));
        }