internal void CreateSuccessResult(SearchMailboxesResult ewsResult)
        {
            SortedResultPage sortedResultPage = null;
            List <Pair <MailboxInfo, Exception> >       previewErrors = null;
            Dictionary <string, List <IRefinerResult> > dictionary    = null;
            List <MailboxStatistics>         mailboxStatistics        = null;
            Dictionary <string, IKeywordHit> dictionary2 = null;

            if (base.SearchCriteria.SearchType == SearchType.Preview || base.SearchCriteria.SearchType == SearchType.NonIndexedItemPreview || base.SearchCriteria.SearchType == SearchType.NonIndexedItemStatistics)
            {
                sortedResultPage = this.ConvertToPreviewItems(ewsResult.PreviewItems);
                if (ewsResult.FailedMailboxes != null && ewsResult.FailedMailboxes.Length != 0)
                {
                    previewErrors = this.ConvertToPreviewErrors(ewsResult.FailedMailboxes);
                }
                bool emptyResults = sortedResultPage != null && sortedResultPage.ResultCount == 0;
                dictionary        = null;
                mailboxStatistics = this.ConvertMailboxStatistics(ewsResult.MailboxStats, emptyResults);
                if (sortedResultPage == null && (ewsResult.ItemCount > 0L || dictionary != null || ewsResult.Size > 0UL))
                {
                    throw new WebServiceProxyInvalidResponseException(Strings.InvalidPreviewSearchResults(this.Uri.AbsoluteUri));
                }
            }
            if (base.SearchCriteria.SearchType == SearchType.Statistics)
            {
                dictionary2 = new Dictionary <string, IKeywordHit>();
                foreach (KeywordStatisticsSearchResult keywordStatisticsSearchResult in ewsResult.KeywordStats)
                {
                    KeywordHit value = new KeywordHit(keywordStatisticsSearchResult.Keyword, (ulong)((long)keywordStatisticsSearchResult.ItemHits), new ByteQuantifiedSize(keywordStatisticsSearchResult.Size));
                    dictionary2.Add(keywordStatisticsSearchResult.Keyword, value);
                }
            }
            base.ResultAggregator.MergeSearchResult(new ResultAggregator(sortedResultPage, dictionary, (ulong)ewsResult.ItemCount, new ByteQuantifiedSize(ewsResult.Size), previewErrors, dictionary2, mailboxStatistics));
        }
    void ReadElementsFromXml(EwsServiceXmlReader reader)
    {
        this.searchResult = new SearchMailboxesResult();

        base.ReadElementsFromXml(reader);

        this.searchResult = SearchMailboxesResult.LoadFromXml(reader);
    }
 internal void MergeSearchResults(SearchMailboxesResult result)
 {
     this.CreateSuccessResult(result);
 }
Example #4
0
    /// <summary>
    /// Load from xml
    /// </summary>
    /// <param name="reader">The reader</param>
    /// <returns>Search result object</returns>
    static SearchMailboxesResult LoadFromXml(EwsServiceXmlReader reader)
    {
        SearchMailboxesResult searchResult = new SearchMailboxesResult();

        reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.SearchMailboxesResult);

        List <MailboxQuery> searchQueries = new List <MailboxQuery>();

        do
        {
            reader.Read();
            if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SearchQueries))
            {
                reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.MailboxQuery);
                String query = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Query);
                reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes);
                List <MailboxSearchScope> mailboxSearchScopes = new List <MailboxSearchScope>();
                do
                {
                    reader.Read();
                    if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScope))
                    {
                        String mailbox = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Mailbox);
                        reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.SearchScope);
                        String searchScope = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SearchScope);
                        reader.ReadEndElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScope);
                        mailboxSearchScopes.Add(new MailboxSearchScope(mailbox, (MailboxSearchLocation)Enum.Parse(typeof(MailboxSearchLocation), searchScope)));
                    }
                }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes));
                reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.MailboxSearchScopes);
                searchQueries.Add(new MailboxQuery(query, mailboxSearchScopes.ToArray()));
            }
        }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.SearchQueries));
        reader.ReadEndElementIfNecessary(XmlNamespace.Types, XmlElementNames.SearchQueries);
        searchResult.SearchQueries = searchQueries.ToArray();

        searchResult.ResultType    = (SearchResultType)Enum.Parse(typeof(SearchResultType), reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ResultType));
        searchResult.ItemCount     = int.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ItemCount));
        searchResult.Size          = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.Size));
        searchResult.PageItemCount = int.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.PageItemCount));
        searchResult.PageItemSize  = ulong.Parse(reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.PageItemSize));

        do
        {
            reader.Read();
            if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.KeywordStats))
            {
                searchResult.KeywordStats = LoadKeywordStatsXml(reader);
            }

            if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Items))
            {
                searchResult.PreviewItems = LoadPreviewItemsXml(reader);
            }

            if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.FailedMailboxes))
            {
                searchResult.FailedMailboxes = FailedSearchMailbox.LoadFailedMailboxesXml(XmlNamespace.Types, reader);
            }

            if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Refiners))
            {
                List <SearchRefinerItem> refiners = new List <SearchRefinerItem>();
                do
                {
                    reader.Read();
                    if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Refiner))
                    {
                        refiners.Add(SearchRefinerItem.LoadFromXml(reader));
                    }
                }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Refiners));
                if (refiners.Count > 0)
                {
                    searchResult.Refiners = refiners.ToArray();
                }
            }

            if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxStats))
            {
                List <MailboxStatisticsItem> mailboxStats = new List <MailboxStatisticsItem>();
                do
                {
                    reader.Read();
                    if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.MailboxStat))
                    {
                        mailboxStats.Add(MailboxStatisticsItem.LoadFromXml(reader));
                    }
                }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.MailboxStats));
                if (mailboxStats.Count > 0)
                {
                    searchResult.MailboxStats = mailboxStats.ToArray();
                }
            }
        }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.SearchMailboxesResult));

        return(searchResult);
    }