示例#1
0
        private static ISearchDocuments CreateSearchDocuments(PanelContent pc)
        {
            if (pc == null || !pc.HasSubpanel("search-results"))
            {
                return(EmptySearchDocuments());
            }
            pc = pc.Subpanel("search-results");
            if (!pc.HasSubpanel("search-hits"))
            {
                return(EmptySearchDocuments());
            }
            pc = pc.Subpanel("search-hits");
            if (!pc.HasResult)
            {
                return(EmptySearchDocuments());
            }

            var documents = new SearchDocuments();

            foreach (var product in pc.ResultAsProducts())
            {
                var productDocument = new SearchDocument();
                foreach (var field in product.Select(a => new SearchField(a.Name, a.Value)))
                {
                    productDocument.Add(field);
                }
                documents.Add(productDocument);

                foreach (var variant in product.VariantList)
                {
                    var variantDocument = new SearchDocument();
                    foreach (var field in variant.Select(a => new SearchField(a.Name, a.Value)))
                    {
                        variantDocument.Add(field);
                    }
                    documents.Add(variantDocument);
                }
            }

            documents.TotalCount = documents.Count; //Bug in SearchResults, SearchDocuments.TotalCount is never set implicitly.
            return(documents);
        }
        private static void ExtractPanelResult(PanelContent pc, IList <PanelResult <Result.Products> > result)
        {
            if (pc.Error != null)
            {
                var panelResult = new PanelResult <Result.Products>(pc.Error);
                result.Add(panelResult);
                return;
            }

            if (pc.HasResult && pc.Result().Type == Result.ResultType.Products)
            {
                var panelResult = new PanelResult <Result.Products>(pc.Attributes, pc.ResultAsProducts(), pc.Ticket);
                result.Add(panelResult);
                return;
            }

            foreach (var subPanel in pc.Subpanels)
            {
                ExtractPanelResult(subPanel, result);
            }
        }