Exemplo n.º 1
0
        private SearchRequest BuildFromSearchQuery(SearchExpressionNode node, string searchQuery)
        {
            var providers = new List <SearchProvider>();

            if (node.source?.type == ExpressionType.Provider)
            {
                var selectedProviderName = Convert.ToString(node.source.value);
                if (!m_AdditionalProviders.TryGetValue(selectedProviderName, out var selectedProvider))
                {
                    selectedProvider = SearchService.GetProvider(selectedProviderName);
                }
                if (selectedProvider != null)
                {
                    providers.Add(selectedProvider);
                }
            }
            else if (node.source == null)
            {
                providers.AddRange(SearchService.Providers.Where(p => p.active));
            }
            else
            {
                throw new NotSupportedException($"Evaluation of source node {node.source.id} of type {node.source.type} is not supported.");
            }

            requestCount++;
            return(new SearchRequest(node.type, SearchService.CreateContext(providers, searchQuery, m_SearchOptions)));
        }
Exemplo n.º 2
0
        private SearchRequest BuildSearchRequest(SearchExpressionNode node)
        {
            var searchQuery = Convert.ToString(node.value);

            if (node.variables != null)
            {
                // Replace constants
                foreach (var v in node.variables)
                {
                    if (v.type != ExpressionType.Value)
                    {
                        continue;
                    }

                    var constantValue = Convert.ToString(v.source.value);
                    if (String.IsNullOrEmpty(constantValue))
                    {
                        UnityEngine.Debug.LogWarning($"Constant value is null for {v.source.id}");
                    }

                    searchQuery = searchQuery.Replace($"${v.name}", constantValue);
                }

                foreach (var v in node.variables)
                {
                    if (v.type == ExpressionType.Value)
                    {
                        continue;
                    }

                    switch (v.type)
                    {
                    case ExpressionType.Search:
                    case ExpressionType.Select:
                    {
                        var varName = v.name;
                        return(BuildRequest(v.source).Join(varValue =>
                            {
                                var selectNode = new SearchExpressionNode(node.type, node.source, searchQuery.Replace($"${varName}", varValue));
                                return BuildRequest(selectNode);
                            }));
                    }

                    case ExpressionType.Undefined:
                        break;

                    default:
                        throw new NotSupportedException($"Evaluation of variable {v.name} of type {v.type} not supported");
                    }
                }
            }

            var providers = new List <SearchProvider>();

            if (node.source?.type == ExpressionType.Provider)
            {
                var selectedProviderName = Convert.ToString(node.source.value);
                if (!m_AdditionalProviders.TryGetValue(selectedProviderName, out var selectedProvider))
                {
                    selectedProvider = SearchService.GetProvider(selectedProviderName);
                }
                if (selectedProvider != null)
                {
                    providers.Add(selectedProvider);
                }
            }
            else if (node.source == null)
            {
                providers.AddRange(SearchService.Providers.Where(p => p.active));
            }
            else
            {
                throw new NotSupportedException($"Evaluation of source node {node.source.id} of type {node.source.type} is not supported.");
            }

            requestCount++;
            return(new SearchRequest(node.type, SearchService.CreateContext(providers, searchQuery, m_SearchOptions)));
        }