Esempio n. 1
0
        public IHttpActionResult Get([FromUri] string[] videoNumbers, [FromUri] string[] featureType, [FromUri] string[] queries, [FromUri] string[] operatorStrings)
        {
            string[] operators         = new string[] { "AND", "OR", "NOT" };
            string[] specialCharacters = new string[] { "\"" };

            List <SearchResult> searchResults = new List <SearchResult>();
            List <string>       words         = new List <String>();



            foreach (var videoNumber in videoNumbers)
            {
                ArrayList tempResults    = new ArrayList();
                var       shortInstances = new List <ResultInstance>();


                tempResults.Add(dbOperations.SearchForString(videoNumber.ToString(), featureType[0], queries[0]));
                for (int i = 1; i < queries.Count(); i++)
                {
                    tempResults.Add(operatorStrings[i - 1]);
                    tempResults.Add(dbOperations.SearchForString(videoNumber.ToString(), featureType[i], queries[i]));
                }

                foreach (var op in operators)
                {
                    for (int i = 0; i < tempResults.Count; i++)
                    {
                        if (tempResults[i] is string && (string)tempResults[i] == op)
                        {
                            SearchOperatorFactory searchOperatorFactory = new SearchOperatorFactory();
                            SearchOperator        searchOperator        = searchOperatorFactory.getSearchOperator((string)tempResults[i]);

                            if (searchOperator.getNumberOfParameters() == 2)
                            {
                                searchOperator.AddLeft((List <ResultInstance>)tempResults[i - 1]);
                            }
                            searchOperator.AddRight((List <ResultInstance>)tempResults[i + 1]);

                            tempResults[i] = searchOperator.ApplyOperator();
                            tempResults.RemoveAt(i - 1);
                            tempResults.RemoveAt(i);
                        }
                    }
                }

                foreach (var tempResult in tempResults)
                {
                    foreach (var tr in (List <ResultInstance>)tempResult)
                    {
                        shortInstances.Add((ResultInstance)tr);
                    }
                }

                searchResults.Add(new SearchResult
                {
                    videoName       = dbOperations.GetVideoStats(videoNumber).videoName,
                    resultInstances = shortInstances
                });
            }

            return(Ok(searchResults));
        }